codeforces
题目:http://codeforces.com/contest/245/problem/A
View Code
1 int main() 2 { 3 int suma,sumb; 4 int tsuma,tsumb; 5 int cs; 6 int t,x,y; 7 int i,j; 8 while(scanf("%d",&cs) != EOF) 9 { 10 suma = sumb = tsuma = tsumb = 0; 11 for(i = 0; i < cs; i++) 12 { 13 scanf("%d%d%d",&t,&x,&y); 14 if(t == 1) 15 { 16 tsuma += 10; 17 suma += x; 18 } 19 else 20 { 21 tsumb += 10; 22 sumb += x; 23 } 24 } 25 //cout<<"sumb = "<<tsumb<<" "<<sumb<<endl; 26 if(suma >= (tsuma / 2)) printf("LIVE\n"); 27 else printf("DEAD\n"); 28 if(sumb >= (tsumb / 2)) printf("LIVE\n"); 29 else printf("DEAD\n"); 30 } 31 return 0; 32 }
题目:http://codeforces.com/contest/245/problem/B
注意有 httprururur这种情况,其他的就是简单了
View Code
1 int main() 2 { 3 char str[100]; 4 char sbr[100]; 5 int len,i; 6 while(scanf("%s",str) != EOF) 7 { 8 len = strlen(str); 9 memset(sbr,0,sizeof(sbr)); 10 int flag = 0; 11 int mark = 0; 12 int k = 0; 13 if(str[0] == 'f' && str[3] == 'r' && str[4] == 'u') 14 { 15 printf("ftp://ru"); 16 for(i = 5; i < len; i++) 17 { 18 if(str[i] == 'r' && str[i + 1] == 'u' && !mark) {printf(".ru"); i += 2; 19 if(str[i] != '\0') printf("/");i--; mark = 1;} 20 else printf("%c",str[i]); 21 22 } 23 cout<<endl; 24 continue; 25 } 26 if(str[0] == 'h' && str[4] == 'r' && str[5] == 'u') 27 { 28 printf("http://ru"); 29 for(i = 6; i < len; i++) 30 { 31 if(str[i] == 'r' && str[i + 1] == 'u' && !mark) {printf(".ru"); i += 2; 32 if(str[i] != '\0') printf("/"); i--;mark = 1;} 33 else printf("%c",str[i]); 34 35 } 36 cout<<endl; 37 continue; 38 } 39 if(str[0] == 'f') 40 for(i = 0; i < len; i++) 41 { 42 sbr[k++] = str[i]; 43 if(i == 2){sbr[k ++] = ':'; sbr[k ++] = '/'; sbr[k ++] = '/';} 44 if(str[i + 1] == 'r' && str[i + 2] == 'u' && !mark && sbr[k - 1] != '/') { sbr[k ++] = '.'; mark = 1;} 45 if(str[i - 1] == 'r' && str[i] == 'u' && !flag && (i + 1) != len) {sbr[k ++] = '/';flag = 1;} 46 } 47 else 48 { 49 for(i = 0; i < len; i++) 50 { 51 sbr[k++] = str[i]; 52 if(i == 3){sbr[k ++] = ':'; sbr[k ++] = '/'; sbr[k ++] = '/';} 53 if(str[i + 1] == 'r' && str[i + 2] == 'u' && !mark && sbr[k - 1] != '/') { sbr[k ++] = '.'; mark = 1;} 54 if(str[i - 1] == 'r' && str[i] == 'u' && !flag && (i + 1) != len) {sbr[k ++] = '/';flag = 1;} 55 } 56 } 57 sbr[k] = '\0'; 58 printf("%s\n",sbr); 59 } 60 return 0; 61 }
题目:http://codeforces.com/contest/245/problem/E
一开始想的太简单了,以为正负抵消就可以算出最少见的人数,发现不对。卡了很长时间,想不明白怎么算,最后还是用的正负抵消,只不过在抵消的时候只去除一个,比如str[i] == '+',那么就去消去已有的 '-',而不是 '+' '-'同时消去,最后求出 剩余的 '+' '-'的和便是答案
View Code
1 int main() 2 { 3 char str[400]; 4 int i; 5 stack<char>sta; 6 stack<char>stb; 7 while(scanf("%s",str) != EOF) 8 { 9 while(!sta.empty()) sta.pop(); 10 while(!stb.empty()) stb.pop(); 11 int len = strlen(str); 12 for(i = 0; i < len; i++) 13 { 14 if(str[i] == '+') 15 { 16 sta.push(str[i]); 17 if(!stb.empty()) stb.pop(); 18 } 19 else if(str[i] == '-') 20 { 21 stb.push(str[i]); 22 if(!sta.empty()) sta.pop(); 23 } 24 } 25 int ans = sta.size() + stb.size(); 26 printf("%d\n",ans); 27 } 28 return 0; 29 }
题目:http://codeforces.com/contest/245/problem/C
读了好几遍才读懂了什么意思,给出 n 堆硬币,每堆有 ai个,两个人对 n 堆硬币进行操作,(一个人也是一样的),操作的时候先随机选一个 x (2 * x + 1 < n),然后分别从 编号为:x ,2 * x , 2 * x + 1 里各去一个硬币,这样直到最后没有硬币为止。对于 n 为 偶数时,一定不行,因为不存在这样的 x 使得 x * 2 + 1 = n,当 n 为奇数时,从后往前考虑,对于 a[i],如果 i 是奇数,那么它影响的到的是:a[i - 1] 和 a[i / 2],如果 i 为 偶数,那么它只影响到 a[i / 2],所以枚举求出
View Code
1 const int N = 110; 2 int a[N]; 3 int main() 4 { 5 int i,j; 6 int n; 7 while(~scanf("%d",&n)) 8 { 9 _clr(a,0); 10 for(i = 1; i <= n; i++) 11 scanf("%d",&a[i]); 12 int ans = 0; 13 if(n < 3 || n % 2 == 0) printf("-1\n"); 14 else 15 { 16 for(i = n; i >= 1; i--) 17 { 18 if(a[i] > 0) ans += a[i]; 19 if(a[i] < 0) continue; 20 if(i % 2) 21 { 22 a[i - 1] -= a[i]; 23 a[i / 2] -= a[i]; 24 } 25 else a[i / 2] -= a[i]; 26 } 27 printf("%d\n",ans); 28 } 29 } 30 return 0; 31 }