所谓的日常 #8 - 王司徒巧使連環計 董太師大鬧鳳儀亭

div.2

CodeForces 475A Bayan Bus

题意就是安排K个人的座位并且输出咯。

嘛,这是我以前的代码...好像比大家都长哈哈哈...

 1 #include <bits/stdc++.h>
 2 
 3 int n;
 4 int A[4][50];
 5 
 6 void paint() {
 7     for (int i = 0; n; ++ i) {
 8         if (i == 0) {
 9             int c = std::min(4,n);
10             for (int j = 0; j < c; ++ j) {
11                 A[j][i] = 1;
12             }
13             n -= c;
14         } else {
15             int c = std::min(3,n);
16             for (int j = 0; j < c; ++ j) {
17                 A[j][i] = 1;
18             }
19             std::swap(A[3][i],A[2][i]);
20             n -= c;
21         }
22     }
23     putchar('+');
24     for (int i = 0; i < 12; ++ i) {
25         printf("--");
26     }
27     putchar('+');
28     puts("");
29     for (int i = 0; i < 4; ++ i) {
30         putchar('|');
31         for (int j = 0; j < 11; ++ j) {
32             if (i==2) {
33                 if (A[i][j]) putchar('O');
34                 else if (j==0) putchar('#');
35                 else putchar('.');
36             } else {
37                 if (A[i][j]) putchar('O');
38                 else putchar('#');
39             }
40             putchar('.');
41         }
42         if (i==2) putchar('.');
43         else putchar('|');
44         if (i==0) putchar('D');
45         else putchar('.');
46         if (i==0 || i==3) puts("|)");
47         else puts("|");
48     }
49     putchar('+');
50     for (int i = 0; i < 12; ++ i) {
51         printf("--");
52     }
53     putchar('+');
54     puts("");
55 }
56 
57 int main() {
58     scanf("%d",&n);
59     paint();
60     return 0;
61 }
View Code

 

div.1

CodeForces 466C Number of Ways

把长度为n(<=5e5)的数组分成三段非空段且和相等 的方案数。

所以枚举第二段末尾位置,拿一个cnt记录之前有多少满足条件的第一段末尾 就好啦。

 1 #include <bits/stdc++.h>
 2 typedef long long LL;
 3 
 4 const int N = 500000 + 5;
 5 int A[N],n;
 6 
 7 LL work() {
 8     LL sum = std::accumulate(A,A + n,0ll);
 9     if (sum % 3 != 0) return 0;
10 
11     LL now = 0,ret = 0,cnt = 0;
12     for (int i = 0; i < n - 1; ++ i) {
13         now += A[i];
14         if (now == sum / 3 * 2) {
15             ret += cnt;
16         }
17         if (now == sum / 3) {
18             cnt ++;
19         }
20     }
21     return ret;
22 }
23 
24 int main() {
25     scanf("%d",&n);
26     for (int i = 0; i < n; ++ i) {
27         scanf("%d",A + i);
28     }
29     printf("%I64d\n",work());
30 }
View Code

 

posted @ 2016-01-02 20:32  zstuACM  阅读(243)  评论(0编辑  收藏  举报