当前位置: 首页 > wzjs >正文

黑wordpress网站中国企业培训网

黑wordpress网站,中国企业培训网,网站建设技术支持有什么,b2b网站建设合同模板C - Error Swap 操作在交换的基础上增加了加减1,首先可以发现,操作前后数组的所有数的和不变,因此如果初始时a数组元素的和不等于b数组元素的和,则a不可能变成b。 其实只要a数组元素的和等于b数组元素的和,a就一定能…

C - Error Swap

操作在交换的基础上增加了加减1,首先可以发现,操作前后数组的所有数的和不变,因此如果初始时a数组元素的和不等于b数组元素的和,则a不可能变成b。

其实只要a数组元素的和等于b数组元素的和,a就一定能变成b,(其实还需要n>2,因为需要进行交换操作,请往下看),因为当对a_i和a_j (i<j)先交换再进行一次操作,可以让a_i减少1,让a_j增加1,若i>j,则先进行一次操作再交换,就也可以让a_i减少1,a_j增加1,而a数组元素的和与b数组元素的和相等的话,a中元素需要减少的量和需要增加的量是相等的,不断选出a_i和a_j,其中a_i是需要减小的元素,a_j是需要增大的元素,进行对a_i+1,对a_j-1的操作最终就可以让a_i等于b_i让a_j等于b_j。

但交换的操作如何实现呢?先看看有两个元素的情况,如果n=2,那么

a1,a2只能变成a2-1,a1+1,因为再变就又回到a1,a2,是无法实现交换操作的。n=2的情况我们特判。

n>2时,如果要交换a_i和a_j (i<j),可以借助第三个元素完成,如果i>1,可以借助他们左边的元素a_1完成:

用(a,b)(a<b)表示对a位置和b位置上的元素进行操作。

依次进行操作:(1,i) (1,j) (1,i)

如果i>1不满足,其实借助这两个元素右边的元素a_n也可以:
依次操作:(i,n) (j,n) (i,n)

如果i=1并且j=n,那能不能借助两个元素中间的元素对i,j进行交换?答案是可以,但是相较于以上两种交换的操作方式,这种交换的操作方式可能不那么直接想到,需要构造,可以按如下思路:

用a_i和a_j之间的a_p进行中转,i<p<j,最后一次操作对位置i,j进行,也就是最后一次操作是(i,j),那么最后一次操作前,i 位置上的值应该是a_i-1,j 位置上的值应该是a_j+1,如果将a_i向右换一次,向左换两次,就得到值a_i-1,同样将a_j向左换一次,向右换两次,得到值a_j+1,这一过程可以这样完成:
(i,j) (i,p) (p,j) (i,p)

加上最后的(i,j)的话,用p为中转交换(i,j)的操作序列是:
(i,j) (i,p) (p,j) (i,p) (i,j)

当i=1,j=n时,可以用2作为中转,写成:
(1,n) (1,2) (2,n) (1,2) (1,n)

现在分析一下总共需要的操作次数,让每个a_i和b_i的差值(差的绝对值)都最大,则总差值为nm,则需要进行mn/2次的a_i->a_i-1,a_j->a_j+1(记作“改变值”),如果让这mn/2次的改编自中,有尽量多的i=1和j=n,这样最后的总操作数会更大,那么在这mn/2次改变值中,最多有m/2次是对1和n改变值,所以总操作次数为:
mn/2*(交换需要3次+操作的1次)+(mn/2-m/2)*(交换需要5次+操作的1次),小于题目要求的31000。

#include<bits/stdc++.h>
using namespace std;
using ll=long long;const ll maxn=100+5;
ll n;
ll a[maxn],b[maxn];
vector<pair<ll,ll>> op;void opt(ll x,ll y){if(x>y) swap(x,y);op.push_back({x,y});ll t=a[x];a[x]=a[y]-1;a[y]=t+1;
}void swp(ll x,ll y){if(y<x) swap(x,y);if(x>1) {opt(1,x);opt(1,y);opt(1,x);}else if(y<n){opt(n,x);opt(n,y);opt(n,x);}else {opt(1,n);opt(1,2);opt(2,n);opt(1,2);opt(1,n);}
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cin>>n;ll s1=0,s2=0;for(ll i=1;i<=n;i++) {cin>>a[i];s1+=a[i];}for(ll i=1;i<=n;i++) {cin>>b[i];s2+=b[i];}if(n==2){if(a[1]==b[1] && a[2]==b[2]) {cout<<"Yes"<<"\n";cout<<0<<"\n";}else if(a[2]-1==b[1] && a[1]+1==b[2]){cout<<"Yes"<<"\n";cout<<1<<"\n";cout<<1<<" "<<2<<"\n";}else {cout<<"No"<<"\n";}}else {if(s1!=s2) {cout<<"No"<<"\n";}else {cout<<"Yes"<<"\n";op.clear();vector<ll> p,q;for(ll i=1;i<=n;i++){ll d=a[i]-b[i];if(d>0) {for(ll j=1;j<=d;j++) p.push_back(i);}else if(d<0){d=-d;for(ll j=1;j<=d;j++) q.push_back(i);}}//printf("p大小:%lld q大小:%lld\n",p.size(),q.size());for(ll i=0;i<p.size();i++){ll x=p[i],y=q[i];if(x<y) {swp(x,y);opt(x,y);}else {opt(x,y);swp(x,y);}}/*printf("Seq after operations:\n");for(ll i=1;i<=n;i++) cout<<a[i]<<" ";cout<<"\n";*/cout<<(ll)op.size()<<"\n";for(ll i=0;i<op.size();i++){cout<<op[i].first<<" "<<op[i].second<<"\n";}}}return 0;
}

http://www.dtcms.com/wzjs/272502.html

相关文章:

  • 网站建设公司推广网站推广途径和推广要点有哪些?
  • 徐东做网站网页模板怎么用
  • 广州建网站技术长沙做优化的公司
  • 蒙阴哪有做淘宝网站的长春网站建设方案优化
  • 网站被攻击 是vps问题还是dz程序百度股市行情上证指数
  • 风景区网站建设论文范文合肥seo关键词排名
  • 网站banner图自适应农村电商平台有哪些
  • 视频制作软件免费版下载seo sem什么意思
  • 前端网站模板合肥seo网站管理
  • 做网站之前需要准备什么条件游戏交易平台
  • 劲松做网站的公司短视频平台推广
  • 建设网站需要提交什么资料武汉百度推广入口
  • 自做闪图网站百度入口官网
  • 网络科技公司名字起名大全百度seo排名帝搜软件
  • 抄袭别人网站怎样建网站平台
  • wordpress企业站模板下载宝安网站建设
  • 武汉做网站最好的公司武汉新一轮疫情
  • 铜仁市建设局网站百度应用平台
  • 如何做赌博网站代理外链服务
  • 网站建设报告书最大的搜索网站排名
  • 网站栏目功能分析网上怎么推广公司产品
  • 网站建设品牌好网站优化排名操作
  • 在国外视频网站做中国美食网站诊断分析
  • 国内政府网站建设情况关键词采集网站
  • 聊城推广网站关键词排名靠前
  • 昆明网站建设首选公司上海还能推seo吗
  • 娄底建网站浙江网络科技有限公司
  • 象山县住房建设局网站沈阳seo关键词
  • 网站扩展虚拟空间成都网站推广
  • html商业网站模板灰色关键词排名技术