【codeforces】【比赛题解】#862 CF Round #435 (Div.2)
这次比赛打得很舒服,莫名得了个Rank41,涨了219的Rating,就比较优秀。不过还是没有闫神厉害啊。
题目链接::P。
【A】MEX
题意:
Evil博士把Mahmoud和Ehab绑架到了邪恶之地,因为他们在邪恶信息学奥林匹克竞赛(EOI)中取得了优异的成绩。博士想让他们回答一些问题后才放他们走。
Evil博士对集合很感兴趣,他有一个n个非负整数的集合。如果一个集合的MEX正好等于x,那么博士认为这个集合是邪恶的。
一个非负整数集合的MEX就是最小的不属于集合的非负整数。
Evil博士想要让他的集合变得邪恶,他每次可以做一个操作:往集合中添加一个非负整数或删除集合中的某个元素。
他最少做几次操作在能让这个集合变得邪恶呢?
输入:
第一行,两个数\(n,x(1\leq n\leq100,0\leq x\leq100)\)。
第二行,\(n\)个非负整数\(a_{1},a_{2},\cdots,a_{n}\),表示集合中的元素\((0\leq a_{i}\leq100)\)。
输出:
一个数,表示最小操作数。
题解:
添加所有不在集合中的小于\(x\)的非负整数,如果\(x\)在集合中,删除\(x\)。
1 #include<cstdio> 2 int n,x,a[1001],less,ans; 3 int main(){ 4 scanf("%d%d",&n,&x); 5 for(int i=1;i<=n;++i){ 6 scanf("%d",a+i); 7 if(a[i]<x) ++less; 8 if(a[i]==x) ++ans; 9 } 10 printf("%d",ans+x-less); 11 return 0; 12 }
【B】二分图
题意:
Mahmoud和Ehab继续他们的旅程!在邪恶之地,众人皆知,Evil博士很喜欢二分图,特别是树。
Evil博士给定了一棵树,他想在树中加入尽量多条边,使得新图还是二分图。
求出最多添加的边数。
输入:
第一行,一个数\(n(1\leq n\leq10^5)\),表示树的顶点数。
接下来\(n-1\)行,每行两个数\(u_i,v_i(1\leq u_i,v_i\leq n)\),表示\(u_i,v_i\)间有连边。
输出:
一个整数,表示最多添加的边数。
题解:
黑白染色,答案=黑色点*白色点-(n-1)。
1 #include<cstdio> 2 int n,h[100001],nxt[200001],to[200001],tot=0,vis[100001],sums[2]; 3 inline void ins(int x,int y){nxt[++tot]=h[x];to[tot]=y;h[x]=tot;} 4 void dfs(int u,int t){ 5 vis[u]=1; 6 ++sums[t]; 7 for(int i=h[u];i;i=nxt[i]){ 8 if(!vis[to[i]]){ 9 dfs(to[i],t^1); 10 } 11 } 12 } 13 int main(){ 14 int x,y; 15 scanf("%d",&n); 16 for(int i=1;i<n;++i) scanf("%d%d",&x,&y), ins(x,y), ins(y,x); 17 dfs(1,0); 18 printf("%I64d",1ll*sums[0]*sums[1]-n+1); 19 return 0; 20 }
【C】异或
题意:
Mahmoud和Ehab到达了第三站。你知道,Evil博士喜欢集合,不过这次,Evil博士不会展出任何他的集合,而是让他们创造一个新的集合,丰富自己的集合收藏。
Evil博士有着他喜欢的邪恶数字\(x\),他想让你创造一个包含\(n\)个不同的非负整数集合,使得这其中的数的异或和恰好等于\(x\)。集合中的数不大于\(10^6\)。
输入:
两个数,\(n,x(1\leq n\leq10^5,0\leq x\leq10^5)\)。
输出:
如果能创造这样的集合,先输出YES,然后输出一行\(n\)个互不相同的非负整数,表示集合,这些数不应该超过\(10^6\)。如果不能,输出NO。
题解:
当\(n=1\)时,输出\(x\)即可。
当\(n=2\)时,若\(x=0\),无解;否则输出\(0\;x\)。
当\(n=3\)时,若\(x=0\),输出\(1\;2\;3\);当\(x=1\),输出\(0\;2\;3\);当\(x>1\),输出\(0\;1\;x\oplus1\)。
当\(n>3\)时,先输出前\(n-3\)个非负整数,计算剩余的数,记为\(x_0\)。
接下来当做\(n=3\)的情况,不过输出的数要分别加上\(2^{17},2^{18},2^{17}+2^{18}\)。
1 #include<cstdio> 2 int a,b; 3 int main(){ 4 scanf("%d%d",&a,&b); 5 if(a==2&&b==0) {puts("NO"); return 0;} 6 puts("YES"); 7 if(a==1) {printf("%d",b); return 0;} 8 if(a==2) {printf("0 %d",b); return 0;} 9 if(a==3) {if(b==0) printf("1 2 3"); else if(b==1) printf("0 2 3"); else printf("0 1 %d",b^1); return 0;} 10 for(int i=1;i<=a-3;++i){ 11 printf("%d ",i); b^=i; 12 } 13 if(b==0) printf("%d %d %d",1+((1<<17)+(1<<18)),2+(1<<17),3+(1<<18)); 14 else if(b==1) printf("%d %d %d",(1<<17)+(1<<18),2+(1<<17),3+(1<<18)); 15 else printf("%d %d %d",(1<<17)+(1<<18),1+(1<<17),(b^1)+(1<<18)); 16 return 0; 17 }
【D】01字串
交互题不会做XD。
【E】函数
题意:
Evil博士对数学和函数很感兴趣。
他给出了两个数组\(a_{1},\cdots,a_{n}\)和\(b_{1},\cdots,b_{m}(m\geq n)\)。
他又对满足\(0\leq j\leq m-n\)的\(j\)定义\(c_{i}=a_{i}-b_{i+j}\)和函数\(f(j)=|c_{1}-c_{2}+c_{3}-c_{4}\cdots c_{n}|\)。
也就是\(f(j)=|\sum_{i=1}^{n}(-1)^{i-1}*(a_{i}-b_{i+j})|\)。
Evil博士想要Mahmoud和Ehab去计算\(f(j)\)的最小值。他发现这太简单了。
于是他加入了\(q\)个操作,第\(i\)个操作对\(a\)数组中的\([l_i,r_i]\)段加上一个数\(x_i\)。然后再让他们计算这个函数的最小值。
题解:
简化算式:\(f(j)=|\sum_{i=1}^{n}(-1)^{i-1}*a_{i}+\sum_{i=1}^{n}(-1)^{i-1}*b_{i+j}|\)。
记第一个\(\sum\)的结果为\(Sum\)。记第二个\(\sum\)的结果为\(S_{j}\)。那么在操作间,\(Sum\)的值会改变。
改变的数值容易计算,可发现,这样交错相加减的算式,\(Sum\)这样变化:\(Sum \to Sum+x_{i}(r_{i}mod\:2-(l_{i}-1)mod\:2)\)。
而对于\(S_j\)的值,因为被绝对值包着,我们需要让\(S_j\)尽量接近\(-Sum\)。
因为\(b\)数组不会改变,故\(S_j\)也不会改变,将\(S_j\)排序后,二分查找即可。
1 #include<cstdio> 2 #include<algorithm> 3 const int INF=99999999999999999ll; 4 int n,m,q,mj; 5 long long a[100011],b[100011],c[100011],sum; 6 long long Abs(long long x){return x<0?-x:x;} 7 int main(){ 8 scanf("%d%d%d",&n,&m,&q); mj=m-n; 9 for(int i=1,f=1;i<=n;++i,f^=1) scanf("%I64d",a+i),sum+=f?a[i]:-a[i]; 10 for(int i=1;i<=m;++i) scanf("%I64d",b+i); 11 for(int i=1,f=0;i<=n;++i,f^=1) c[0]+=f?b[i]:-b[i]; 12 for(int i=1;i<=mj;++i) c[i]=-c[i-1]-b[i]+((n&1)?-b[i+n]:b[i+n]); 13 std::sort(c,c+mj+1); 14 int l,r,x,len,mid; 15 long long ans; 16 l=0, r=mj, ans=INF; 17 while(l<=r){ 18 mid=(l+r)>>1; 19 if(c[mid]<-sum) l=mid+1; 20 else r=mid-1; 21 if(Abs(c[mid]+sum)<ans) ans=Abs(c[mid]+sum); 22 } 23 printf("%I64d\n",ans); 24 for(int i=1;i<=q;++i){ 25 scanf("%d%d%d",&l,&r,&x); 26 len=r-l+1; 27 if(len&1) sum+=(l&1)?x:-x; 28 l=0, r=mj, ans=INF; 29 while(l<=r){ 30 mid=(l+r)>>1; 31 if(c[mid]<-sum) l=mid+1; 32 else r=mid-1; 33 if(Abs(c[mid]+sum)<ans) ans=Abs(c[mid]+sum); 34 } 35 printf("%I64d\n",ans); 36 } 37 return 0; 38 }
转载于:https://www.cnblogs.com/PinkRabbit/p/7696028.html
【codeforces】【比赛题解】#862 CF Round #435 (Div.2)相关推荐
- D. Mahmoud and Ehab and the binary string Codeforces Round #435 (Div. 2)
http://codeforces.com/contest/862/problem/D 交互题 fflush(stdout) 调试: 先行给出结果,函数代替输入 1 #include <cstd ...
- E. Mahmoud and Ehab and the function Codeforces Round #435 (Div. 2)
http://codeforces.com/contest/862/problem/E 二分答案 一个数与数组中的哪个数最接近: 先对数组中的数排序,然后lower_bound 1 #include ...
- 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
终于打了一场CF,不知道为什么我会去打00:05的CF比赛-- 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...
- 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)
cf的比赛越来越有难度了--至少我做起来是这样. 先看看题目吧:点我. 这次比赛是北京时间21:35开始的,算是比较良心. [A]奇数与结束 "奇数从哪里开始,又在哪里结束?梦想从何处起航, ...
- 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)
没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...
- 【codeforces】【比赛题解】#950 CF Round #469 (Div. 2)
剧毒比赛,至少涨了分对吧.: ( [A]Left-handers, Right-handers and Ambidexters 题意: 有\(l\)个右撇子,\(r\)个左撇子,\(a\)个双手都惯用 ...
- 【codeforces】【比赛题解】#851 CF Round #432 (Div.2)
cf真的难-- 点我浏览丧题. [A]Arpa和她对墨西哥人浪的研究 Arpa正在对墨西哥人浪进行研究. 有n个人站成一排,从1到n编号,他们从时刻0开始墨西哥人浪. 在时刻1,第一个人站起来. 在时 ...
- 【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)
人生的大起大落莫过如此,下一场我一定要回紫. [A]Points on the line 题意: 一个直线上有\(n\)个点,要求去掉最少的点,使得最远两点距离不超过\(d\). 题解: 暴力两重fo ...
- 【codeforces】【比赛题解】#872 CF Round #440 (Div.2)
链接. [A]寻找漂亮数字 题意: 给定了两列非零数字. 我们说一个数是漂亮的,当它的十进制表达中有至少一个数从数列一中取出,至少有一个数从数列二中取出. 最小的漂亮数字是多少? 输入: 第一行两个数 ...
最新文章
- 二维数组练习--矩阵的加法和乘法
- 清华大学教评中心 <jpxzx2019@mail.tsinghua.edu.cn> 12月24日9:00-11:10试讲评审材料(庞观和朱峰老师)
- python画误差棒/带
- Exchange 2013学习(二),关于约会、会议和事件
- C++ 自由存储区是否等价于堆?
- SonarQube中的Maven项目的单元和集成测试报告
- python中递归函数写法_python中递归函数如何创建
- Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数【含代码】)- 案例篇
- 一个奇怪的DNS服务器故障
- C++使用opencv判断一个点是否在多边形之内
- Tkinter用户注册后密码通过MD5加密写入文本文件
- library/adodb/adodb.inc.php,ADOdb Library for PHP
- 【单片机】2.1 AT89S52单片机的硬件组成
- 基于Web2.0的异构数字资源检索系统研究与开发
- 小技巧丨累了困了学不下去的时候该怎么办?
- 002 splitter
- 计算机科学的发展表情包,表情包发展简史
- 非法破坏计算机系统罪宣判,以非法经营罪提起公诉。法庭未当庭宣判。为什么不会被定破坏计算机信息系统罪呢?...
- python大学生社团管理系统
- 华为手机有线共享网络_华为怎么共享热点网络连接(图文)
热门文章
- 基于FPGA数字示波器
- Unity添加程序集引用
- html鼠标经过图片显示详情页,ecshop商品详情页图片更改为鼠标经过切换大图
- oracle 主键自增函数_oracle 主键自增
- 班尼机器人维修方法_ABB机器人九大常见故障维修
- python scatter参数详解_Python中scatter函数参数用法详解
- mysql 5.6 多实例_MySQL 5.6 多实例安装
- 旅游电商的巨大市场潜力
- 【乡村振兴】“美在银林”乡村儿童系列公益活动启动暨郭伟新师生公益画展
- 除了谷歌,10个细分搜索引擎扩大你的流量池