Codeforces Round #246 (Div. 2)
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #246 (Div. 2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主題鏈接:Codeforces Round #246 (Div. 2)
A:直接找滿足的人數。然后整除3就是答案
B:開一個vis數組記錄每一個衣服的主場和客場出現次數,然后輸出的時候主場數量加上反復的。客場數量減掉反復的
C:原來是YY亂搞的。原來是哥德巴赫猜想,一個合數能夠表示為3個質數相加,然后就先打個素數表,然后從最小的數字一個個模擬往前放就可以,放的時候走的步數直接拆成都是質數就可以
D:KMP算法。利用next數組性質求前綴和后綴匹配,然后在利用累加求和求出每一個串相應的出現次數
代碼:
A:
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std;int n, k, num, i;int main() {scanf("%d%d", &n, &k);int ans = 0;for (i = 0; i < n; i++) {scanf("%d", &num);if (5 - num >= k) ans++;}printf("%d\n", ans / 3);return 0; }B: #include <stdio.h> #include <string.h>const int N = 100005; int vis[N][2]; int n, x[N], y[N], i;int main() {scanf("%d", &n);for (i = 0; i < n; i++) {scanf("%d%d", &x[i], &y[i]);vis[x[i]][0]++;vis[y[i]][1]++;}for (i = 0; i < n; i++) {printf("%d %d\n", (n - 1) + vis[y[i]][0], (n - 1) - vis[y[i]][0]);}return 0; }
C: #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int N = 100005;int pri[N], ans[5 * N][2], ansn = 0;void init() {int vis[N];memset(vis, 0, sizeof(vis));for (int i = 2; i < N; i++) {if (vis[i]) continue;pri[i] = 1;for (int j = i; j < N; j += i)vis[j] = 1;} }int n, num[N], v[N], i, snum[N];void swap(int &a, int &b) {a ^= b;b ^= a;a ^= b; }int main() {init();scanf("%d", &n);for (i = 0; i < n; i++) {scanf("%d", &num[i]);snum[i] = num[i];v[num[i]] = i;}sort(snum, snum + n);i = 0;while (i < n) {while (v[snum[i]] != i) {for (int j = i; ;j++) {if (pri[v[snum[i]] - j + 1]) {ans[ansn][0] = j + 1;ans[ansn][1] = v[snum[i]] + 1;ansn++;int t = v[snum[i]];v[snum[i]] = j;v[num[j]] = t;swap(num[j], num[t]);break;}}}i++;}printf("%d\n", ansn);for (i = 0; i < ansn; i++)printf("%d %d\n", ans[i][0], ans[i][1]);return 0; }
D: #include <stdio.h> #include <string.h> #define INF 0x3f3f3f3f const int N = 100005;char s[N]; int next[N], n, ans[N], ansn = 0;void get_next(char *seq, int m) {next[1] = 0;int j = next[1];for (int i = 2; i <= m; i++) {while (j && seq[i] != seq[j + 1]) j = next[j];if (seq[i] == seq[j + 1]) j++;next[i] = j;} }int vis[N];int main() {int i = 0;scanf("%s", s + 1);n = strlen(s + 1);get_next(s, n);int t = next[n];while (t) {ans[ansn++] = t;t = next[t];}for (i = n; i > 0; i--)vis[next[i]]++;for (i = n; i > 0; i--)vis[next[i]] += vis[i];printf("%d\n", ansn + 1);for (i = ansn - 1; i >= 0; i--)printf("%d %d\n", ans[i], vis[ans[i]] + 1);printf("%d %d\n", n, vis[n] + 1);return 0; }
版權聲明:本文博客原創文章。博客,未經同意,不得轉載。
轉載于:https://www.cnblogs.com/hrhguanli/p/4753997.html
總結
以上是生活随笔為你收集整理的Codeforces Round #246 (Div. 2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一语中的
- 下一篇: 一个web项目在myeclipse中ad