希望一年更比一年水
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 }
又一签到题,二分答案判断总时间是否相等,注意速度不能变负
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 }
好像比较正常是一个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 }