您的位置:首页 > 其它

【2018年全国多校算法寒假训练营练习比赛(第三场)】

2018-02-04 19:43 741 查看
之前题目比较水,今天的还可以。

【A 不凡的大夫】

方法一:答案是log8(n!),解决方案是预处理,将需要的答案记录下来以免超内存;

方法二:用公式,斯特林公式:

#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll x[4],y[4],ans[4];
double S;
ll gcd(ll a,ll b)
{
return b== 0 ? a : gcd(b,a%b);
}

void getS()
{
ll x1=x[2]-x[1];
ll y1=y[2]-y[1];
ll x2=x[3]-x[1];
ll y2=y[3]-y[1];
S=abs(1.0*x1*y2-x2*y1)/2;
}
void get(int u)
{
int x0,y0;
if(u==1){
x0=abs(x[2]-x[1]);
y0=abs(y[2]-y[1]);
}
if(u==2){
x0=abs(x[3]-x[2]);
y0=abs(y[3]-y[2]);
}
if(u==3){
x0=abs(x[3]-x[1]);
y0=abs(y[3]-y[1]);
}
if(x0==0&&y0==0) ans[u]=1;
ans[u]=gcd(x0,y0)-1;
}
int main()
{
while(~scanf("%lld",&x[1])){
if(x[1]==-1) break;
scanf("%lld%lld%lld%lld%lld",&y[1],&x[2],&y[2],&x[3],&y[3]);
getS();
get(1);
get(2);
get(3);
int tS=S;
ans[0]=S-(ans[1]+ans[2]+ans[3]+3)/2+1;
printf("%.1f %lld %lld %lld %lld\n",S,ans[0],ans[1],ans[2],ans[3]);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐