Codeforces Round #340 (Div. 2)
A. Elephant
题意:略.
思路:略.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int main()
{
while(scanf("%d",&n)!=EOF)
{
int k=n/10;
k*=2;
if(n%10 > 5)
printf("%d\n",k+2);
else if(n%10<=5 && n%10 >0)
printf("%d\n",k+1);
else
printf("%d\n",k);
}
return 0;
}
B. Chocolate
题意:0代表没有坚果,1代表有一个坚果。要求分割开之后每一块巧克力上面至少有一块坚果。
思路:每两个'1'直接有n个'0'的,共有n+1种分法,然后每两个'1'直接的分法直接相乘就是正确答案。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int a[105];
int main()
{
while(scanf("%d",&n)!=EOF)
{
int flag=0;
ll k=0;
ll ans=1;
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
if(a[i]==0 && flag)
{
k++;
}
if(a[i]==1 && !flag)
{
k=0;
flag=1;
}
else if(a[i]==1 && flag)
{
ans=ans*(k+1);
k=0;
}
//printf("k=%I64d ans=%I64d flag=%d\n",k,ans,flag);
}
if(!flag)
printf("0\n");
else
printf("%I64d\n",ans);
}
return 0;
}
C. Watering Flowers
题意:有两个喷泉,喷洒的半径分别为r1,r2.r1^2+r2^2,最小的情况下覆盖所有的花.
思路:用一个结构体分别保存每朵花到两个喷泉的距离,然后按照到一个喷泉的距离,从小到大排序。暴力循环一下找到最小值就是答案。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define inf 0x3f3f3f3f3f3f3f3f
int n;
LL x11,y11;
LL x22,y22;
struct node
{
LL r1;
LL r2;
};
node a[2100];
bool cmp(node aa,node bb)
{
if(aa.r1==bb.r1) return aa.r2<bb.r2;
else return aa.r1<bb.r1;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
LL x,y;
scanf("%I64d%I64d%I64d%I64d",&x11,&y11,&x22,&y22);
a[0].r1=0;
a[0].r2=0;
for(int i=1; i<=n; i++)
{
scanf("%I64d%I64d",&x,&y);
a[i].r1=(x-x11)*(x-x11)+(y-y11)*(y-y11);
a[i].r2=(x-x22)*(x-x22)+(y-y22)*(y-y22);
}
a[n+1].r1=0;
a[n+1].r2=0;
a[n+2].r1=0;
a[n+2].r2=0;
sort(a+1,a+n+1,cmp);
LL ans=inf;
LL sum1=0;
for(int i=0; i<=n; i++)
{
sum1=a[i+1].r2;
for(int j=i+2; j<=n; j++)
{
sum1=max(a[j].r2,sum1);
}
ans=min(ans,a[i].r1+sum1);
//printf("%I64d %I64d\n",ans,a[i].r1+sum1);
}
printf("%I64d\n",ans);
}
return 0;
}
D. Polyline
题意:略.
思路:直接按照情况写就好了.
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
struct node
{
LL x;
LL y;
};
node a[5];
LL x[5],y[5];
bool cmp(node aa,node bb)
{
if(aa.x==bb.x) return aa.y<bb.y;
else return aa.x<bb.x;
}
int main()
{
while(scanf("%I64d %I64d %I64d %I64d %I64d %I64d",&a[0].x,&a[0].y,&a[1].x,&a[1].y,&a[2].x,&a[2].y)!=EOF)
{
// cout << endl;
sort(a,a+3,cmp);
//for(int i=0; i<3; i++)
// printf("%I64d %I64d\n",a[i].x,a[i].y);
if((a[0].x==a[1].x && a[1].x==a[2].x ) || (a[0].y==a[1].y && a[1].y==a[2].y))
printf("1\n");
else if(a[0].x==a[1].x && (a[2].y<=a[0].y || a[2].y>=a[1].y))
printf("2\n");
else if(a[1].x==a[2].x && (a[0].y<=a[1].y || a[0].y>=a[2].y))
printf("2\n");
else if(a[0].y==a[1].y && a[2].x>=a[1].x)
printf("2\n");
else if(a[1].y==a[2].y && a[0].x<=a[1].x)
printf("2\n");
else
printf("3\n");
}
return 0;
}