zoukankan      html  css  js  c++  java
  • Codeforces Round #685 (Div. 2)

    CF1451A Subtract or Divide

    洛谷传送门
    CF1451A


    分析

    考虑偶数可以直接除以非2的部分剩下2再减1,
    奇数可以减1转化为偶数,1和2需要特判


    代码

    #include <cstdio>
    #include <cctype>
    #define rr register
    using namespace std;
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans;
    }
    signed main(){
    	for (rr int T=iut();T;--T,putchar(10)){
    		rr int n=iut();
    		if (n<4) putchar(47+n);
    		    else putchar(50+(n&1));
    	}
    	return 0;
    }
    

    CF1451B Non-Substring Subsequence

    洛谷传送门
    CF1451B


    分析

    可以发现只要 ([1,l)) 出现 (s[l])((r,n]) 出现 (s[r]) 一定有解
    因为只要有一个位置不同就可以了


    代码

    #include <cstdio>
    #include <cctype>
    #define rr register
    using namespace std;
    const int N=111; int n,m,s[2][N],a[N],p[2][N];
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans;
    }
    signed main(){
    	for (rr int T=iut();T;--T){
    		n=iut(),m=iut(),s[0][n+1]=s[1][n+1]=0;
    		for (rr int i=1;i<=n;++i) scanf("%1d",&a[i]);
    		for (rr int i=1;i<=n;++i){
    			p[0][i]=p[0][i-1],p[1][i]=p[1][i-1];
    			if (a[i]) p[1][i]=1; else p[0][i]=1;
    		}
    		for (rr int i=n;i>=1;--i){
    			s[0][i]=s[0][i+1],s[1][i]=s[1][i+1];
    			if (a[i]) s[1][i]=1; else s[0][i]=1;
    		}
    		for (rr int i=1;i<=m;++i){
    			rr int l=iut(),r=iut();
    			puts((p[a[l]][l-1]|s[a[r]][r+1])?"YES":"NO");
    		}
    	}
    	return 0;
    }
    

    CF1451C String Equality

    洛谷传送门
    CF1451C


    分析

    考虑可以先将字符串 (a) 的字符种类和数量完全相同,再交换。

    直接从字母 (a) 开始模拟是否可以将多余的字母改变即可


    代码

    #include <cstdio>
    #include <cctype>
    #define rr register
    using namespace std;
    const int N=1000011;
    int flag,n,k,c1[26],c2[26];
    char S1[N],S2[N];
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans; 
    }
    signed main(){
    	for (rr int T=iut();T;--T){
    		n=iut(),k=iut(),scanf("%s%s",S1+1,S2+1),flag=0;
    		for (rr int i=0;i<26;++i) c1[i]=c2[i]=0;
    		for (rr int i=1;i<=n;++i) ++c1[S1[i]-97],++c2[S2[i]-97];
    		for (rr int i=0;i<26;++i)
    		if (c1[i]<c2[i]) {puts("No"),flag=1; break;}
    		    else if (c1[i]>c2[i]){
    		    	if ((c1[i]-c2[i])%k) {puts("No"),flag=1; break;}
    		    	c1[i+1]+=c1[i]-c2[i];
    		}
    		if (!flag) puts("Yes");
    	}
    	return 0;
    }
    

    CF1451D Circle Game

    洛谷传送门
    CF1451D


    分析

    首先只要把 (d,k) 放缩 就可以转化为半径为 (r) 每次移动一个单位长度
    找到直线 (y=x) 上最远的格点,因为先手无论怎么走后手都能移动到该直线上。
    如果该格点还能往上或往右走则先手必胜,否则后手必胜。


    代码

    #include <cstdio>
    #include <cctype>
    #include <cmath>
    #define rr register
    using namespace std;
    const double gh2=sqrt(2);
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans;
    }
    signed main(){
    	for (rr int T=iut();T;--T){
    		rr double r=iut()*1.0/iut();
    		rr long long mx=r/gh2;
    		if (mx*mx+(mx+1)*(mx+1)>r*r) puts("Utkarsh");
    		    else puts("Ashish");
    	}
    	return 0;
    }
    

    CF1451E2 Bitwise Queries (Hard Version)

    洛谷传送门
    CF1451E2


    分析

    先异或 (n-1) 次这样只要确定一个数就可以确定其它的数。

    如果存在两个相同的数,那么直接把这两个数按位与即可。

    否则异或值最小的数与单独拎出来的数最多有一个二进制位不同,还是按位与然后取个并集


    代码

    #include <cstdio>
    #include <cctype>
    #include <algorithm>
    #define rr register
    using namespace std;
    const int N=66011; int a[N],n,rk[N],ans[N];
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans; 
    }
    bool cmp(int x,int y){return a[x]<a[y];}
    signed main(){
    	n=iut();
    	for (rr int i=1;i<n;++i){
    		printf("XOR %d %d
    ",i,n);
    		fflush(stdout);
    		a[i]=iut(),rk[i]=i;
    	}
    	sort(rk+1,rk+n,cmp);
    	for (rr int i=1;i<n-1;++i)
    	if (a[rk[i]]==a[rk[i+1]]){
    		printf("AND %d %d
    ",rk[i],rk[i+1]);
    		fflush(stdout);
    		ans[rk[i]]=ans[rk[i+1]]=iut();
    		ans[n]=a[rk[i]]^ans[rk[i]];
    		for (rr int j=1;j<n;++j) ans[rk[j]]=ans[n]^a[rk[j]];
    		printf("! ");
    		for (rr int j=1;j<=n;++j) printf("%d%c",ans[j],j==n?10:32);
    		fflush(stdout); 
    		return 0;
    	}
    	printf("AND %d %d
    ",rk[1],n),fflush(stdout),ans[n]|=iut();
    	printf("AND %d %d
    ",rk[2],n),fflush(stdout),ans[n]|=iut();
    	for (rr int i=1;i<n;++i) ans[rk[i]]=ans[n]^a[rk[i]];
        printf("! ");
    	for (rr int i=1;i<=n;++i) printf("%d%c",ans[i],i==n?10:32);
    	fflush(stdout);
    	return 0;
    }
    

    CF1451F Nullify The Matrix

    洛谷传送门
    CF1451F


    分析

    考虑必败的状态就是所有位置都为0,记录横纵坐标之和为 (x) 的数的异或值为 (s_x)

    如果存在一个位置的 (s_x) 为0,那么可以将状态转换为所有的 (s_x) 均为0,反之亦然。

    所以如果所有的 (s_x) 都为0 先手必败,否则先手必胜


    代码

    #include <cstdio>
    #include <cctype>
    #define rr register
    using namespace std;
    int n,m,a[211],flag;
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans;
    }
    signed main(){
    	for (rr int T=iut();T;--T){
    		n=iut(),m=iut(),flag=1;
    		for (rr int i=1;i<=n;++i)
    		for (rr int j=1;j<=m;++j)
    		    a[i+j-1]^=iut();
    		for (rr int i=1;i<n+m&&flag;++i)
    		    if (a[i]) {puts("Ashish"),flag=0;}
    		if (flag) puts("Jeel");
    		for (rr int i=1;i<n+m;++i) a[i]=0;
    	}
    	return 0;
    } 
    
  • 相关阅读:
    docker 学习操作记录 4
    docker 学习操作记录 1
    centos 旧版本镜像
    zabbix 搭建 mysql 连接报错
    js判断是否为手机或是pc
    滚动翻页vue
    note
    Vue-cli 鼠标监听事件之滚动条
    adobe Keychain mac
    HTML协义代码
  • 原文地址:https://www.cnblogs.com/Spare-No-Effort/p/15401481.html
Copyright © 2011-2022 走看看