Codeforces Round #499 (Div. 1)部分题解(B,C,D)
Codeforces Round #499 (Div. 1)
这场本来想和同学一起打\(\rm virtual\ contest\)的,结果有事耽搁了,之后又陆陆续续写了些,就综合起来发一篇题解。
B.Rocket
极其简单的一道交互题,有些位置会说反的,那么就选一个数来询问直接选出所有的这样的位置
显然,选择\(\rm 1\)和\(\rm m\)都可以,选择完之后直接二分就行了
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
void read(int &x) {
char ch; bool ok;
for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=41;
int n,m,now,flag;bool vis[maxn];
int check(int x,int now){
int g;
printf("%d\n",x),fflush(stdout),read(g);
if(vis[now])g=-g;return g;
}
int main(){
read(m),read(n);
for(rg int i=1;i<=n;i++){
printf("%d\n",m),fflush(stdout);read(now);
if(now==0)return 0;
else if(now==-1)vis[i]=1;
}
int l=1,r=m;now=1;
while(l<=r){
int mid=(l+r)>>1,f=check(mid,now);
if(!f)return 0;
if(f==-1)l=mid+1;else r=mid-1;
now++;if(now==n+1)now=1;
}
}
C.Border
这题其实也挺显然的,首先我们肯定只用管每个数\(\rm k\)进制下的最后一位的值,思考一下组合的过程,发现对于\(\rm x,y\),似乎\(\rm gcd(k,x,y)\)的倍数都能够被组合出来,然后大胆猜测这是对的,那么所有数和\(\rm k\)的最大公约数的答案就是能够组成的数
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
void read(int &x) {
char ch; bool ok;
for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=1e5+10;
int n,m,a[maxn],now;
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
int main(){
read(n),read(m),now=m;
for(rg int i=1;i<=n;i++)read(a[i]),a[i]=a[i]%m,now=gcd(now,a[i]);
if(!now)return printf("%d\n%d\n",1,0),0;
printf("%d\n",m/now);
for(rg int i=0;i<m/now;i++)printf("%d ",i*now);
}
D.Mars rover
确实也不难,差不多是一眼秒的题
由于每次都只修改一个点,然后我们发现对于这次修改,只要它到根的路径上只要有一个点不受这次变化的影响,那么根节点就不会受到影响。
那么我们可以发现这个过程可以从上往下做,对于每一个有两个儿子的点,如果它的左儿子取反后它的值不受影响,那么根节点也不会受到影响,也就是说它的左儿子这个子树内的所有叶子节点的取反对根节点都没有影响,右儿子亦然
这样我们就可以\(O(n)\)扫一遍先算出初始树上的节点权值,然后在\(O(n)\)扫一遍得出每个叶子节点对根节点是否有影响就行了
总时间复杂度\(O(n)\)
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
void read(int &x) {
char ch; bool ok;
for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=1e6+10;
int n,m,f[maxn],ans,a[maxn],l[maxn][3];
char s[maxn][5];
bool vis[maxn];
void dfs(int x){
if(l[x][0]==1){
dfs(l[x][1]);
f[x]=!f[l[x][1]];
}
else if(l[x][0]==2){
dfs(l[x][1]),dfs(l[x][2]);
if(s[x][1]=='A')f[x]=f[l[x][1]]&f[l[x][2]];
if(s[x][1]=='O')f[x]=f[l[x][1]]|f[l[x][2]];
if(s[x][1]=='X')f[x]=f[l[x][1]]^f[l[x][2]];
}
}
void solve(int x,int now){
vis[x]=now;
if(l[x][0]==1)solve(l[x][1],now);
else if(l[x][0]==2){
if(s[x][1]=='A'){
int now1=(!f[l[x][1]])&f[l[x][2]],now2=(!f[l[x][2]])&f[l[x][1]];
if(now1!=f[x])solve(l[x][1],now);
else solve(l[x][1],0);
if(now2!=f[x])solve(l[x][2],now);
else solve(l[x][2],0);
}
if(s[x][1]=='O'){
int now1=(!f[l[x][1]])|f[l[x][2]],now2=(!f[l[x][2]])|f[l[x][1]];
if(now1!=f[x])solve(l[x][1],now);
else solve(l[x][1],0);
if(now2!=f[x])solve(l[x][2],now);
else solve(l[x][2],0);
}
if(s[x][1]=='X'){
int now1=(!f[l[x][1]])^f[l[x][2]],now2=(!f[l[x][2]])^f[l[x][1]];
if(now1!=f[x])solve(l[x][1],now);
else solve(l[x][1],0);
if(now2!=f[x])solve(l[x][2],now);
else solve(l[x][2],0);
}
}
}
int main(){
read(n);
for(rg int i=1;i<=n;i++){
scanf("%s",s[i]+1);
if(s[i][1]=='A'||s[i][1]=='O'||s[i][1]=='X')
l[i][0]=2,read(l[i][1]),read(l[i][2]);
else if(s[i][1]=='N')l[i][0]=1,read(l[i][1]);
else l[i][0]=0,read(f[i]);
}
dfs(1),solve(1,1);
for(rg int i=1;i<=n;i++)
if(s[i][1]=='I'){
if(vis[i])printf("%d",!f[1]);
else printf("%d",f[1]);
}
}
Codeforces Round #499 (Div. 1)部分题解(B,C,D)的更多相关文章
- Codeforces Round #499 (Div. 1)
Codeforces Round #499 (Div. 1) https://codeforces.com/contest/1010 为啥我\(\rm Div.1\)能\(A4\)题还是\(\rm s ...
- Codeforces Round #499 (Div. 2)
Codeforces Round #499 (Div. 2) https://codeforces.com/contest/1011 A #include <bits/stdc++.h> ...
- # Codeforces Round #529(Div.3)个人题解
Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...
- Codeforces Round #557 (Div. 1) 简要题解
Codeforces Round #557 (Div. 1) 简要题解 codeforces A. Hide and Seek 枚举起始位置\(a\),如果\(a\)未在序列中出现,则对答案有\(2\ ...
- Codeforces Round #499 (Div. 1) F. Tree
Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...
- Codeforces Round #540 (Div. 3) 部分题解
Codeforces Round #540 (Div. 3) 题目链接:https://codeforces.com/contest/1118 题目太多啦,解释题意都花很多时间...还有事情要做,就选 ...
- Codeforces Round #538 (Div. 2) (A-E题解)
Codeforces Round #538 (Div. 2) 题目链接:https://codeforces.com/contest/1114 A. Got Any Grapes? 题意: 有三个人, ...
- Codeforces Round #531 (Div. 3) ABCDEF题解
Codeforces Round #531 (Div. 3) 题目总链接:https://codeforces.com/contest/1102 A. Integer Sequence Dividin ...
- Codeforces Round #527 (Div. 3) ABCDEF题解
Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...
随机推荐
- spring学习-1
spring框架的组件结构图 IOC(Inversion of Control):反转控制,思想是反转资源获取方向,传统的资源查找方向是组件向容器发起请求资源查找,作为回应,容器适时的返回资源,IOC ...
- 关于python包,模块,.pyc文件和文件导入理解
参考文献 一.包 包是一个文件夹,用来存放模块和子包. 包里一般会有一个__init__.py的文件(也可以没有). 包里会有一个__pycache__文件夹,存放.py文件经解释器解释后的中间字节码 ...
- 3_observer
#Observer 成就系统 achievements system 玩家完成某种成就后,通知监督者,监督者做出相应出来 ``` //简单来说就是事件触发的时候, 通知监督者 class Observ ...
- codeforces 612D The Union of k-Segments (线段排序)
D. The Union of k-Segments time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- User-Agent 及其构造
url = ... user_agent = ... headers = {'User-Agent' : user_agent} req = requests.request(url=url, hea ...
- 系列文章--Node.js学习笔记系列
Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...
- Hadoop问题集锦
1.Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup 使用Spark进行处理的时候 ...
- BZOJ1217:[HNOI2003]消防局的设立
我对贪心的理解:https://www.cnblogs.com/AKMer/p/9776293.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...
- POJ1995:Raising Modulo Numbers
二进制前置技能:https://www.cnblogs.com/AKMer/p/9698694.html 题目传送门:http://poj.org/problem?id=1995 题目就是求\(\su ...
- bean validator - Hibernate validator
在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间.成本.质 ...