Codeforces Round #401 (Div. 2)

来源:互联网 发布:玻璃厂加工中心编程 编辑:程序博客网 时间:2024/06/05 02:32

A

可以發現是有周期的, 第一次操作無論如何都是進行左中操作, 第二次也是無論如何都是進行中右操作

所以枚舉地點位置即可.

#include <cstdio>#include <cstring>#include <cmath>#include <cctype>#include <iostream>#include <algorithm>#include <queue>#include <stack>#include <string>#include <vector>#include <set>#include <map>#include <utility>using namespace std;typedef long long ll;const int qq = 1e5 + 10;#define pill pair<int, int>int n, m;int k;int p1[] = {0, 1, 2, 2, 1, 0};int p2[] = {1, 0, 0, 1, 2, 2};int p3[] = {2, 2, 1, 0, 0, 1};int main(){scanf("%d", &n);scanf("%d", &k);n = n % 6;if(p1[n] == k)printf("0\n");if(p2[n] == k)printf("1\n");if(p3[n] == k)printf("2\n");return 0;}

B

兩種策略不一樣.

第一種要求輸的最少次數

第二種要求贏的最多次數

那麼很顯然, 第一種是要盡可能保存自己手中的較大的數去比對方的小數

第二種是盡可能的要贏, 那麼就要用盡可能小的數去贏

#include <cstdio>#include <cstring>#include <cmath>#include <cctype>#include <iostream>#include <algorithm>#include <queue>#include <stack>#include <string>#include <vector>#include <set>#include <map>#include <utility>using namespace std;typedef long long ll;const int qq = 1e3 + 10;#define pill pair<int, int>int n, m;int x[15], y[15];char st[qq];int main(){scanf("%d", &n);scanf("%s", st);for(int i = 0; i < (int)strlen(st); ++i)x[st[i] - '0']++;scanf("%s", st);for(int i = 0; i < (int)strlen(st); ++i)y[st[i] - '0']++;int maxn = 0;int p = 0;for(int i = 9; i >= 0; --i){if(y[i] < x[i]){maxn += y[i];int c = x[i] - y[i];if(c > p)maxn += p, p = 0;elsemaxn += c, p -= c;}elsemaxn += x[i], p += y[i] - x[i];//printf("%d %d\n", maxn, p);}maxn = n - maxn;int minx = 0;p = 0;//printf("%d\n", p);for(int i = 1; i <= 9; ++i){if(y[i] > x[i - 1]){minx += x[i - 1];int c = y[i] - x[i - 1];if(p > c)minx += c, p -= c;elseminx += p, p = 0;}elseminx += y[i], p += x[i - 1] - y[i];//printf("%d %d\n", minx, p);}printf("%d\n%d\n", maxn, minx);return 0;}

C

這題比賽的時候沒想出來...

每次都能想到邊上去, 就是走不到正解的道路上

dp[i] 代表以i爲起點最長非遞減序列長度,

那麼dp[a] >= x - y + 1就是Yes, 否則就是No

#include <cstdio>#include <cstring>#include <cmath>#include <cctype>#include <iostream>#include <algorithm>#include <queue>#include <stack>#include <string>#include <vector>#include <set>#include <map>#include <utility>using namespace std;typedef long long ll;typedef pair<int, int> pill;const int qq = 1e5 + 10;int n, m;int dp[qq];vector<int> vt[qq];int main(){memset(dp, 0, sizeof(dp));scanf("%d%d", &n, &m);int x;for(int i = 0; i < n; ++i)for(int j = 0; j < m; ++j){scanf("%d", &x);vt[i].push_back(x);}for(int j = 0; j < m; ++j){int pre = vt[0][j];int cnt = 1;int start = 0;for(int i = 1; i < n; ++i){if(vt[i][j] >= pre){cnt++, pre = vt[i][j];}else{dp[start] = max(dp[start], cnt);pre = vt[i][j];start = i;cnt = 1;}}dp[start] = max(dp[start], cnt);}for(int i = 1; i < n; ++i)dp[i] = max(dp[i], dp[i - 1] - 1);int q;scanf("%d", &q);while(q--){int x, y;scanf("%d%d", &x, &y);x--, y--;if(dp[x] >= y - x + 1){puts("Yes");}else{puts("No");}}return 0;}


0 0
原创粉丝点击