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

网站更换域名 seo芜湖企业网站建设

网站更换域名 seo,芜湖企业网站建设,网上开店指南,怎么自建设部网站查询公司资质前言 因为每道题其实都有挺值得说道的地方,所以我就把这场比赛分成了两篇文章来写,主要是要把一道题解释清楚真的很难,也需要花大量的笔墨,写成一篇文章就过于累赘了。强烈建议第一遍没看懂的同学再看一遍!&#xff0…

前言

因为每道题其实都有挺值得说道的地方,所以我就把这场比赛分成了两篇文章来写,主要是要把一道题解释清楚真的很难,也需要花大量的笔墨,写成一篇文章就过于累赘了。强烈建议第一遍没看懂的同学再看一遍!!!

T1

题面如下:

其实说白了就是把 a i , a i + 1 , a i + 2 a_i,a_{i+1},a_{i+2} ai,ai+1,ai+2 变成 a i + 2 , a i , a i + 1 a_{i+2},a_i,a_{i+1} ai+2,ai,ai+1 的形式。注意这题让我们求的:能否通过上述操作使得 A 与 B 相等。

首先是最好判断的:如果 A 中的某个数字的个数与 B 中的数字个数不同,那很明显不成立,直接输出 No

然后貌似没有什么思路了……我们来打一份暴力代码看看 B 确定的情况下,A 成立的所有情况。

为了方便观看,我这里只取 4 4 4 个数 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4 来展示它的规律:

其中,红色得闲表示它们的对应关系。

如果你对图形的感觉很明锐,相信你一定一眼就看出来了所有成立的数列的对应关系形成的节点数量都是偶数,而不成立的都是奇数(不信你自己试试)。

由此,我们可以非常轻松的写出一部分代码了:

int sum=0;
for(int i=1;i<=n;i++)
{for(int j=i+1;j<=n;j++){if(c[a[i]]>c[a[j]])//判断交点的个数,其中的 c 数组是每个数再 B 中的位置{sum++;}}
}
if(sum&1)
{cout<<"No";
}
else
{cout<<"Yes";
}

但是这是一种特殊情况,也就是完全没有重复数字,那如果有重复数字,这个对应关系根本建立不起来,又怎么做呢?

我又跑了几遍暴力代码,发现:有重复数字的序列没有不成立的情况,于是我们写出了代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[5006],b[5006],c[5006],num1[5006],num2[5006];
signed main()
{// freopen("shift.in","r",stdin);// freopen("shift.out","w",stdout);cin>>n;for(int i=1;i<=n;i++){cin>>a[i];num1[a[i]]++;}bool fl=0;for(int i=1;i<=n;i++){cin>>b[i];num2[b[i]]++;if(c[b[i]])//有重复数字{fl=1;}c[b[i]]=i;}for(int i=1;i<=5000;i++){if(num1[i]!=num2[i]){cout<<"No";return 0;}}if(fl)//特判一下{cout<<"Yes";return 0;}int sum=0;for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(c[a[i]]>c[a[j]]){sum++;}}}if(sum&1){cout<<"No";}else{cout<<"Yes";}return 0;
}

但是做完了我还是有点不安:究竟为什么交点数量是偶数的时候就一定成立呢?

这需要我们从题目原本的特性来看:题目中让我们把 a i , a i + 1 , a i + 2 a_i,a_{i+1},a_{i+2} ai,ai+1,ai+2 变成 a i + 2 , a i , a i + 1 a_{i+2},a_i,a_{i+1} ai+2,ai,ai+1 的形式,我们看看这么变了之后会有什么特别之处:

很明显,产生了两个交点,我们再把它进行一次操作:

还是只有两个交点。

而再进行一次操作就会回到原来的状态,此时是 0 0 0 个交点。

这说明了一件事:不管我们进行多少次操作,这三个数最终都会产生偶数个交点,而很明显:任意两组不相关的三个点所产生的节的数量也是不相关的。所以我们对任意组不相关的三个点进行操作,最后就会得到一堆节,而因为每组可以产生偶数个节,所以加在一起还是偶数。

而对于有重复数字的,这就很有趣了,因为重复数字的原因,两个相同的数字有两种不同的对应方法:

这是,左边的情况不产生交点,而右边则会产生一个交点,所以说,如果其他点已经产生偶数个节了,那用左边的对应情况就刚刚好,而已经有奇数个交点,那采取右边的对应方式也刚刚好,所以不管怎么样,都有一种对应关系能成立。

(T1 没 A 的感受谁懂啊。比赛最后半小时找到了正解,结果因为规律太特殊又没证明出来就没写……结果考完了就证出来了。)

T2

题面:

(这道题真的特别特别难想。)

这题我们要首先画出一根数轴:

然后我们假设第 i i i 个人的位置是 x i x_i xi(其中假设 x i x_i xi 已有序,这一步很重要,因为这一步可以拆掉这个绝对值),那么我们可以标出每个人所站的位置:

这时候,我们要求的答案就可以被表示为这样:

∑ i = 1 N − 1 ∑ j = 1 N x j − x i \sum_{i=1}^{N-1}\sum_{j=1}^Nx_j-x_i i=1N1j=1Nxjxi

于是我们成功的去掉了绝对值。

现在我们考虑求最小值。

因为是一堆数的加减,而且还是双重加和,因此我们考虑直接把整个数列拆开,也就得到了这个式子:

∑ i = 1 N − 1 ∑ j = 1 N x j − x i = x 2 − x 1 + x 3 − x 1 + x 4 − x 1 ⋯ + x 3 − x 2 + x 4 − x 2 … = x n × ( n − 1 ) + x n − 1 × ( n − 2 ) ⋯ + x 1 × 0 − x n × 0 − ⋯ − x 1 × ( n − 1 ) = x n × ( n − 1 ) + x n − 1 × ( n − 3 ) + ⋯ + x 1 × ( − n + 1 ) = ( x n − x 1 ) × ( n − 1 ) + ( x n − 1 − x 2 ) × ( n − 3 ) + … \begin{aligned}&\sum_{i=1}^{N-1}\sum_{j=1}^Nx_j-x_i\\=&x_2-x_1+x_3-x_1+x_4-x_1\dots+x_3-x_2+x_4-x_2\dots\\=&x_n\times(n-1)+x_{n-1}\times(n-2)\dots+x_1\times0-x_n\times0-\dots-x_1\times(n-1)\\=&x_n\times(n-1)+x_{n-1}\times(n-3)+\dots+x_1\times(-n+1)\\=&(x_n-x_1)\times(n-1)+(x_{n-1}-x_2)\times(n-3)+\dots\end{aligned} ====i=1N1j=1Nxjxix2x1+x3x1+x4x1+x3x2+x4x2xn×(n1)+xn1×(n2)+x1×0xn×0x1×(n1)xn×(n1)+xn1×(n3)++x1×(n+1)(xnx1)×(n1)+(xn1x2)×(n3)+

这下答案就很清晰了:因为 ( n − 1 ) , ( n − 3 ) … (n-1),(n-3)\dots (n1),(n3) 都是定值,所以题目实际上就是要我们求 a i − a n − i + 1 a_i-a_{n-i+1} aiani+1 的最小值。

因为所有数据都差不多,因此我们只拿 x 1 x_1 x1 x n x_n xn 来分析。

我们先随意标出两端区间分别包含 x 1 x_1 x1 x n x_n xn

这时我们要 x n − x 1 x_n-x_1 xnx1 最小,那什么时候最小呢?答案很明显, x 1 x_1 x1 在最右边, x n x_n xn 在最左边,而 x 1 x_1 x1 x n x_n xn 是可以调整的,因此我们只需要把它们放在最靠左的右端点和最靠右的最短点上。

这样一想,代码也就呼之欲出了:

#include<bits/stdc++.h>
using namespace std;
long long n,ans,l[300006],r[300006];
signed main()
{cin>>n;for(int i=1;i<=n;i++){cin>>l[i]>>r[i];}sort(l+1,l+n+1,[](int x,int y)//排左端点,注意:要先看最后面的,再看前面的,所以是从大到小//也就是说,这个最先使用左端点的一定是x_n,所以才从大到小排序{return x>y;});sort(r+1,r+n+1);//排右端点,这里是从前往后扫,所以从小到大for(int i=1;i<=n;i++){if(r[i]<l[i]){ans+=(l[i]-r[i])*(n-i*2+1);//最后面的取左端点,最前面的取右端点}}cout<<ans;return 0;
}

文章转载自:

http://zhkgqefd.nytgk.cn
http://SxSzQmjr.nytgk.cn
http://ngaUDvVZ.nytgk.cn
http://KcdR2pwI.nytgk.cn
http://x4QZmqbg.nytgk.cn
http://vpZKUjg8.nytgk.cn
http://GoOPVHqe.nytgk.cn
http://L2mwHuqN.nytgk.cn
http://4eIRTR0o.nytgk.cn
http://FMIyULwW.nytgk.cn
http://HTEwY584.nytgk.cn
http://kbO99BLt.nytgk.cn
http://mQQad4yK.nytgk.cn
http://hCcAHS4G.nytgk.cn
http://AovWTKfU.nytgk.cn
http://gPCrQIJj.nytgk.cn
http://bvltF906.nytgk.cn
http://6mEKu6M3.nytgk.cn
http://QBVNkENi.nytgk.cn
http://ZvQsuuGB.nytgk.cn
http://3uI2E0vW.nytgk.cn
http://shrHRb5U.nytgk.cn
http://iLNqb5F1.nytgk.cn
http://aSc22xRY.nytgk.cn
http://z6c0oIYq.nytgk.cn
http://N0h09iLK.nytgk.cn
http://GYarzr4O.nytgk.cn
http://TbP61Rnf.nytgk.cn
http://LRh69Fke.nytgk.cn
http://K41p2gCX.nytgk.cn
http://www.dtcms.com/wzjs/681521.html

相关文章:

  • 网站开发 发送邮件功能做图素材网站哪个好
  • 自有服务器 做网站怎么自己做彩票网站吗
  • 网站策划常用软件河南郑州做网站h汉狮
  • 做简历的网站都有哪些网站简繁转换
  • 学校为什么要建设网站转发文章 WordPress
  • 个人网站首页内容科技类公司网站怎么设计
  • 视频制作素材网站电子书网站搭建教程
  • 网站设计主要包含3个方面织梦新手网站建设
  • 网站建设工作半年通报如何做产品展示网站
  • 网站类网站开发源代码推广软件app赚钱联盟
  • 网站开发需求分析报告怎么做自己的公司网站放在百度
  • 厦门专业的网站建设如何创建自己的公司
  • 建设网站哪家公司好网站开发实验报告模版
  • 建站优化办事效率高dw网页制作论文
  • 毕业设计做网站 服务器怎么弄wordpress安装504
  • 如何运用企业官方网站做宣传网站构建器
  • 百度站长平台链接提交wordpress设置系统邮箱
  • 做自媒体网站深圳公司名称
  • 免费网站商城模板达州网站建设qinsanw
  • 做电商网站需要多少时间我的世界服务器网站怎么做
  • 淮南企业网站建设网站建设费用主要包括哪些内容
  • 顶棒 技术支持 东莞网站建设临夏做网站
  • 理财p2p网站开发大型门户网站开发
  • 网站系统代码怎么用商河便宜做网站的公司
  • 做电路方案设计的网站承德网站建设步骤
  • 烟台专业网站建设公司国外好用的免费服务器
  • wordpress快速建站教程视频智慧团建登录手机版入口
  • 网站架构模式用哪种旅游网站建设启动方案
  • 任务网站的接口怎么做通辽做网站通过seo来赚钱
  • 杨思网站建设公司学游戏设计去哪个学校