# AtCoder Grand Contest 011 题解

## A - Airport Bus

 1 //waz
2 #include <bits/stdc++.h>
3
4 using namespace std;
5
6 #define mp make_pair
7 #define pb push_back
8 #define fi first
9 #define se second
10 #define ALL(x) (x).begin(), (x).end()
11 #define SZ(x) ((int)((x).size()))
12
13 typedef pair<int, int> PII;
14 typedef vector<int> VI;
15 typedef long long int64;
16 typedef unsigned int uint;
17 typedef unsigned long long uint64;
18
19 #define gi(x) ((x) = F())
20 #define gii(x, y) (gi(x), gi(y))
21 #define giii(x, y, z) (gii(x, y), gi(z))
22
23 int F()
24 {
25     char ch;
26     int x, a;
27     while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-');
28     if (ch == '-') ch = getchar(), a = -1;
29     else a = 1;
30     x = ch - '0';
31     while (ch = getchar(), ch >= '0' && ch <= '9')
32         x = (x << 1) + (x << 3) + ch - '0';
33     return a * x;
34 }
35
36 const int N = 1e5 + 10;
37
38 int n, c, k, t[N], ans;
39
40 int main()
41 {
42     giii(n, c, k);
43     for (int i = 1; i <= n; ++i) gi(t[i]);
44     sort(t + 1, t + n + 1);
45     for (int i = 1; i <= n; ++i)
46     {
47         int j;
48         if (t[n] > t[i] + k) j = upper_bound(t + 1, t + n + 1, t[i] + k) - t - 1;
49         else j = n;
50         j = min(i + c - 1, j);
51         i = j;
52         ++ans;
53     }
54     printf("%d\n", ans);
55 }

## B - Colorful Creatures

 1 //waz
2 #include <bits/stdc++.h>
3
4 using namespace std;
5
6 #define mp make_pair
7 #define pb push_back
8 #define fi first
9 #define se second
10 #define ALL(x) (x).begin(), (x).end()
11 #define SZ(x) ((int)((x).size()))
12
13 typedef pair<int, int> PII;
14 typedef vector<int> VI;
15 typedef long long int64;
16 typedef unsigned int uint;
17 typedef unsigned long long uint64;
18
19 #define gi(x) ((x) = F())
20 #define gii(x, y) (gi(x), gi(y))
21 #define giii(x, y, z) (gii(x, y), gi(z))
22
23 int F()
24 {
25     char ch;
26     int x, a;
27     while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-');
28     if (ch == '-') ch = getchar(), a = -1;
29     else a = 1;
30     x = ch - '0';
31     while (ch = getchar(), ch >= '0' && ch <= '9')
32         x = (x << 1) + (x << 3) + ch - '0';
33     return a * x;
34 }
35
36 const int N = 1e5 + 10;
37
38 int n;
39
40 int a[N];
41
42 bool check(int x)
43 {
44     int64 s = a[x];
45     for (int j = 1; j <= n; ++j)
46         if (x != j)
47         {
48             if (s * 2 >= a[j]) s += a[j];
49             else return 0;
50         }
51     return 1;
52 }

## C - Squared Graph

 1 //waz
2 #include <bits/stdc++.h>
3
4 using namespace std;
5
6 #define mp make_pair
7 #define pb push_back
8 #define fi first
9 #define se second
10 #define ALL(x) (x).begin(), (x).end()
11 #define SZ(x) ((int)((x).size()))
12
13 typedef pair<int, int> PII;
14 typedef vector<int> VI;
15 typedef long long int64;
16 typedef unsigned int uint;
17 typedef unsigned long long uint64;
18
19 #define gi(x) ((x) = F())
20 #define gii(x, y) (gi(x), gi(y))
21 #define giii(x, y, z) (gii(x, y), gi(z))
22
23 int F()
24 {
25     char ch;
26     int x, a;
27     while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-');
28     if (ch == '-') ch = getchar(), a = -1;
29     else a = 1;
30     x = ch - '0';
31     while (ch = getchar(), ch >= '0' && ch <= '9')
32         x = (x << 1) + (x << 3) + ch - '0';
33     return a * x;
34 }
35
36 const int N = 1e5 + 10, M = 1e5 + 10;
37
38 int n, m;
39
40 bool flag;
41
42 VI edge[N];
43
44 int co[N];
45
46 int O, P, Q;
47
48 void dfs(int i, int x)
49 {
50     co[i] = x;
51     for (auto j : edge[i])
52     {
53         if (co[j])
54         {
55             if (co[j] != (co[i] ^ 1)) flag = 0;
56         }
57         else
58         {
59             dfs(j, x ^ 1);
60         }
61     }
62 }
63
64 int main()
65 {
66     gii(n, m);
67     for (int i = 1; i <= m; ++i)
68     {
69         int u, v;
70         gii(u, v);
71         edge[u].pb(v);
72         edge[v].pb(u);
73     }
74     for (int i = 1; i <= n; ++i)
75     {
76         if (!co[i])
77         {
78             if (!SZ(edge[i]))
79             {
80                 ++O;
81                 continue;
82             }
83             flag = 1;
84             dfs(i, 2);
85             if (flag) ++Q;
86             else ++P;
87         }
88     }
89     long long ans = 2LL * O * n - 1LL * O * O + 1LL * P * P + 2LL * P * Q + 2LL * Q * Q;
90     printf("%lld\n", ans);
91     return 0;
92 }

## D - Half Reflector

  1 //waz
2 #include <bits/stdc++.h>
3
4 using namespace std;
5
6 #define mp make_pair
7 #define pb push_back
8 #define fi first
9 #define se second
10 #define ALL(x) (x).begin(), (x).end()
11 #define SZ(x) ((int)((x).size()))
12
13 typedef pair<int, int> PII;
14 typedef vector<int> VI;
15 typedef long long int64;
16 typedef unsigned int uint;
17 typedef unsigned long long uint64;
18
19 #define gi(x) ((x) = F())
20 #define gii(x, y) (gi(x), gi(y))
21 #define giii(x, y, z) (gii(x, y), gi(z))
22
23 int F()
24 {
25     char ch;
26     int x, a;
27     while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-');
28     if (ch == '-') ch = getchar(), a = -1;
29     else a = 1;
30     x = ch - '0';
31     while (ch = getchar(), ch >= '0' && ch <= '9')
32         x = (x << 1) + (x << 3) + ch - '0';
33     return a * x;
34 }
35
36 const int N = 2e5 + 10;
37
38 char str[N];
39
40 int n, k;
41
42 int pos(int x, int l)
43 {
44     int p = x + l % n;
45     if (p > n) p -= n;
46     return p;
47 }
48
49 int main()
50 {
51     gii(n, k);
52     scanf("%s", str + 1);
53     for (int i = 1; i <= n; ++i) str[i] -= 'A';
54     if (k <= 2 * n + 10)
55     {
56         int l = 0, t = 0;
57         for (int i = 1; i <= k; ++i)
58         {
59             if (!(str[pos(1, l)] ^ t))
60             {
61                 str[pos(1, l)] ^= 1;
62             }
63             else
64             {
65                 ++l, t ^= 1; str[pos(n, l)] = t;
66             }
67         }
68         for (int i = 1; i <= n; ++i) putchar((str[pos(i, l)] ^ t) + 'A');
69         puts("");
70         return 0;
71     }
72     else
73     {
74         int l = 0, t = 0;
75         for (int i = 1; i <= 2 * n + 10; ++i)
76         {
77             if (!(str[pos(1, l)] ^ t))
78             {
79                 str[pos(1, l)] ^= 1;
80             }
81             else
82             {
83                 ++l, t ^= 1; str[pos(n, l)] = t;
84             }
85         }
86         k -= 2 * n + 10;
87         if (n & 1)
88         {
89             str[pos(1, l)] ^= (k & 1);
90             for (int i = 1; i <= n; ++i) putchar((str[pos(i, l)] ^ t) + 'A');
91             puts("");
92             return 0;
93         }
94         else
95         {
96             for (int i = 1; i <= n; ++i) putchar((str[pos(i, l)] ^ t) + 'A');
97             puts("");
98             return 0;
99         }
100     }
101 }

## E - Increasing Numbers

 1 //waz
2 #include <bits/stdc++.h>
3
4 using namespace std;
5
6 #define mp make_pair
7 #define pb push_back
8 #define fi first
9 #define se second
10 #define ALL(x) (x).begin(), (x).end()
11 #define SZ(x) ((int)((x).size()))
12
13 typedef pair<int, int> PII;
14 typedef vector<int> VI;
15 typedef long long int64;
16 typedef unsigned int uint;
17 typedef unsigned long long uint64;
18
19 #define gi(x) ((x) = F())
20 #define gii(x, y) (gi(x), gi(y))
21 #define giii(x, y, z) (gii(x, y), gi(z))
22
23 int F()
24 {
25     char ch;
26     int x, a;
27     while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-');
28     if (ch == '-') ch = getchar(), a = -1;
29     else a = 1;
30     x = ch - '0';
31     while (ch = getchar(), ch >= '0' && ch <= '9')
32         x = (x << 1) + (x << 3) + ch - '0';
33     return a * x;
34 }
35
36 int n;
37
38 char s[500010];
39
40 int x[500010];
41
42 int sum;
43
44 int main()
45 {
46     scanf("%s", s + 1);
47     n = strlen(s + 1);
48     reverse(s + 1, s + n + 1);
49     for (int i = 1; i <= n; ++i) x[i] = (s[i] - 48) * 9;
50     for (int i = 1; i <= n; ++i) x[i + 1] += x[i] / 10, x[i] %= 10;
51     if (x[n + 1]) ++n;
52     for (int i = 1; i <= n; ++i) sum += x[i];
53     for (int k = 1; k <= 2 * n; ++k)
54     {
55         int v = 9, j = 1;
56         while (v)
57         {
58             sum -= x[j];
59             x[j] += v;
60             v = x[j] / 10;
61             x[j] %= 10;
62             sum += x[j];
63             if (j > n) ++n;
64             ++j;
65         }
66         if (sum <= 9 * k)
67         {
68             printf("%d\n", k);
69             return 0;
70         }
71     }
72     return 0;
73 }

## F - Train Service Planning

posted @ 2018-09-18 22:01  AnzheWang  阅读(149)  评论(0编辑  收藏  举报