全球轮3——cf1148
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的更多相关文章
- 通过 PowerShell 支持 Azure Traffic Manager 外部端点和权重轮询机制
Jonathan TulianiAzure网络 - DNS和 Traffic Manager高级项目经理 在北美 TechEd 大会上,我们宣布了 Azure Traffic Manager将支持 ...
- digitalocean完成B轮8300万美元融资,赠送10美元优惠码
7月8日,美国vps服务商digitalocean在官方博客宣传,公司完成高达8300万美元B轮融资.融资方包括 IA Ventures, Andreessen Horowitz和Access Ind ...
- 全球分布式数据库:Google Spanner(论文翻译)
本文由厦门大学计算机系教师林子雨翻译,翻译质量很高,本人只对极少数翻译得不太恰当的地方进行了修改. [摘要]:Spanner 是谷歌公司研发的.可扩展的.多版本.全球分布式.同步复制数据库.它是第一个 ...
- 小程序实现非swiper组件的自定义伪3D轮播图
效果如下: 我用了很笨的方法实现的,大致就是: 1.当前点击的div(view)如果前后都有内容,那么,当前div(view)就设置到中间,前一个就设置到左边,前一个的前面所有全部设置到最左边,后面一 ...
- JQ无缝轮播图-插件封装
类似京东的这种无缝轮播效果: 实例代码下载 HTML代码: <body> <!-- /*觅me 探索生活*/ --> <div class="test" ...
- 36氪首发 | 「myShape」完成千万级人民币 Pre-A轮融资,推出 AI 智能健身私教
无需任何可穿戴设备. 36氪获悉,myShape(原Shapejoy)已于近期完成千万级人民币的Pre-A轮融资,由天奇阿米巴领投,远洋集团.七熹资本以及老股东跟投.过去 myShape 曾获得元迅资 ...
- 健康领域今年开始井喷了,养老地产和私人医生这两个领域目测成为下一轮BAT在健康领域布局的竞争方向
医疗行业做了六年多的时间,今年到了井喷的阶段,腾讯先是入股了丁香园,然后又一亿美金融资挂号网,春雨医生获得5000万美元的C轮融资,这是要上市的节奏.. 从互联网战略上,健康网和医疗网都是做资料刚开始 ...
- 我买网B轮融资成功,五周年豪掷千万回馈会员
对中粮我买网而言,近期的B轮融资应该算是最大的好消息了------8月1日,中粮我买网在京宣布完毕B轮融资.金额高达1亿美元.被称为"食品电商史上最大融资".据悉,本次融资 ...
- 全球IT管理最佳实践之DevOps Master 认证
原文:http://soft.chinabyte.com/30/13940030.shtml 作者:国际最佳实践管理联盟 孙振鹏 关键字: DevOps.DevOps认证.DevOpsDays.Dev ...
随机推荐
- C#跨线程访问(一) ---- SynchronizationContext
一.SynchronizationContext顾名思义是同步上下文的意思.利用此对象可以实现线程间数据的同步.异步访问. 二.例子 class Program { static Thread _wo ...
- ifame问题
问题描述:在div中添加了点击事件,div中嵌套着一个iframe,父类的div事件全部都会被失效, 解决办法:给iFrame添加css pointer-events : none; 去掉了ifram ...
- vue 学习五 深入了解components(父子组件之间的传值)
上一章记录了 如何在父组件中向子组件传值,但在实际应用中,往往子组件也要向父组件中传递数据,那么此时我们应该怎么办呢 1.在父组件内使用v-on监听子组件事件,并在子组件中使用$emit传递数据 // ...
- Redis缓存数据库简单介绍
\ 1.什么是redis redis是一种基于内存的高性能键值型数据库(key-value),属于NoSQL,和 Memcached 类似: 从内存读取速度为110000次/s,写入内存速度为8100 ...
- look at me
I would bet my life, like I bet my heart我以生命与真心担保That you were the one, baby你就是我的命中注定I've never been ...
- Kotlin -help
{ kotlin: run Kotlin programs, scripts or REPL. Usage: kotlin <options> <command> <ar ...
- jQuery-介绍 加载 选择器 样式操作 属性操作 绑定click事件
jQuery - 介绍 加载 选择器 样式操作 属性操作 绑定click事件 注意:以下部分问题不能实现效果,因该是单词拼写错误(少个t)或者没有加引号(“swing”)... jquery介绍 jQ ...
- 扫描线+树状数组——cf1191F
把所有点离散化,虚构一根扫描线从上往下扫,每行的点从左往右算贡献,开一个树状数组维护每个离散化后的x坐标是否已经有点 扫描到一个点时,先把这个点更新到树状数组里,每个点的贡献是它左边的所有点数*到它相 ...
- 好用的日期控件jeDate
最近做公司后台系统关于仓库的一些东西,需要根据时间范围来导出一些数据,我们使用的后台框架是基于bs的,bs也有时间控件:bootstrap-datepicker是只能选择日期的, daterangep ...
- ueditor使用心得
UEditor使用手册 配置jdk 1.6+ Apache Tomcat6.0+ Ueditor官网下载 部署 安装好jdk和apache后,我们开始部署代码 我们在apache的安装目录下,找到we ...