c——贪心构造题

/*
1 [n/2+1,n]
2 [n/2+2,n]
...
n/2 [n,n]
n/2+1 [1,1]
n/2+2 [1,2]
...
n [1,n/2]
ai要换到位置ai上,用1,n作为跳板
从2开始,把值为i的移动到位置i上 */
#include<bits/stdc++.h>
using namespace std; #define maxn 500005 int n,a[maxn],pos[maxn];
vector<pair<int,int> >ans; void change(int pos1,int pos2){//交换两个位置
ans.push_back(make_pair(pos1,pos2));
swap(pos[a[pos1]],pos[a[pos2]]);
swap(a[pos1],a[pos2]);
}
void calc(int pos1,int pos2){
if(pos1>pos2)swap(pos1,pos2); if(abs(pos1-pos2)>=n/)
change(pos1,pos2);
else {
if(pos1<=n/ && pos2<=n/){
change(pos1,n);
change(n,pos2);
change(pos1,n);
}
else if(pos1>n/ && pos2>n/){
change(pos1,);
change(,pos2);
change(pos1,);
}
else {
change(,pos2);
change(pos1,n);
change(,n);
change(,pos2);
change(pos1,n);
}
}
} int main(){
cin>>n;
for(int i=;i<=n;i++)
cin>>a[i],pos[a[i]]=i;
if(pos[]!=)
calc(pos[],);
if(pos[n]!=n)
calc(pos[n],n); for(int i=;i<=n-;i++){
if(pos[i]==i)continue;
else calc(pos[i],i);
}
if(a[]!=)
ans.push_back(make_pair(,n)); cout<<ans.size()<<'\n';
for(int i=;i<ans.size();i++)
cout<<ans[i].first<<" "<<ans[i].second<<'\n';
}

D——贪心+排序

#include<bits/stdc++.h>
using namespace std;
struct Node{int a,b,id;}p[];
int cmp1(Node a,Node b){return a.b>b.b;}
int cmp2(Node a,Node b){return a.b<b.b;}
int n;
int main(){
cin>>n;
for(int i=;i<=n;i++)
cin>>p[i].a>>p[i].b,p[i].id=i; sort(p+,p++n,cmp1);
vector<int> v;
int la=-;
for(int i=;i<=n;i++){
if(p[i].a>=la&&la!=- || p[i].a>=p[i].b)continue;
la=p[i].b;
v.push_back(p[i].id);
} sort(p+,p++n,cmp2);
vector<int>vv;
la=-;
for(int i=;i<=n;i++){
if(p[i].a<=la&&la!=- || p[i].a<=p[i].b)continue;
la=p[i].b;
vv.push_back(p[i].id);
} if(v.size()<vv.size())
swap(v,vv);
cout<<v.size()<<'\n';
for(int i=;i<v.size();i++)
cout<<v[i]<<" ";
}

E——推不等式+构造+双指针

/*
分别排序后用双指针分别指向需要向右拉的,需要向左拉的
有解的两个条件:
1.和相等
2.差的前缀必须<=0,因为a[i]-b[i]的前缀和如果>0,由于前面的只能往右拉,所以无解
同时:a[i]<=a[j],b[i]<=b[j],并且 a[i]<=b[i],a[j]>=b[j],
(b[i]-a[i])+(a[j]-b[j])<=a[j]-a[i]
min(b[i]-a[i],a[j]-b[j])<=(a[j]-a[i])/2
所以双指针移动的贪心正确
*/
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define maxn 500005
#define ll long long
ll n;
struct Node{
ll id,x;
}a[maxn],b[maxn];
ll dif[maxn],suma,sumb;
vector<ll>ans[];
int cmp(Node a,Node b){return a.x<b.x;} int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i].x,suma+=a[i].x,a[i].id=i;
for(int i=;i<=n;i++)cin>>b[i].x,sumb+=b[i].x;
if(suma!=sumb){puts("NO");return ;}
sort(a+,a++n,cmp);sort(b+,b++n,cmp);//从小到大排序,可以保证最左边的a[i]一定是被向右拉的 ll tmp=;
for(int i=;i<=n;i++){
dif[i]=a[i].x-b[i].x;
tmp+=dif[i];
if(tmp>){puts("NO");return ;}
} for(int i=,j=;i<=n;i++){
while(dif[i]<){
while(dif[j]<=)//找到第一个可以向左拉的
j++;
int d=min(-dif[i],dif[j]);//用较小的差去拉近
ans[].push_back(a[i].id);
ans[].push_back(a[j].id);
ans[].push_back(d);
dif[i]+=d;dif[j]-=d;
}
}
puts("YES");
cout<<ans[].size()<<'\n';
for(int i=;i<ans[].size();i++)
cout<<ans[][i]<<" "<<ans[][i]<<" "<<ans[][i]<<'\n';
}

F——待补

全球轮3——cf1148的更多相关文章

  1. 通过 PowerShell 支持 Azure Traffic Manager 外部端点和权重轮询机制

    Jonathan TulianiAzure网络 - DNS和 Traffic Manager高级项目经理 在北美 TechEd 大会上,我们宣布了 Azure Traffic Manager将支持 ...

  2. digitalocean完成B轮8300万美元融资,赠送10美元优惠码

    7月8日,美国vps服务商digitalocean在官方博客宣传,公司完成高达8300万美元B轮融资.融资方包括 IA Ventures, Andreessen Horowitz和Access Ind ...

  3. 全球分布式数据库:Google Spanner(论文翻译)

    本文由厦门大学计算机系教师林子雨翻译,翻译质量很高,本人只对极少数翻译得不太恰当的地方进行了修改. [摘要]:Spanner 是谷歌公司研发的.可扩展的.多版本.全球分布式.同步复制数据库.它是第一个 ...

  4. 小程序实现非swiper组件的自定义伪3D轮播图

    效果如下: 我用了很笨的方法实现的,大致就是: 1.当前点击的div(view)如果前后都有内容,那么,当前div(view)就设置到中间,前一个就设置到左边,前一个的前面所有全部设置到最左边,后面一 ...

  5. JQ无缝轮播图-插件封装

    类似京东的这种无缝轮播效果: 实例代码下载 HTML代码: <body> <!-- /*觅me 探索生活*/ --> <div class="test" ...

  6. 36氪首发 | 「myShape」完成千万级人民币 Pre-A轮融资,推出 AI 智能健身私教

    无需任何可穿戴设备. 36氪获悉,myShape(原Shapejoy)已于近期完成千万级人民币的Pre-A轮融资,由天奇阿米巴领投,远洋集团.七熹资本以及老股东跟投.过去 myShape 曾获得元迅资 ...

  7. 健康领域今年开始井喷了,养老地产和私人医生这两个领域目测成为下一轮BAT在健康领域布局的竞争方向

    医疗行业做了六年多的时间,今年到了井喷的阶段,腾讯先是入股了丁香园,然后又一亿美金融资挂号网,春雨医生获得5000万美元的C轮融资,这是要上市的节奏.. 从互联网战略上,健康网和医疗网都是做资料刚开始 ...

  8. 我买网B轮融资成功,五周年豪掷千万回馈会员

        对中粮我买网而言,近期的B轮融资应该算是最大的好消息了------8月1日,中粮我买网在京宣布完毕B轮融资.金额高达1亿美元.被称为"食品电商史上最大融资".据悉,本次融资 ...

  9. 全球IT管理最佳实践之DevOps Master 认证

    原文:http://soft.chinabyte.com/30/13940030.shtml 作者:国际最佳实践管理联盟 孙振鹏 关键字: DevOps.DevOps认证.DevOpsDays.Dev ...

随机推荐

  1. layui 封装自定义模块

    转自:https://lianghongbo.cn/blog/430585105a35948c layui是国人开发的一款非常简洁的UI框架,使用了模块化加载方式,因此在使用过程中我们难免需要添加自己 ...

  2. redis 分析rdb中key

    1.问题: 单位一个redis集群内存报警,想找出所有的key的列表? 2.解决办法: 网上搜索是可以用redis-rdb-tools 这个工具进行分析 (1)centos6 默认安装python2. ...

  3. PCA分析,及c++代码实现

    本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fengbingchun/article/details/79235028 主成分分析(Principal Co ...

  4. selenium 操作键盘事件

    一.key包提供按键方法 使用必须先引用key包:from selenium.webdriver.common.keys import Keys 键盘事件,在现实操作中我们习惯性的按tab见切换到写一 ...

  5. vue v-for 组件传值 enter传值

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 经典单调栈最大子矩形——牛客多校第二场H

    题目是求次大子矩形,那么在求最大子矩形的时候维护M1,M2即可 转移M2时比较的过程要注意一下 #include<bits/stdc++.h> using namespace std; # ...

  7. HDU6331Problem M. Walking Plan

    传送门 分块floyd $f[i][j][k]$表示从i走k步到j的最短路 $g[i][j][k]$表示从i走k*100步到j的最短路 $h[i][j][k]$表示从i至少走k步到j的最短路 询问从x ...

  8. NX二次开发-UFUN关闭STL文件函数UF_STD_close_stl_file

    NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...

  9. 判断PC端浏览器类型

    if (browserInfo.type !== 'IE' || (browserInfo.type == 'IE' && Number(browserInfo.version) &g ...

  10. hdu多校第六场1012 (hdu6645) Stay Real 假博弈,真贪心

    题意: 给你一个小根堆,从根开始拿,拿走子节点被拿完后才可以拿走父节点,两个人依次拿,谁拿的节点总和大谁获胜,问你谁有必胜策略. 题解: 小根堆中,每个点的权值总是不小于父亲节点的权值.所以无论怎么取 ...