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. pandas读书笔记 算数运算和数据对齐

    pandas最重要的一个功能是,它可以对不同索引的对象进行算数运算.在对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集. Series s1=Series([,3.4,1.5],ind ...

  2. SSH连接时,长时间不操作就断开的解觉办法

    1.第一次尝试失败 修改/etc/ssh/sshd_config文件, 找到 ClientAliveInterval 0 ClientAliveCountMax 3 并将注释符号("#&qu ...

  3. 谷歌浏览器控制台出现 Unchecked runtime.lastError: The message port closed before a response was received. 的报错

    错误截图: 解决:经过网上搜索说是浏览器扩展程序的问题,把那个扩展程序删除或者禁用就可以了

  4. Android中的Parcel机制(下)

    上一篇中我们透过源码看到了Parcel背后的机制,本质上把它当成一个Serialize就可以了,只是它是在内存中完成的序列化和反序列化,利用的是连续的内存空间,因此会更加高效. 我们接下来要说的是Pa ...

  5. params拦截器

    1. params拦截器首先给action中的相关参数赋值,如id  2. prepare拦截器执行prepare方法,prepare方法中会根据参数,如id,去调用业务逻辑,设置model对象   ...

  6. kafka集群配置总结

    虽然很简单,但会遇到很多奇怪的坑,而且网上解决方法搜不到. 首先下载kafka包,解压缩后,修改conf/server.properties文件,基本配置项如下(省略了部分默认配置项 : broker ...

  7. JVM内核-原理、诊断与优化学习笔记(二):JVM运行机制

    文章目录 JVM启动流程 PC寄存器 方法区 保存装载的类信息 通常和永久区(Perm)关联在一起 Java堆 Java栈 Java栈 – 局部变量表 ** 包含参数和局部变量 ** Java栈 – ...

  8. [kuangbin带你飞]专题一 简单搜索 - K - 迷宫问题

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...

  9. MySQL初步理解,简易单表增删改查

    什么是数据库? 存储数据的仓库,本质是一个文件系统,封装了算法和文件之前数据的存储模式 阶段1:集合 数组 变量 缺点:数据存储在内存中,不能实现数据的持久化存储 阶段2:IO流 结合文件 .txt ...

  10. 天道神诀---DHCP服务(上篇)

    DHCP DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议),被应用在局域网环境中,主要作用是集中的管理.分配IP地址,使网路环境中的主机动态的获得 ...