• 20191028 Codeforces Round #534 (Div. 1)


    菜是原罪。

    英语不好更是原罪。


    (mathrm{A - Grid game})

    题解

    (4 imes 4) 的格子,两种放法。

    发现这两种在一起时候很讨厌,于是强行拆分这个格子

    上面 (2 imes 4) 给横的,下面给竖的。

    (mathrm{Code})

    #include<bits/stdc++.h>
    using namespace std;
    
    template <typename Tp>
    void read(Tp &x){
    	x=0;char ch=1;int fh;
    	while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
    	if(ch=='-') ch=getchar(),fh=-1;
    	else fh=1;
    	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
    	x*=fh;
    }
    
    int n;
    char s[1007];
    
    int a[8][8];
    
    void del(){
    	for(int i=1;i<=4;i++){
    		int sum=0;
    		for(int j=1;j<=4;j++){
    			sum+=a[i][j];
    		}
    		if(sum==4){
    			for(int j=1;j<=4;j++) a[i][j]=0;
    		}
    	}
    }
    
    int ex1[3][3],ex2[3][3];
    
    void solve(int x){
    	if(x==1){
    		if(!ex1[1][1]){
    			printf("%d %d
    ",1,1);
    			ex1[1][1]=1;
    		}
    		else if(!ex1[1][2]){
    			printf("%d %d
    ",1,3);
    			ex1[1][2]=1;
    		}
    		else if(!ex1[2][1]){
    			printf("%d %d
    ",2,1);
    			ex1[2][1]=1;
    		}
    		else if(!ex1[2][2]){
    			printf("%d %d
    ",2,3);
    			ex1[2][2]=1;
    		}
    		if(ex1[1][1]&&ex1[1][2]) ex1[1][1]=ex1[1][2]=0;
    		if(ex1[2][1]&&ex1[2][2]) ex1[2][1]=ex1[2][2]=0;
    	}
    	else{
    		if(!ex2[1][1]){
    			printf("%d %d
    ",3,1);
    			ex2[1][1]=1;
    		}
    		else if(!ex2[1][2]){
    			printf("%d %d
    ",3,2);
    			ex2[1][2]=1;
    		}
    		else if(!ex2[2][1]){
    			printf("%d %d
    ",3,3);
    			ex2[2][1]=1;
    		}
    		else if(!ex2[2][2]){
    			printf("%d %d
    ",3,4);
    			ex2[2][2]=1;
    		}
    		if(ex2[1][1]&&ex2[1][2]&&ex2[2][1]&&ex2[2][2]) ex2[1][1]=ex2[1][2]=ex2[2][1]=ex2[2][2]=0000;
    //		if(ex1[1][1]&&ex1[1][2]) ex1[1][1]=ex1[1][2]=0;
    //		if(ex1[2][1]&&ex1[2][2]) ex1[2][1]=ex1[2][2]=0;
    	}
    }
    
    int main(){
    	cin>>(s+1);
    	n=strlen(s+1);memset(a,1,sizeof(a));
    	for(int i=1;i<=4;i++) for(int j=1;j<=4;j++) a[i][j]=0;
    	for(int qwq=1;qwq<=n;qwq++){
    		int k=s[qwq]-'0';
    		solve(k);
    	}
    	return 0;
    }
    

    (mathrm{B - Game with modulo})

    题解

    真是一个神仙交互题。

    首先需要想到一个结论,函数 (f(x)=x mod a) 是一个周期函数, (T=a)

    这个题目一开始的想法就是二分,但是由于 (a) 取模的问题,不太满足可二分性。

    但是在一个周期内,是可以二分的。

    于是倍增确定 (a) 的取值范围,二分答案。

    (60) 次询问卡的紧紧的...

    cyz同学问了 (61) 次...

    (mathrm{Code})

    #include<bits/stdc++.h>
    using namespace std;
    
    template <typename Tp>
    void read(Tp &x){
    	x=0;char ch=1;int fh;
    	while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
    	if(ch=='-') ch=getchar(),fh=-1;
    	else fh=1;
    	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
    	x*=fh;
    }
    
    string s;
    
    int main(){
    	while(1){
    		cin>>s;
    		if(s=="end") break;
    		if(s=="mistake") break;
    		int l=0,r=1;
    		while(1){
    			printf("? %d %d
    ",l,r);
    			fflush(stdout);
    			cin>>s;
    			if(s=="y") l=r,r*=2;
    			else break;
    		}
    		int ans;
    		while(l<r-1){
    			int mid=(l+r)>>1;
    			printf("? %d %d
    ",mid,l);
    			fflush(stdout);
    			cin>>s;
    			if(s=="x") l=mid;
    			else r=mid;
    		}
    		++l;
    		printf("! %d
    ",l);
    		fflush(stdout);
    	}
    	return 0;
    }
    

    (mathrm{C - Johnny Solving})

    题解

    首先 STO hkk。

    hkk:由于这个和环有关,所以可以想到生成树。

    随便画个生成树,可以得到如果有深度超过 (frac{n}{k}) 的点,则肯定有成立的路径。

    否则叶子结点一定超过 (k) 个。

    又有每个点的度超过 (3) ,则在 (dfs) 树上至少有两条返祖边,构成 (3) 个环,且至少有一个长度不是 (3) 的倍数。

    于是构建出 (dfs) 树,搞一搞即可。

    xxxxx

    即得易见平凡,由上自证显然,留作习题答案略,读者自证不难。

    反之亦然同理,推论自然成立,略去过程Q.E.D,由上可知证毕。

    xxxxx

    (mathrm{Code})

    #include<bits/stdc++.h>
    using namespace std;
    
    template <typename Tp>
    void read(Tp &x){
    	x=0;char ch=1;int fh;
    	while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
    	if(ch=='-') ch=getchar(),fh=-1;
    	else fh=1;
    	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
    	x*=fh;
    }
    
    const int maxn=250007;
    
    int n,m,k;
    int lim;
    
    int Head[maxn],Next[1000007],to[1000007],tot=1;
    
    void add(int x,int y){
    	to[++tot]=y,Next[tot]=Head[x],Head[x]=tot;
    }
    
    int dfn[maxn],dep[maxn];
    int fa[maxn],mx,pos;
    
    bool vis[maxn];
    
    vector<int>lea;
    
    void dfs(int x,int f,int dp){
    	fa[x]=f,dep[x]=dp,vis[x]=1;
    	if(dep[x]>mx){
    		mx=dep[x],pos=x;
    		if(mx>=(n+k-1)/k){
    			puts("PATH");
    			printf("%d
    ",mx);
    			int p=x;
    			while(p){
    				printf("%d ",p);p=fa[p];
    			}
    			puts("");exit(0);
    		}
    	}
    	bool res=false;
    	for(int i=Head[x];i;i=Next[i]){
    		int y=to[i];
    		if(vis[y]) continue;
    		dfs(y,x,dp+1);res=true;
    	}
    	if(!res) lea.push_back(x);
    }
    
    bool comp(int a,int b){
    	return dep[a]<dep[b];
    }
    
    int main(){
    	read(n);read(m);read(k);
    	if(n%k) lim=n/k;
    	else lim=n/k+1;
    	for(int i=1,x,y;i<=m;i++){
    		read(x);read(y);
    		add(x,y);add(y,x);
    	}
    	dfs(1,0,1);
    	puts("CYCLES");
    	bool res;
    	for(int i=0;i<k;i++){
    		int x=lea[i];
    		res=false;vector<int>v;v.clear();
    		for(int i=Head[x];i;i=Next[i]){
    			int y=to[i];
    			if(v.size()!=2) v.push_back(y);
    			if(y==fa[x]||(dep[x]-dep[y]+1)%3==0) continue;
    			printf("%d
    ",dep[x]-dep[y]+1);
    			int p=x;
    			while(p!=fa[y]){
    				printf("%d ",p);
    				p=fa[p];
    			}
    			puts("");
    			res=1;break;
    		}
    		if(res) continue;
    		sort(v.begin(),v.end(),comp);
    		printf("%d
    ",dep[v[1]]-dep[v[0]]+2);
    		int a=v[0],b=v[1];
    		while(fa[a]!=fa[b]) printf("%d ",b),b=fa[b];
    		printf("%d %d
    ",b,x);
    	}
    	return 0;
    }
    

    (mathrm{D-Professional layer})

    题解

    一个萌萌萌新的看题解心路...

    截止2019.10.30 17:45,我还没有A掉这道题...

    (mathrm{Code})

    
    

    (mathrm{E-Radix sum})

    神仙多项式题,不会。

  • 相关阅读:
    linux清理内存
    华为代码注释标准
    Spring缓存机制的理解
    jQuery实现动态分割div—通过拖动分隔栏实现上下、左右动态改变左右、上下两个相邻div的大小
    模仿iframe框架,由分隔栏动态改变左右两侧div大小———基于jQuery
    js实现由分隔栏决定两侧div的大小—js动态分割div
    java基于socket的简单聊天系统
    中国移动归属地区号大全
    将本地光盘做成yum源
    windows下设置计划任务自动执行PHP脚本
  • 原文地址:https://www.cnblogs.com/liubainian/p/11759273.html
Copyright © 2020-2023  润新知