A. Tritonic Iridescence http://codeforces.com/contest/957/problem/A
题解: 分类讨论注意题目要求, 至少有两种方案
- #pragma warning(disable:4996)
- #include<cstdio>
- #include<string>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- int n, m;
- string s;
- int main()
- {
- while (cin>> n) {
- cin>> s;
- int cnt = 0;
- for (int i = 0; i <n; i++) if (s[i] == ?) cnt++;
- if (!cnt) printf("No\n");
- else {
- bool flag1 = false;
- bool flag2 = true;
- for (int i = 1; i < n; i++) {
- if (s[i] == s[i - 1] && s[i] == ?) flag1 = true;
- if (s[i] == s[i - 1] && s[i] != ?) flag2 = false;
- }
- if (!flag2) printf("No\n");
- else {
- if (flag1) printf("Yes\n");
- else {
- bool flag3 = false;
- for (int i = 1; i < n - 1; i++) {
- if (s[i] == ?) {
- if (s[i - 1] == s[i + 1]) flag3 = true;
- }
- }
- if (s[0] == ? || s[n - 1] == ?) flag3 = true;
- if (!flag3) printf("No\n");
- else printf("Yes\n");
- }
- }
- }
- }
- return 0;
- }
- B. Mystical Mosaic http://codeforces.com/contest/957/problem/B
题解: 对于同一列的 "#" 所在行应该是对称的
- #pragma warning(disable:4996)
- #include<map>
- #include<vector>
- #include<stack>
- #include<queue>
- #include<cstdio>
- #include<string>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- const int maxn = 60;
- int n, m;
- int mp[maxn][maxn];
- int main()
- {
- scanf("%d%d", &n, &m);
- getchar();
- for (int i = 1; i <= n; i++) {
- for (int j = 1; j <= m; j++)
- mp[i][j] = (getchar() == #);
- getchar();
- }
- for (int i = 1; i <= n; i++) {
- for (int j = i + 1; j <= n; j++) {
- bool flag1 = true, flag2 = true;
- for (int k = 1; k <= m; k++) {
- if (mp[i][k] != mp[j][k]) flag1 = false;
- if (mp[i][k] && mp[j][k]) flag2 = false;
- }
- if (!flag1 && !flag2) { puts("No"); return 0; }
- }
- }
- puts("Yes"); return 0;
- }
- C. Three-level Laser http://codeforces.com/contest/957/problem/C
题解: 分析式子, 当 Ej 选定后, i=j-1, 所以只需要考虑 Ek , 显然 k 的位置离 j 越远答案越优
注意: 精度
- #pragma warning(disable:4996)
- #include<map>
- #include<queue>
- #include<string>
- #include<vector>
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- typedef long long ll;
- const int maxn = 1e5 + 5;
- int n, U;
- int a[maxn];
- int main()
- {
- while (scanf("%d%d", &n, &U) != EOF) {
- for (int i = 1; i <= n; i++) scanf("%d", a + i);
- double ans = 0;
- for (int i = 2; i < n; i++) {
- int p = lower_bound(a + 1, a + n + 1, a[i - 1] + U) - (a);
- if (a[p] != a[i - 1] + U) p--;
- if (p == i) continue;
- double tp = 1.0*(a[p] - a[i]) / (a[p] - a[i - 1]);
- ans = max(ans, tp);
- }
- if (!ans) printf("-1\n");
- else printf("%.12lf\n", ans);
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2545893.html