C题就是一个简单的模拟,首先给每个人两个。

然后把剩下的都给一个人就好了。

给的时候蛇形给。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
#define LL __int64
#define maxn 330000
int main()
{int n,m,k;while(~scanf("%d%d%d",&n,&m,&k)){int leap=1;int stx=1;int sty=1;int ms=n*m-(k*2)+2;printf("%d",ms);while(ms--){printf(" %d %d",stx,sty);sty+=leap;if(sty<1||sty>m){if(sty<1)sty=1;if(sty>m)sty=m;stx++;leap=-leap;}}cout<<endl;k--;while(k--){printf("%d ",2);printf("%d %d ",stx,sty);sty+=leap;if(sty<1||sty>m){if(sty<1)sty=1;if(sty>m)sty=m;stx++;leap=-leap;}printf("%d %d\n",stx,sty);sty+=leap;if(sty<1||sty>m){if(sty<1)sty=1;if(sty>m)sty=m;stx++;leap=-leap;}}}return 0;
}

D:首先依据环,把每个环分成一组。

记录下此时至少须要交换all次。才干回归到恒等排列。

1,假设all大于p。那么我们就应该把all降低。

对于一个环,随意两个点交换都能够把环分成两份。all-1。

对于每次降低,我们寻找环的最小值最小的环,然后在这个环中寻找最小值,然后交换这两个点。

2,假设all小于p。

那么我们应该把all增大。

那么我们就能够把1号节点和随意节点交换。来达到增大all的目的。

注意,1号节点不和本身的环交换。

而且1号节点和随意一个环仅仅交换一次。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
#define LL __int64
#define maxn 3300
int a[maxn];
int b[maxn];
int vis[maxn];
vector<int>vec;
vector< vector<int> >ans;
struct list
{int x,y;
} node;
vector<list>pr;
bool cmp(vector<int>a,vector<int>b)
{return a[0]<b[0];
}
struct listt
{int x;int index;int l,r;friend bool operator <(const listt &a,const listt &b){return a.x>b.x;}
}tt;
priority_queue<listt>que;
int main()
{int n,m;while(~scanf("%d",&n)){for(int i=1; i<=n; i++){scanf("%d",&a[i]);b[i]=a[i];}scanf("%d",&m);memset(vis,0,sizeof(vis));vec.clear();ans.clear();int all=0;for(int i=1; i<=n; i++){if(vis[i])continue;int j=i;vec.clear();while(b[j]!=j&&vis[j]==0){vec.push_back(j);vis[j]=1;j=b[j];}if(vec.size()){// sort(vec.begin(),vec.end());ans.push_back(vec);all+=vec.size()-1;}}sort(ans.begin(),ans.end(),cmp);pr.clear();if(all<=m){all=m-all;if(ans.size()==0){node.x=1;for(int i=2; i<=all+1; i++){node.y=i;pr.push_back(node);}}else{node.x=1;int j=0;if(ans[0][0]==1)j++;for(int i=2; i<=n&&all>0; i++){if(b[i]==i){all--;node.y=i;pr.push_back(node);}if(ans.size()>j&&ans[j][0]==i){all--;node.y=i;j++;pr.push_back(node);}}}}else{int qian=all;all=all-m;int i=0;while(!que.empty())que.pop();for(i=0;i<ans.size();i++){tt.index=i;tt.x=ans[i][0];que.push(tt);}while(all){tt=que.top();que.pop();i=tt.index;node.x=ans[i][0];int minn=9999;int st=0;for(int j=1;j<ans[i].size()&&all>0;j++){if(minn>ans[i][j]){minn=ans[i][j];st=j;}}node.y=minn;all--;pr.push_back(node);vec.clear();minn=9999;vec.push_back(ans[i][st]);for(int j=1;j<st;j++){vec.push_back(ans[i][j]);}if(vec.size()>1){ans.push_back(vec);tt.index=ans.size()-1;tt.x=vec[0];que.push(tt);}vec.clear();vec.push_back(ans[i][0]);for(int j=st+1;j<ans[i].size();j++){vec.push_back(ans[i][j]);}if(vec.size()>1){ans[i]=vec;tt.index=i;tt.x=vec[0];que.push(tt);}i++;}}cout<<pr.size()<<endl;for(int i=0; i<pr.size(); i++){printf("%d %d\n",pr[i].x,pr[i].y);}}return 0;
}

转载于:https://www.cnblogs.com/xfgnongmin/p/10862000.html

Codeforces Round #252 (Div. 2)-C,D相关推荐

  1. # Codeforces Round #548 (Div. 2)C Edgy Trees

    Codeforces Round #548 (Div. 2)C Edgy Trees 题目传送门 You are given a tree (a connected undirected graph ...

  2. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  3. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  4. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  5. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  6. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  7. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  8. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  9. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

最新文章

  1. dedecms 漏洞_代码审计之二次漏洞审计
  2. coker php debug_docker中php xdebug调试开发
  3. Linux Lernel Panic 报错解决思路
  4. 边缘计算架构_边缘计算架构梳理
  5. Docker镜像加速,设置国内源
  6. idea撤销与恢复快捷键_IntelliJ IDEA 重做快捷键和配置哲学
  7. 不重启docker容器修改 容器中的时区
  8. 通过SQL直接插入、修改ArcGIS SDE空间表中的数据
  9. import package怎么用
  10. 我在用的多功能电子书阅读器
  11. 1000个脑筋急转弯
  12. hdu 4747 Pet
  13. outlook客户端 outlook.com邮箱设置方法
  14. [rock]Life ’s A Struggle -宋岳庭(转)
  15. 王 第潜艇三天 引用类型 继承
  16. aiml的中文适配aiml_cn
  17. ffmpeg编译gb28181_RTSP/GB28181协议/海康SDK/Ehome协议视频上云网关EasyCVR视频平台在linux环境下ffmpeg源码单步调试环境搭建...
  18. oralce的时间戳数据同步到hive报脏数据错误
  19. 头脑风暴生成中,思维导图Xmind ZEN 2020震撼出场!
  20. RuntimeError: cuda runtime error (11) : invalid argument at /pytorch/aten/src/THC/THCGeneral.cpp

热门文章

  1. 17.代理_CDN_网络安全
  2. easyui datebox时间控件改为年月视图,值也为年月
  3. 全球wcdma运营频段
  4. PHP_基础学习(10)
  5. sql数据库连接:用户‘sa’登录失败问题破解(百度加个人总结)
  6. CSS非布局样式和重点内容
  7. 港科夜闻|香港科大人文社会科学学院阎连科教授获得英国皇家文学学会首颁国际作家终身荣誉奖...
  8. ITIM WinLocal Agent部署自动化脚本
  9. 织梦模板文章的图片路径问题
  10. 牛客网 2018年全国多校算法寒假训练营练习比赛(第二场) H.了断局-递推