1.切蛋糕
若a,b,c都不为零,则最多切3刀,最少当c=(a+b+c)/2时,切二刀。if() …else…
#include
#define LL long long
using namespace std;
int a,b,c,T;
int main()
{
freopen("cake.in","r",stdin);
freopen("cake.out","w",stdout);
scanf("%d",&T);
while(T--)
{
int sum=0,p[5];
scanf("%d%d%d",&p[1],&p[2],&p[3]);
sort(p+1,p+4);
a=p[1];b=p[2];c=p[3];
sum=a+b+c;
if(a==0&&b==0) printf("0\n");
else if(a==0&&b==c) printf("1\n");
else if(a==0) printf("2\n");
else if(c==sum/2) printf("2\n");
else if(a==b&&b!=c) printf("2\n");
else printf("3\n");
}
return 0;
}
2.吃豆人
暴力写了30分(大概),想了想,当n为奇数时,斜边不可能有重复,应该可以实现。
#include
#define LL long long
using namespace std;
int n,a[1086][1086],b[100086],ii[1086],jj[1086],m=5;
int main()
{
freopen("pacman.in","r",stdin);
freopen("pacman.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
ii[j]+=a[i][j];
jj[i]+=a[i][j];
}
}
if(n==2)
{
cout<<a[1][1]+a[1][2]+a[2][1]+a[2][2]<<endl;
return 0;
}
b[1]=a[2][1]+a[3][2]+a[1][2]+a[2][3]+a[1][1]+a[3][3];
b[2]=a[2][1]+a[3][2]+a[1][2]+a[2][3]+a[1][3]+a[3][1];
cout<<max(b[1],b[2])<<endl;
return 0;
}
3.
当n,m<=2时,特判是否两球相同,是否可以相遇,相遇的话最多2步,最少1步(不重复),20分…
#include
#define LL long long
using namespace std;
int n,m,p;
int MAP[300][300];
int main()
{
freopen("ball.in","r",stdin);
freopen("ball.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
while(m--)
{
int x,y;
scanf("%d%d",&x,&y);
MAP[x][y]=1;
}
while(p--)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a==c&&b==d)
{
printf("0\n");
}
else if(a==c||b==d)
{
printf("1\n");
}
else if((MAP[1][2]==1&&MAP[2][1]==1)||(MAP[1][1]==1&&MAP[2][2]==1))
{
printf("-1\n");
}
else printf("2\n");
}
return 0;
}