Codeforces Round #246 (Div. 2)(C)数学,思维
来源:互联网 发布:足球分析软件下载 编辑:程序博客网 时间:2024/06/08 14:54
题意:给你(1---n),n个数字。要求你将数字排序为升序,数字交换swap(a[i],a[j]):满足数组下标(j-i+1)必须是素数才能进行交换,而且总交换次数不能超过5*n次
题解:看了这一题就剩下一个大大的懵逼。。。。。。。,这里只要这样处理:我们先记录所有的数字的下标,每次我们从最小的数字开始排序,如果当前的数字不在排序位,那么我们把他交换到最接近的排序位的地方,至于5*n次,不知道怎么去证明,官方题解说:
It could be proved that such algorithm makes less than 4n swaps (for example, by implementing the algorithm)
可以证明出不会超过4*n次
素数直接上晒素数模板就可以了
#include <set> #include <map> #include <list> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <string> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <algorithm> #include <utility>#define LL long long using namespace std; #define N 100005 #define inf 0x3f3f3f3fint a[N];bool prime[N+5]; int pos[N];void prime_table() { int m = sqrt(N + 0.5); memset(prime, false, sizeof(prime)); for (int i = 2; i <= m; i++) { if (!prime[i]) { for (int j = i*i; j <= N; j += i) { prime[j] = true; } } } prime[1]=true;}vector<pair<int,int>>result;int main() { #ifdef CDZSC freopen("i.txt","r",stdin); #endif prime_table();int n;while(~scanf("%d",&n)){result.clear();for(int i=1;i<=n;i++){scanf("%d",&a[i]);pos[a[i]]=i;}for(int i=1;i<=n;i++){int now=pos[i];while(now>i){int tmp=i;while(prime[now- tmp+1])tmp++;result.push_back(make_pair(tmp,now));pos[a[now]]=tmp;pos[a[tmp]]=now;swap(a[now],a[tmp]);now=tmp;}}printf("%d\n",result.size());for(int i=0;i<result.size();i++){printf("%d %d\n",result[i].first,result[i].second);}}return 0;}
0 0
- Codeforces Round #246 (Div. 2)(C)数学,思维
- Codeforces Round #370 (Div. 2)C. Memory and De-Evolution(数学,思维))
- Codeforces Round #353 (Div. 2) C 思维
- Codeforces Round #261 (Div. 2)C题(思维题)
- Codeforces Round #345 (Div. 2)(C)排列组合,思维
- Codeforces Round #273 (Div. 2)(C)贪心,思维
- Codeforces Round #202 (Div. 2)C. Mafia(思维)
- Codeforces Round #381 (Div. 2)C(构造,思维)
- Codeforces Round #386 (Div. 2)C. Tram(模拟+思维)
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] C 数学
- Codeforces Round #384 (Div. 2)(数学)
- Codeforces Round #246 (Div. 2)(B)数学
- Codeforces Round #400 (Div. 1 + Div. 2, combined) C:Molly's Chemicals(前缀+思维)
- Codeforces Beta Round #32 (Div. 2) C (math+思维)
- Codeforces Round #386(Div. 2)C. Tram【思维】
- Codeforces Round #392(Div. 2) C Unfair Poll【思维+暴力】
- Codeforces Round #398(Div. 2)C. Garland【Dfs+思维】
- Codeforces Round #401(Div. 2)C. Alyona and Spreadsheet【思维】
- 关于Elasticsearch单个索引文档最大数量问题
- UML 类图 StarUML---推荐一款UML工具(很好很强大)
- 认识JVM
- 自定义的3D球型标签(3dTagCloudAndroid)
- 【Android】安卓学习笔记之在Activity中使用Menu菜单
- Codeforces Round #246 (Div. 2)(C)数学,思维
- POJ 2796 Feel Good 单调
- 响应式布局解决方案之Media Query
- java ImageIO处理图像的封装工具类
- cocos creator的下载与安装
- ubuntu下安装nginx
- Scala - Type parameterization
- 使用jQuery和CSS3制作数字时钟(CSS3篇)
- CSS实现单行、多行文本溢出显示省略号(…)