• Codeforces Round #644 (Div. 3) A~G


    A - Minimal Square

    题意:

    给两个长为n,宽为m的矩形,问两个矩形不重叠,能被多小的正方形覆盖,求出最小的正方形面积

    思路:
    先比较2n,2m哪个小,再比较,2n<=m or 2m<n的情况

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 1000000007
    #define ios ios::sync_with_stdio(false)
    const int maxn=1e6+10;
    const int mo=1e9;
    ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
    const double pi=acos(-1.0);
    int t;
    int n,m;
    int main() {
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&m);
            int a=min(n*2,m*2);
            if(n*2<=m){
                a=m;
            }
            if(m*2<=n){
                a=n;
            }
            printf("%d
    ",a*a);
        }
        return 0;
    }
    

    B - Honest Coach

    水题就放代码了,就是求排完序之后两个数之间的最小差

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 1000000007
    #define ios ios::sync_with_stdio(false)
    const int maxn=1e3+10;
    const int mo=1e9;
    ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
    const double pi=acos(-1.0);
    int t;
    int n,m;
    int a[maxn];
    int main() {
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            for(it i=0;i<n;i++){
                scanf("%d",&a[i]);
            }
            sort(a,a+n);
            int minn=abs(a[1]-a[0]);
            for(it i=2;i<n;i++){
                minn=min(minn,a[i]-a[i-1]);
            }
            printf("%d
    ",minn);
        }
        return 0;
    }
    
    

    C - Similar Pairs

    被题意忽悠了一下,仔细一下,就是数组有多少奇偶,
    如果奇数个数是偶数的就是YES(数组一定是偶数,所以偶数个数也是偶数,成对的),如果奇偶不是偶数,排一下序,看看两数差有没有1的,有1是YES,反之NO

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 1000000007
    #define ios ios::sync_with_stdio(false)
    const int maxn=1e2+10;
    const int mo=1e9;
    ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
    const double pi=acos(-1.0);
    int t;
    int n,m;
    int a[maxn];
    int main() {
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            int ge=0;
            for(it i=0;i<n;i++){
                scanf("%d",&a[i]);
                if(a[i]&1){ge++;}
            }
            if(ge%2==0){printf("YES
    ");}
            else{
                sort(a,a+n);
                int f=0;
                for(int i=1;i<n;i++){
                    if(a[i]-a[i-1]==1){
                        f=1;printf("YES
    ");break;
                    }
                }
                if(!f){printf("NO
    ");}
            }
        }
        return 0;
    }
    

    D - Buying Shovels

    题意: 给一个n和k,求1~k之间哪个数字整除n,是最小的值,求出那个值

    自己脑瘫写题
    写了tle之后,开始wa爆炸了
    其实很简单,就判断是否是素数,
    然后从小开始除就好了。。。

    有点害怕被hack,感觉我那个复杂度刚好要被hack,就先不放代码了

    upd,我自己找到数据hack掉了

    花了点时间看了别人的代码,觉得我比赛时候可能wa傻了,sqrt都能忘。这个应该不会被hack的

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 1000000007
    #define ios ios::sync_with_stdio(false)
    const int maxn=1e2+10;
    const int mo=1e9;
    ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
    const double pi=acos(-1.0);
    int t;
    int n,m,a,b;
    
    int main(){
        ios;
    	cin.tie(0);
    	cout.tie(0);
    	int t;
    	cin>>t;
    	while(t--)
    	{
    		int n,k;
    		cin>>n>>k;
    		int ans=inf;
    		for(int i=1;i*i<=n;i++)
    			if(n%i==0)
    			{
    				if(n/i<=k) ans=min(ans,i);
    				if(i<=k) ans=min(ans,n/i);
    			}
    		cout<<ans<<endl;
    	}
        return 0;
    }
    
    

    E - Polygon

    按照题意的意思就是找这个点是否为1 ,如果为1 他的右边和下面必有一个1,除非在右边界或者下边界。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 1000000007
    #define ios ios::sync_with_stdio(false)
    const int maxn=1e2+10;
    const int mo=1e9;
    ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
    const double pi=acos(-1.0);
    int t;
    int n,k;
    char s[55][55];
    int main() {
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            for(it i=0;i<n;i++){
                scanf("%s",s[i]);
            }
            int f=1;
            for(it i=0;i<n-1;i++){
                for(it j=0;j<n-1;j++){
                    if(s[i][j]=='1' && s[i+1][j]=='0' && s[i][j+1]=='0'){f=0;break;}
                }
                if(!f){break;}
            }
            if(f){printf("Yes
    ");}
            else{printf("No
    ");}
        }
        return 0;
    }
    

    F - Spy-string

    题意:
    给长度小于10的字符串,个数小于10,问能不能有这么一个长度一样的字符串,与每个字符串比较,只有一个或者0个不一样的字母

    思路
    暴搜

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 1000000007
    #define ios ios::sync_with_stdio(false)
    const int maxn=1e2+10;
    const int mo=1e9;
    ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
    const double pi=acos(-1.0);
    int t;
    int n,m;
    char s[15][15];
    int a[15][15];
    int vis[15],f=1;
    string ans;
    void dfs(int p,string ss){
        if(f==0){return;}
        if(p==m){f=0;ans=ss;return;}
        for(it i=0;i<n;i++){
            int ge=0;
            for(it j=0;j<=p;j++){
                if(ss[j]!=s[i][j]){ge++;}
            }
            if(ge>=2){return;}
        }
        if(p==m-1){dfs(m,ss);}
        else{
            for(it i=0;i<n;i++){
                string kk=ss;kk+=s[i][p+1];
                dfs(p+1,kk);
            }
        }
    }
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&m);
            for(it i=0;i<n;i++){
                scanf("%s",s[i]);vis[i]=0;
            }
            if(m==1){printf("a
    ");continue;}
            f=1;
            for(it i=1;i<n;i++){
                int ge=0;
                for(it j=0;j<m;j++){
                    if(s[0][j]!=s[i][j]){ge++;}
                }
                if(ge>=4){f=0;break;}
            }
            if(!f){printf("-1
    ");}
            else{
                  for(it i=0;i<n;i++){
                    string k="";k+=s[i][0];
                    dfs(0,k);
                  }
                  if(f==1){printf("-1
    ");}
                  else{
                      cout<<ans<<endl;
                  }
            }
        }
        return 0;
    }
    

    G - A/B Matrix

    题意:
    给一个n,m的矩阵,再给a,b,表示每行有a个1,每列有b个1,有这样的矩阵吗,有输出,没有NO

    思路:
    n * a!= b * m的就是no

    其他就进行构造就行了

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 1000000007
    #define ios ios::sync_with_stdio(false)
    const int maxn=1e2+10;
    const int mo=1e9;
    ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
    const double pi=acos(-1.0);
    int t;
    int n,m,a,b;
    int g[100][100];
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d%d%d%d",&n,&m,&a,&b);
            if(n*a!=m*b){printf("NO
    ");continue;}
            mem(g,0);
            for(int i=0,j=0;i<n;++i){
    			for(int k=a;k;j++,j%=m,--k){
    				g[i][j]=1;
    			}
    		}
            printf("YES
    ");
            for(int i=0;i<n;++i){
                for(int j=0;j<m;++j) printf("%d",g[i][j]);
                printf("
    ");
            }
    		
        }
        return 0;
    }
    
    

    待补H

  • 相关阅读:
    2017.9.29 ubuntu安装mysql服务
    如何在树莓派上安装mjpeg-streamer(针对摄像头为UVC的)
    2016.9.22感想及收获
    GL-iNET路由器如何安装DDNS服务
    2016.7.5 记项目过程中犯的一个从未察觉的低级错误
    C++课程笔记 Lesson 01
    关于Jlink在linux系统下连接错误的解决方法
    如何通过命令提示符进入MySQL服务器
    java面试题
    hive面试题
  • 原文地址:https://www.cnblogs.com/luoyugongxi/p/12953777.html
Copyright © 2020-2023  润新知