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 }
posted @ 2012-11-22 15:07  AC_Girl  阅读(189)  评论(0编辑  收藏  举报