博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #246 (Div. 2)
阅读量:5280 次
发布时间:2019-06-14

本文共 3114 字,大约阅读时间需要 10 分钟。

题目链接:

A:直接找满足的人数,然后整除3就是答案

B:开一个vis数组记录每一个衣服的主场和客场出现次数。然后输出的时候主场数量加上反复的,客场数量减掉反复的

C:原来是YY乱搞的。原来是哥德巴赫猜想,一个合数能够表示为3个质数相加,然后就先打个素数表,然后从最小的数字一个个模拟往前放就可以。放的时候走的步数直接拆成都是质数就可以

D:KMP算法,利用next数组性质求前缀和后缀匹配,然后在利用累加求和求出每一个串相应的出现次数

代码:

A:

#include 
#include
#include
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 
#include
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 
#include
#include
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 
#include
#define INF 0x3f3f3f3fconst 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/blfshiye/p/5121898.html

你可能感兴趣的文章
python正则表达式
查看>>
OGR – Merging Multiple SHP files
查看>>
创业公司该不该被收购?(转)
查看>>
sqlserver 行转列、列转行[转]
查看>>
【IScroll深入学习】解决IScroll疑难杂症
查看>>
python 数据类型
查看>>
108-PHP类成员protected和private成员属性不能被查看数值
查看>>
ajax post data 获取不到数据,注意contentType
查看>>
css控制height充满浏览器视口
查看>>
Linux 系统目录结构
查看>>
servlet中 getRealPath deprecated(被废弃)
查看>>
招聘,项目管理相关
查看>>
UIScreen的scale属性
查看>>
Oracle Scheduler - Postponed job
查看>>
Arduino编程器 USBasp USBtinyISP FT232-ISP 对比 区别
查看>>
高频焊台源码,改进版V2
查看>>
宝塔面板安装的mysql5.5用命令行kill -9后启动不了
查看>>
Android(java)学习笔记118:BroadcastReceiver之 外拨电话的广播接收者
查看>>
Android(java)学习笔记165:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)...
查看>>
Eclipse导入工程遇到的一些问题之中文乱码
查看>>