Codeforces Round #781 CF1665 CDE
1665A - GCD vs LCM
1665B - Array Cloning Technique
1665C - Tree Infection(贪心)(模拟)
最小次数,使所有点感染。每一秒钟,1)可以感染一个新的节点,2)兄弟群(拥有同一个父亲的点)会新增一位被感染(-> 注意这里,即使这个兄弟群中主动感染了2个以上,一秒也只能多一个新感染的)
首先统计兄弟群,兄弟群大小为sum[i],i为他们共同的父亲。接下来就是这串数字进行处理。我想的是先去感染大的兄弟群,让感染人在内部扩散。
但是我忽略了一点,如果每个兄弟群都感染完了一个之后,但是全部人还没被感染完,这里有一段时间差,可以继续去感染新的点,减少一点总时间。
要处理这段时间也很容易,哪个兄弟群未感染人数最多,给上一个感染就好,也是一个贪心做法。
如果题目看清的话,应该思路能顺利的想到这里。(可惜我不时会想当然,理解错题目)
这题还有一个学到的点,就是由于∑sum[i]=n\sum sum[i]=n∑sum[i]=n的,所以可以一个人一个人地模拟被感染的过程,时间复杂度O(N)O(N)O(N)。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;int sum[N];bool cmp(int x,int y)
{return x>y;
}int main()
{int QwQ;cin>>QwQ;while(QwQ--){int n;cin>>n;sum[n+1]=1;for(int i=2;i<=n;i++){int x;cin>>x;sum[x]++;}sort(sum+1,sum+n+2,cmp);int m;for(m=1;;m++){if(sum[m]==0){m--;break;}}for(int i=1;i<=m;i++){sum[i]=sum[i]-m+i-1;}sort(sum+1,sum+m+1,cmp);int mx=sum[1]>0?1:0,ans=m;while(1)//for(int i=1;i<=m;i++) debug{if(sum[mx]==0) break;//if(mx==0) break; debugsum[mx]--;mx=0;ans++;for(int j=1;j<=m;j++){if(sum[j]<=0) break;sum[j]--;if(sum[mx]<=sum[j]) mx=j;}}cout << ans << endl;for(int i=1;i<=n;i++) sum[i]=0;}
}
1665D - GCD Guess(数学)(交互)
有最多30次猜的机会,提问(a,b)(a,b)(a,b)会回答gcd(x+a,x+b)\gcd(x+a, x+b)gcd(x+a,x+b),猜一猜x是多少?
OI生涯第一次碰到交互题 :): ):)
解法一很有意思,『原来是用这种方法解决的吗』。
显然,如果m>xm>xm>x,那么有x%m=xx\% m= xx%m=x,那答案就出来了。如果我们可以从小做起,先判断x%2=?x \% 2=?x%2=?,再判断x%22=?x\%2^2=?x%22=?,……,最后直到x%230=?x\%2^{30}=?x%230=?结果不就出来了吗。
是啊,如果有模运算固然简单,但是题目给的是gcdgcdgcd。所以下面我们想想怎么用gcd实现对2n2^n2n取模。
第一目标是解决 %2\%2%2 。等价于判断奇偶数。可以尝试一下,发现gcd(x+2,x+4)=2\gcd(x+2,x+4)=2gcd(x+2,x+4)=2则x为偶数,否则为奇数。构造的思路是,让x+ax+ax+a和x+bx+bx+b都拥有2这个因子。
第二目标是解决 %4\%4%4 。不难想到,(接上面)应该讨论%4=0还是%4=2的情况,想检验第一种情况,可以构造gcd(x+4,x+8)\gcd(x+4,x+8)gcd(x+4,x+8)。如果gcd是4就是%4=0的情况,如果gcd是2,就是第二种情况。(这种情况下只会有2和4哦,可以自己举例试一试)
把上述过程代数化,就可以得到CF题解上的式子
gcd(x+2k−r,2k+1)=gcd(x+2k−r,x+2k−r+2k+1)\gcd(x + 2^k - r, 2^{k + 1}) = \gcd(x + 2^k - r, x + 2^k - r + 2^{k + 1})gcd(x+2k−r,2k+1)=gcd(x+2k−r,x+2k−r+2k+1)If gcd=2k+1\gcd = 2^{k + 1}gcd=2k+1, then xmod2k+1=r+2k−1x \bmod 2^{k + 1} = r + 2^{k - 1}xmod2k+1=r+2k−1 else xmod2k+1=rx\mod2k+1=rxmod2k+1=r. Using this algorithm we will find xmod230x\bmod2^{30}xmod230 which is just xxx. It takes exactly 303030 queries.
然后题目还卡了一下,如果用上面的方法会产生大于1e91e91e9的数,所以不能判断前者(%4=0),得改成后者(%4=2)。代码里都写了,可以去看看。
这下就把题目做完啦~~
#include<bits/stdc++.h>
using namespace std;int main()
{int QQ;cin>>QQ;while(QQ--){int rest=0,pre,now=1;for(int i=1;i<=6;i++)//check x%2^i{pre=now;now<<=1;int a,b;/*//check resta=now-rest,b=now-rest+now;printf("? %d %d\n",a,b);int c;cin>>c;if(c==now) ;else rest+=pre;*///check rest+prea=now-rest-pre,b=now-rest-pre+now;printf("? %d %d\n",a,b);int c;cin>>c;if(c==now) rest+=pre;else ;}printf("! %d\n",rest);}
}
第二种运用CRT的方法还在学习中。。。
1665E - MinimizOR(数学)(线段树)
给出n个整数,对于每个询问(l,r)(l,r)(l,r)求出其中的mini≠jai∣aj\displaystyle \min_{i \neq j} a_i | a_ji=jminai∣aj
这题太有意思辣!
很容易贪心的想到要让高位尽量的为0。
根据这种想法,我们很容易可以想到一种暴力解法。从高位到低位(指二进制下),
1)1)1)在区间上如果第k位有超过两个数都为0,那么第k位显然为0,接下来在第k位为0的中继续找k-1位。
2)2)2)如果小于两个为0的,那么显然这位只能是1了,就在所有中去找答案。
答案的解法找到了一个完美的性质!!!
The key idea for the solution is that the answer always lies among no more than 31 minimal numbers.
如果所有数小于2k2^{k}2k,那么需要答案一定出在区间k+1k+1k+1小的数的或运算中。
简单证明一下(计算机的证明题中,数学归纳法是一个宝贵的方法)。严格证明去看CF题解。我给出一种感性证明。
我们上面说过,一个高位要想为0,必须得有至少2个数。前k个数可以构成一串
011...111101...111110...111111...011111...101111...110011...111\\ 101...111\\ 110...111\\ 111...011\\ 111...101\\ 111...110 011...111101...111110...111111...011111...101111...110
接下来再来一个任意一个数,就可以决定答案,比如
111...110111...110 111...110
这样就可以构造一个极限需要用到k+1k+1k+1个的数据。
实现只要求求出区间最小的31个数,可以使用线段树实现。
#include<bits/stdc++.h>
#define fi first
#define se second
#define mk make_pair
using namespace std;
typedef pair<int,int> pii;
const int INF=(1ll<<31)-1;
const int MAXN=1e5+10;
const int MAXK=31;pii a[MAXK];
pii tr[MAXN*4];pii get(int x,int l,int r,int ql,int qr)
{if(l==ql && r==qr){return tr[x];}int mid=l+r>>1;if(qr<=mid) return get(x<<1, l, mid, ql, qr);else if(mid<ql) return get(x<<1|1, mid+1, r, ql, qr);else return min(get(x<<1, l, mid, ql, mid), get(x<<1|1, mid+1, r, mid+1, qr));
}void mod(int x,int l,int r,int pos,int val)
{if(l==pos && r==pos){tr[x]=mk(val,pos);return ;}int mid=l+r>>1;if(pos<=mid) mod(x<<1, l, mid, pos, val);else mod(x<<1|1, mid+1, r, pos, val);tr[x]=min(tr[x<<1],tr[x<<1|1]);
}int main()
{// freopen("my.txt","w",stdout);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int Bright;cin>>Bright;while(Bright--){int rt=1;int n;cin>>n;for(int i=1;i<=n;i++){int x;cin>>x;mod(rt,1,n,i,x);}int q;cin>>q;while(q--){int l,r;cin>>l>>r;int tot=min(r-l+1,MAXK);for(int i=1;i<=tot;i++){a[i]=get(rt,1,n,l,r);mod(rt,1,n,a[i].se,INF);}int ans=INF;for(int i=1;i<=tot;i++)for(int j=i+1;j<=tot;j++) ans=min(ans,a[i].fi|a[j].fi);for(int i=1;i<=tot;i++){mod(rt,1,n,a[i].se,a[i].fi);}cout<<ans<<endl;}}return 0;
}
Codeforces Round #781 CF1665 CDE相关推荐
- codeforces round div2,3周赛补题计划(从开学到期末)
1. 本学期场次 从2020.09.19-2021.01.18,一共18周. 题号 场次 日期 备注 1475 Codeforces Round #697 (Div. 3) 1.25 1474 Cod ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)
Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
- Codeforces Round #270
Codeforces Round #270 题目链接 A:我是筛了下素数.事实上偶数仅仅要输出4和x - 4,奇数输出9和x - 9就可以 B:贪心的策略,把时间排序后.取每k个的位置 C:贪心.每次 ...
- 构造 Codeforces Round #302 (Div. 2) B Sea and Islands
题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...
- [Educational Codeforces Round 16]A. King Moves
[Educational Codeforces Round 16]A. King Moves 试题描述 The only king stands on the standard chess board ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
最新文章
- java反射获取方法内部_公共技术点之 Java 反射 Reflection
- PostGIS之路——线性参考
- python----yield(generator)生成器
- 洛谷P3616 富金森林公园
- ASP.NET-自定义HttpModule与HttpHandler
- istview android:cacheColorHint,android:listSelector属性作用(转)
- jinja Import
- Entity Framework默认值字段不起作用解决方法
- python小结_Python小结
- HBase权威指南(百度云免费下载)
- 理光2014ad扫描服务器响应,理光mp2014ad扫描驱动和打印驱动
- 无人机——电池、电机、螺旋桨搭配
- 手机无线投屏到linux电脑,scrcpy - 手机无线投屏到电脑
- 为什么感觉现在电脑病毒少了?
- 解决问题:RuntimeError: the sip module implements API v11.0 to v11.2 but the module requires API v12.0
- Access 2003 的输入掩码(Input Mask)
- 徒步旅行中的注意事项
- uniapp 播放视频
- Python中矩阵运算中的norm范数、axis、ord参数
- MacBook Pro 耗电严重的终极解决办法2022年