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

    A

    思路是尽量折返走,但由于左右步数、上下步数的差值,所以最终位置也必须合法

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    int t,a,b,c,d,x,y;
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>t;
        while(t--) {
            cin>>a>>b>>c>>d>>x>>y;
            int x1,y1,x2,y2;
            cin>>x1>>y1>>x2>>y2;
            if(a-b>x-x1||b-a>x2-x||c-d>y-y1||d-c>y2-y||((a+b)&&x1==x2)||((c+d)&&y1==y2)) cout<<"No";
            else cout<<"Yes";
            cout<<endl;
        }
    }
    
    

    B

    按最小质因子排序,然后贪心能选就选即可

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 1005;
    
    struct item {
        int id,val,t;
        bool operator < (const item &b) {
            return t<b.t;
        }
    } it[N];
    int t,n,a[N],b[N],c[N],d[N];
    
    signed main() {
        cin>>t;
        for(int i=2;i<=1000;i++) {
            for(int j=2;j<=i;j++) if(i%j==0) {
                b[i]=j;
                break;
            }
        }
        while(t--) {
            cin>>n;
            for(int i=1;i<=n;i++) cin>>a[i];
            for(int i=1;i<=n;i++) {
                it[i]={i,a[i],b[a[i]]};
            }
            sort(it+1,it+n+1);
            for(int i=1;i<=n;i++) a[i]=it[i].val;
            for(int i=1;i<=n;i++) c[i]=0;
            for(int i=1;i<=15;i++) {
                vector <int> vec;
                for(int j=1;j<=n;j++) if(c[j]==0) {
                    int fg=1;
                    for(int k:vec) if(__gcd(k,a[j])==1) fg=0;
                    if(fg) vec.push_back(a[j]), c[j]=i;
                }
                if(vec.size()==0) {
                    cout<<i-1<<endl;
                    for(int j=1;j<=n;j++) d[it[j].id]=c[j];
                    for(int j=1;j<=n;j++) cout<<d[j]<<" ";
                    cout<<endl;
                    break;
                }
            }
        }
    }
    
    

    C

    构成串的 (n/k) 个单元必须都是回文串,暴力枚举半个单元,每一位相互独立,确定了半个单元后,整个串也就确定了

    #include <bits/stdc++.h>
    using namespace std;
    
    int t,n,k;
    const int N = 200005;
    char s[N];
    int a[N][26];
    
    signed main() {
        cin>>t;
        while(t--) {
            cin>>n>>k>>s;
            for(int i=0;i<n;i++) for(int j=0;j<26;j++) a[i][j]=0;
            for(int i=0;i<n;i++) a[i%k][s[i]-'a']++;
            int ans=0;
            for(int i=0;i<k/2;i++) {
                int tans=1e9;
                for(int j=0;j<26;j++) {
                    int tmp=2*(n/k)-a[i][j]-a[k-i-1][j];
                    tans=min(tans,tmp);
                }
                ans+=tans;
            }
            if(k&1) {
                int tans=1e9;
                int i=k/2;
                for(int j=0;j<26;j++) {
                    int tmp=(n/k)-a[i][j];
                    tans=min(tans,tmp);
                }
                ans+=tans;
            }
            cout<<ans<<endl;
        }
    }
    
    

    D

    构造 (2 imes 3) 矩阵如下(二进制)

    [egin{matrix} 11 & 01 & 00 \ 10 & 11 & 01 end{matrix} ]

    这样可以使得答案的差为 (1)。将最后一位替换成需要的数即可

    #include <bits/stdc++.h>
    using namespace std;
    
    int k;
    
    int main() {
        cin>>k;
        if(k==0) cout<<"1 1"<<endl<<"1"<<endl;
        else {
            int t=1;
            while(t<=k) t*=2;
            cout<<"2 3"<<endl<<t+k<<" "<<k<<" "<<0<<endl<<t<<" "<<t+k<<" "<<k<<endl;
        }
    }
    
    

    E

    首先观察到,如果 (nm) 是奇数,一定合法;如果 (nm) 是偶数,则当且仅当 (sum_{(i,j)} a_{i,j}) 是偶数时合法

    (nm) 是奇数的方案数位 ((r-l+1)^{nm})

    (nm) 是偶数时,若 (r-l+1) 是偶数,则所有方案中总和奇偶各占据一半,故 ((r-l+1)^{nm}/2);若 (r-l+1) 是奇数,则显然总和为偶数的比总和为奇数的方案数多 (1),于是答案为 (((r-l+1)^{nm}+1)/2)

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int mod = 998244353;
    int n,m,l,r,k;
    
    int qpow(int p,int q) {
        return (q&1?p:1) * (q?qpow(p*p%mod,q/2):1) % mod;
    }
    
    signed main() {
        cin>>n>>m>>l>>r;
        k=r-l+1;
        if(n*m%2) cout<<qpow(k,n*m);
        else if(k&1) cout<<(qpow(k,n*m)+1)*((mod+1)/2)%mod;
        else cout<<(qpow(k,n*m))*((mod+1)/2)%mod;
    }
    
    
  • 相关阅读:
    Opencv 图像矩
    Opencv Convex Hull (凸包)
    Opencv 发现轮廓 findContours
    Opencv Match Template(轮廓匹配)
    python操作mysql数据库的常用方法使用详解
    mongodb数据库集群及sharding分片配置
    mongodb数据库安装及常见操作
    windows下搭建eclipse关于python的开发环境及初始化参数配置
    python环境下使用tab自动补全命令
    ubuntu系统初始化网络及mysql配置
  • 原文地址:https://www.cnblogs.com/mollnn/p/12610156.html
Copyright © 2011-2022 走看看