• Educational Codeforces Round 68 (Rated for Div. 2)补题


    A. Remove a Progression

    签到题,易知删去的为奇数,剩下的是正偶数数列。

    #include<iostream>
    using namespace std;
    
    int T;
    int n,x;
    
    int main(){
    	cin>>T;
    	while(T--){
    		cin>>n>>x;
    		cout<<x * 2<<endl;
    	}
    	return 0;
    }
    

      

    B. Yet Another Crosses Problem

    n*m存在上界,以一维数组储存二维数组。统计各个行(列)的白块数量,找出其中数量最少的行(列)(注:不一定只有一行(列)的白块最少)。输出结果为最小行数与最小列数之和。

    仍遍历满足上述条件的行和列的交点,若其为白块,则输出结果需减去重复点。

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int L = 400000+500;
    int q,n,m;
    char M[L];
    int ans;
    int NN[L],NM[L];
    
    
    int f(){
    	for(int i =0;i<n;++i) NN[i] = 0;
    	for(int i = 0;i<m;++i) NM[i] = 0;
    	for(int i = 0;i<n;++i)
    		for(int j = 0;j<m;++j)
    			if(M[i*m+j] == '.') NN[i]++;
    	for(int j = 0;j<m;++j)
    		for(int i = 0;i<n;++i)
    			if(M[i*m+j] == '.') NM[j]++;
    	int minn = NN[0];
    	int minm = NM[0];
    	for(int i =0;i<n;++i) minn = min(minn,NN[i]);
    	for(int i =0;i<m;++i) minm = min(minm,NM[i]);
    	int ans = minn + minm;
    	for(int i = 0;i<n;++i)
    		for(int j = 0;j<m;++j)
    			if(NN[i] == minn&&NM[j] == minm)
    				if(M[i*m+j] == '.') return ans-1;
    	
    	return ans;
    }
    int main(){
    	cin>>q;
    	while(q--){
    		cin>>n>>m;
    		for(int i =0;i<n;++i)
    			cin>>(M + i*m);
    		ans = f();
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    

     

    C. From S To T

    通过判断串s 是否由串t 退化而来,初步确定答案。

    之后判断串t 删去与串s 对应的字符后是否可以由串p 的元素所构成。

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int L = 100+10;
    int q;
    char s[L],t[L],p[L];
    int T[L];
    int al[28];
    int main(){
        cin>>q;
        while(q--){
            cin>>s>>t>>p;
            bool ans = true;
            for(int i =0;i<27;++i) al[i] = 0;
            for(int i =0;i<L;++i) T[i] = 0;
            for(int i =0;p[i]!='';++i)
                al[p[i] - 'a']++;
            int pj = 0;
            bool flag = false;
            for(int i = 0;s[i]!='';++i){
                flag = false;
                for(int j = pj;j<strlen(t);++j){
                    if(s[i] == t[j]){
                        T[j] = 1;
                        flag = true;
                        pj = j+1;
                        break;
                    }
                }
                if(!flag){
                    ans = false;
                    break;
                }
            }
            if(!ans){
                cout<<"NO"<<endl;
                continue;
            }
            for(int i = strlen(t);i>=0;--i){
                if(T[i] == 1){
                    for(int j = i;t[j]!='';++j)
                        t[j] = t[j+1];
                }
            }
            for(int i = 0;t[i]!='';++i){
                if(al[t[i] - 'a'] > 0){
                    al[t[i] - 'a']--;
                }
                else{
                    ans = false;
                    break;
                }
            }
            if(ans)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
        return 0;
    }

    D. 1-2-K Game

    博弈,找规律。情况可分为

    ①n < k

    ②n>=k 且 k%3=0

    ③n>=k 且 k%3≠0

    对情况①③,若n%3=0先手必败,反之必胜。

    对情况② 令 n = n%(k+1) 条件一:若n =k,先手必胜 ;条件二:若n%3==0,先手必败,反之必胜。条件一优先级高于条件二。

    #include<iostream>
    using namespace std;
    
    int T;
    int n,k;
    
    int main(){
        cin>>T;
        while(T--){
            cin>>n>>k;
            if( n < k ){
                n%=3;
                if(n == 0) cout<<"Bob"<<endl;
                else cout<<"Alice"<<endl;
            }
            else{
                if(k %3 == 0){
                    n %= k + 1;
                    if(n == k)
                        cout<<"Alice"<<endl;
                    else{
                        n%=3;
                        if(n == 0) cout<<"Bob"<<endl;
                        else cout<<"Alice"<<endl;
                    }
                }
                else{
                    n%=3;
                    if(n == 0) cout<<"Bob"<<endl;
                    else cout<<"Alice"<<endl;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    python中关于with以及contextlib的使用
    Python之Redis操作
    Python操作memecache
    COM组件技术名称解释
    C++11-新增正则表达式
    BSTR与char*、cstring、CComBSTR的转换
    ATL字符宏使用以及代码测试
    获取与一个磁盘的组织以及剩余空间容量有关的信息以及代码测试
    关于cstring ->string-> const char * 用U2A一步转换 错误的内存问题
    cstring、string、wstring、int、char*、tchar、 int、dword等相互转换代码输出测试
  • 原文地址:https://www.cnblogs.com/tea-egg/p/11191551.html
Copyright © 2020-2023  润新知