2017 ACM-ICPC World Finals - Rapid City

希望一年更比一年水

Secret Chamber at Mount Rushmore

签到题,搞出可达矩阵就可以了

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int d[26][26];
 4 
 5 int main() {
 6     int m, n;
 7     scanf("%d %d", &m, &n);
 8     for(int i = 0; i < 26; ++i) d[i][i] = 1;
 9     for(int i = 1; i <= m; ++i) {
10         char a[11], b[11];
11         scanf("%s %s", a, b);
12         d[(a[0] - 'a')][(b[0] - 'a')] = 1;
13     }
14     for(int i = 0; i < 26; ++i)
15         for(int j = 0; j < 26; ++j)
16             for(int k = 0; k < 26; ++k)
17                 d[j][k] |= d[j][i] & d[i][k];
18     for(int i = 1; i <= n; ++i) {
19         char a[111], b[111];
20         scanf("%s %s", a, b);
21         int len1 = strlen(a), len2 = strlen(b), ok = 1;
22         if(len1 != len2) ok = 0;
23         else for(int j = 0; j < len1; ++j) {
24             if(!d[a[j] - 'a'][b[j] - 'a']) {
25                 ok = 0; break;
26             }
27         }
28         puts(ok ? "yes" : "no");
29     }
30     return 0;
31 }
Aguin

Need for Speed

又一签到题,二分答案判断总时间是否相等,注意速度不能变负

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const double eps = 1e-8;
 4 int d[1111], s[1111];
 5 
 6 int main() {
 7     int n, t;
 8     double l = -1e18, r = 1e18;
 9     scanf("%d %d", &n, &t);
10     for(int i = 1; i <= n; ++i) {
11         scanf("%d %d", d + i, s + i);
12         l = max(l, -1.0 * s[i]);
13     }
14     while(r - l > eps) {
15         double m = (l + r) / 2;
16         double sumt = 0;
17         for(int i = 1; i <= n; ++i)
18             sumt += d[i] / (s[i] + m);
19         if(sumt > t) l = m;
20         else r = m;
21     }
22     printf("%.8f\n", l);
23     return 0;
24 }
Aguin

Posterize

好像比较正常是一个n3的dp但是我失去理智n4就过了

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int r[266], p[266], id[266];
 5 ll f[266][266], g[266][266];
 6 const ll inf = 1e18;
 7 
 8 bool cmp(int i, int j) {
 9     return r[i] < r[j];
10 }
11 
12 int main() {
13     int d, k;
14     scanf("%d %d", &d, &k);
15     for(int i = 1; i <= d; ++i) {
16         scanf("%d %d", r + i, p + i);
17         id[i] = i;
18     }
19     sort(id + 1, id + 1 + d, cmp);
20     for(int i = 0; i < 266; ++i)
21         for(int j = 0; j < 266; ++j)
22                 f[i][j] = inf;
23     f[0][0] = 0;
24     for(int i = 0; i <= 255; ++i) {
25         memcpy(g, f, sizeof(g));
26         for(int j = 0; j <= d; ++j) {
27             for(int l = 0; l < k; ++l) {
28                 if(g[j][l] == inf) continue;
29                 ll sum = 0;
30                 for(int q = 1; j + q <= d; ++q) {
31                     int x = id[j + q];
32                     sum += 1ll * p[x] * (r[x] - i) * (r[x] - i);
33                     f[j + q][l + 1] = min(f[j + q][l + 1], g[j][l] + sum);
34                 }
35             }
36         }
37     }
38     printf("%lld", f[d][k]);
39     return 0;
40 }
Aguin

猜你喜欢

转载自www.cnblogs.com/Aguin/p/10574552.html