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. Codeforces 1152D DP

    题意:有一颗由长度为2 * n的合法的括号序列构成的字典树,现在你需要在这颗字典树上选择一些不连接的边,问最多可以选择多少条边? 思路:不考虑题目条件的话,我们只考虑在随意的一棵树上选择边,这是一个贪 ...

  2. vscode centos

    https://www.cnblogs.com/My-Jinse/articles/8400137.html rpm -ql 包名 缺少libXss.so.1()(64bit) yum install ...

  3. Python学习笔记(七)——魔法方法

    1.构造和析造 魔法方法就是被双下划线包围的方法 __init__()方法 __init__方法默认没有参数,返回值为none.类实例化对象需有明确的初始化步骤要重写函数 >>> c ...

  4. Java List 快速搜索对象

    比如现在有一个需求现在有一个List 里面装Student 对象 我们想找出这个List 对象里面student name=小明的对象 我想很多同学会像以前的我一样变量List 然后去比较 但是这样处 ...

  5. ul -- li 模拟select下拉框

    在写项目中 用到下拉框,一般用 <select name="" id=""> <option value=</option> &l ...

  6. Thinkphp 3.2 去掉index.php

    1.httpd.conf中去掉LoadModule rewrite_module modules/mod_rewrite.so 前面的#号 2.httpd.conf 中  AllowOverride ...

  7. [原创] Java 流布局管理器 FlowLayout

    参数原型: public FlowLayout(int align, int hgap, int vgap) { this.hgap = hgap; this.vgap = vgap; setAlig ...

  8. thinkphp 入口绑定

    入口绑定是指在应用的入口文件中绑定某个模块,甚至还可以绑定某个控制器和操作,用来简化URL地址的访问. 绑定模块 例如,我们定义了一个入口文件admin.php,希望可以直接访问Admin模块,那么我 ...

  9. JavaWeb学习篇之----web应用的虚拟目录映射和主机搭建(Tomcat)

    从今天开始来学习JavaWeb的相关知识,之前弄过一段时间JavaWeb的,就是在做毕业设计的时候搞过,但是那时候完全是为了任务去学习,所以效果不好,好多东西都没有深入的研究过,所以接下来的一段时间我 ...

  10. 树状数组优化dp——cf985E经典

    /* dp[i]=0|1 表示前i是否可以被成功分组, dp[i+1]能够变成1的三个条件 1:j∈[0,i-k]里存在dp[j]=1 2:dp[j]=1 3:a[i+1]-a[j+1]<=d ...