=.=被虐罚时了......
新键盘感觉不错?
吐槽一开始的所有sample output......
2个罚时有木有.....
FB没拿到.....
貌似都是水题?
A Administrator
模拟,普通计数
1Y
#include
int main(){
int sum[10],got[10];
int k,z;
scanf("%d",&z);
for(k=1;k<=z;k++){
int n;
int i;
for(i=1;i<=2;i++){
sum[i]=0;
got[i]=0;
}
scanf("%d",&n);
for(i=1;i<=n;i++){
int t,x,y;
scanf("%d%d%d",&t,&x,&y);
sum[t]+=x+y;
got[t]+=x;
}
printf("Case #%d:\n",k);
for(i=1;i<=2;i++){
if(sum[i]<=2*got[i])printf("LIVE\n");
else printf("DEAD\n");
}
}
return 0;
}
3Y
悲剧的格式...
开个数组统计每个字符出现次数就好
sort也不错?
#include
#include
#include
#include
#include
int main(){
int k,z;
scanf("%d",&z);
for(k=1;k<=z;k++){
char s[1000];
int aim[300];
scanf("%s",s);
int i;
for(i=0;i<=255;i++)aim[i]=0;
for(i=0;i
水题...开个表格找max就行了
#include
int map[30][70];
int main(){
int k,z;
scanf("%d",&z);
for(k=1;k<=z;k++){
int i,j;
for(i=0;i<=23;i++)for(j=0;j<=59;j++)map[i][j]=0;
int n;
scanf("%d",&n);
for(i=1;i<=n;i++){
int h,m;
scanf("%d%d",&h,&m);
map[h][m]++;
}
int res=0;
for(i=0;i<=23;i++)for(j=0;j<=59;j++)if(map[i][j]>res)res=map[i][j];
printf("Case #%d: %d\n",k,res);
}
return 0;
}
DCoins
2Y
第一次忘记处理a[1]和偶数了..
想了许久才确定提交
实际上偶数的永远无解
最后一堆拿不到...
然后从后两个一对只能被最大可能的x给干掉,维护下前面的,计数就好
贪心?
#include
int main(){
int k,z;
scanf("%d",&z);
for(k=1;k<=z;k++){
int n;
int a[110];
int i,j,res;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
int max=-1;
for(i=n;i>=1;i--)if(2*i+1<=n){
max=i;
break;
}
if(max==-1||n%2==0)res=-1;
else {
res=0;
for(i=max;i>=1;i--){
int move=a[2*i+1];
if(a[2*i]>move)move=a[2*i];
res+=move;
a[i]-=move;
if(a[i]<0)a[i]=0;
a[2*i]=0;a[2*i+1]=0;
}
res+=a[1];
}
printf("Case #%d: %d\n",k,res);
}
// return main();
return 0;
}
就是轮着来,看哪个最大...送水的
#include
int a[10];
int main(){
int k,z;
scanf("%d",&z);
for(k=1;k<=z;k++){
int n;
scanf("%d",&n);
int i;
for(i=0;i<3;i++)a[i]=0;
for(i=0;imax)max=a[i];
int res;
for(i=0;i<3;i++)if(a[i]==max)res=i;
printf("Case #%d:\n",k);
if(res==0)printf("chest\n");
else if(res==1)printf("biceps\n");
else if(res==2)printf("back\n");
}
return 0;
}
一开始没敢碰..
其实就是有了一个雪堆,横竖一行一列都可以达到
然后假设从第一个开始
遍历一下
然后如果有到不了的
在第一个雪堆那一行加一个雪堆就能拐弯了
然后再遍历...
数据规模和谐的可以不想太多
#include
int map[1010][1010];
int can[1010][1010];
struct snow{int x,y;}s[1010];
int n;
int ok[1010];
int f(int t){
ok[t]=1;
int i;
for(i=1;i<=1000;i++)can[i][s[t].y]=1;
for(i=1;i<=1000;i++)can[s[t].x][i]=1;
for(i=1;i<=n;i++){
if(!ok[i]&&can[s[i].x][s[i].y])f(i);
}
}
int main(){
int k,z;
scanf("%d",&z);
for(k=1;k<=z;k++){
int i,j;
for(i=1;i<=1000;i++)for(j=1;j<=1000;j++){
map[i][j]=0;
can[i][j]=0;
}
for(i=1;i<=1000;i++)ok[i]=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
int x,y;
scanf("%d%d",&x,&y);
s[i].x=x;s[i].y=y;
map[x][y]=1;
}
f(1);
int res=0;
for(i=1;i<=n;i++){
if(!ok[i]){
res++;
n++;
s[n].x=s[1].x;
s[n].y=s[i].y;
f(n);
}
}
printf("Case #%d: %d\n",k,res);
}
return 0;
}
就是能不能使尽可能多数的一样
就是看总和能不能整除...
#include
int main(){
int a[100010];
int k,z;
scanf("%d",&z);
for(k=1;k<=z;k++){
int n;
scanf("%d",&n);
int i;
int sum=0;
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
sum+=a[i];
}
printf("Case #%d: ",k);
if(sum%n==0)printf("%d\n",n);
else printf("%d\n",n-1);
}
return 0;
}
5Y
坑了不少罚时...
I64u什么的...
没考虑要用u,没用I64用的ll
但关键是一开始只想到了 奇数的处理
偶数没想明白
偶数有两种情况,取则继续要n-1,然后枚举最大x使得x,n,n-1两两互质有一个解
另外一种就是不不取n
这样就是奇数的处理方式
罚时被虐的太惨了...
#include
#define LL unsigned long long
LL gcd(LL a,LL b){
if(b==0)return a;
if(ab)return a;return b;
}
int main(){
int k,z;
scanf("%d",&z);
for(k=1;k<=z;k++){
LL n;
scanf("%I64u",&n);
LL res;
if(n==1)res=1;
else if(n==2)res=2;
else if(n%2!=0)res=n*(n-1)*(n-2);
else {
LL i;
for(i=n-3;i>=1;i-=2)if(gcd(i,n)==1&&gcd(i,n-1)==1){
res=n*(n-1)*i;
break;
}
if(n>=4)res=max(res,(n-1)*(n-3)*(n-2));
}
printf("Case #%d: ",k);
printf("%I64u\n",res);
}
return 0;
}
return 2;