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

    A - Buy the String

    题面:给一长度为n的01字符串,问买0和买1的价格分别c0,c1以及 0变1 or 1变0 的价格 h,问最少花多少

    思路:1.sum=c0 * l+c1 * y;2.sum=min(sum,n * c0+h * y); 3.sum=min(sum,n * c1+h * l); 答案就是sum

    B - Sum of Medians

    题面:给n,m,然后给一个长度为n * m的数组,问分成 m 块区间中间值之和怎样最大

    思路:可以肉眼得出,每个区间中间值前面的是最小的,然后要使得中间值变大,每个区间的中间值后面的要连续拿
    3 3

    1 2 3 4 5 6 7 8 9

    分成[1 4 5] [2 6 7] [3 8 9]

    代码:

    #include<bits/stdc++.h>
    #define mem(a,b) memset(a,b,sizeof(a))
    #define ll long long
    #define lson(x) x<<1
    #define rson(x) x<<1|1
    #define mod 998244353
    using namespace std;
    ll ksm(ll a,ll b){
        ll ans=1;
        while(b){
            if(b&1){
                ans*=a;ans%=mod;
            }
            a*=a;a%mod;
            b>>=1;
        }
    }
    const int N=1e6+10;
    int n,m,t,c0,c1,h;
    int a[N];
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&m);
            int l=n*m;
            for(int i=1;i<=l;i++){
                scanf("%d",&a[i]);
            }
            sort(a,a+l);
            int x=(n-1)/2*m;
            ll sum=0;
            int k=0;
            for(int i=x+1;i<=l;i+=n-(n-1)/2){
                sum+=(ll)a[i];
            }
            printf("%lld
    ",sum);
        }
        return 0;
    }
    
    

    C2 - Binary Table (Hard Version)

    题面:给一个n,m(2<=n,m<=100)的二维01字符串,可以操作n * m次,操作方式是选择一个2 * 2的矩阵选择其中三个点把0变1,1变0,问最后全部变成0,需要几步,并给出方案

    思路:就2^4的枚举,我直接来模拟,然后模拟到裂开,因为只考虑了偶数,奇数矩阵的时候要先特判……,先来枚举一下情况其实大致分四类

    全1 or 全0(零步)
    1 1 -> 0 0 -> 1 1 -> 0 1 ->0 0
    1 1 -> 0 1 -> 0 0 -> 1 1 ->0 0(四步)
    
    三个1 直接转即可(一步)
    
    两个1 分两种
    1 1 -> 0 1 ->0 0
    0 0 -> 1 1 ->0 0(两步)
    0 1 -> 0 0 -> 1 1 -> 0 1 ->0 0
    1 0 -> 0 1 -> 0 0 -> 1 1 ->0 0(四步)
    
    一个1
    0 0 -> 1 1 -> 0 1 ->0 0
    0 1 -> 0 0 -> 1 1 ->0 0(三步)
    

    我枚举完,想到那不是直接在2 * 2矩阵弄完了,因为一个2 * 2的矩阵可以贡献4次操作,最多一种也只要4步,也不会超过n * m次,然后大力搞,然后发现了n或者m为奇数的矩阵,可能会超过n * m次

    所以需要处理一下,把n和m变成偶数,那么在n或者m边的时候遇到1,就把他变成0,(因为这样只需要一步即可)把n和m边变成0边,直接删掉,然后就写吧,写到比赛结束,还没过样例……然后三题结束了比赛赛后补题,补漏洞最后ac了,代码比较长

    代码

    #include<bits/stdc++.h>
    #define mem(a,b) memset(a,b,sizeof(a))
    #define ll long long
    #define lson(x) x<<1
    #define rson(x) x<<1|1
    #define mod 998244353
    using namespace std;
    ll ksm(ll a,ll b){
        ll ans=1;
        while(b){
            if(b&1){
                ans*=a;ans%=mod;
            }
            a*=a;a%mod;
            b>>=1;
        }
    }
    const int N=3e4+10;
    int n,m,t,c0,c1,h;
    char s[110][110];
    int a[N][6];
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&m);
            for(int i=0;i<n;i++){
                scanf("%s",s[i]);
            }
            int cnt=0;
            if(n&1){
                for(int i=0;i<m-1;i++){
                    if(s[n-1][i]=='1' && s[n-1][i+1]=='0'){
                        s[n-1][i]='0';
                        a[cnt][0]=n-1;a[cnt][1]=i;a[cnt][2]=n-2;
                        a[cnt][3]=i;a[cnt][4]=n-2;a[cnt][5]=i+1;cnt++;
                        s[n-2][i]=(1-s[n-2][i]+'0')+'0';
                        s[n-2][i+1]=(1-s[n-2][i+1]+'0')+'0';
                    }
                    if(s[n-1][i]=='1' && s[n-1][i+1]=='1'){
                        s[n-1][i]='0';s[n-1][i+1]='0';
                        a[cnt][0]=n-1;a[cnt][1]=i;a[cnt][2]=n-1;
                        a[cnt][3]=i+1;a[cnt][4]=n-2;a[cnt][5]=i;cnt++;
                        s[n-2][i]=(1-s[n-2][i]+'0')+'0';
                    }
                }
                if(s[n-1][m-1]=='1'){
                    a[cnt][0]=n-1;a[cnt][1]=m-1;a[cnt][2]=n-2;
                    a[cnt][3]=m-1;a[cnt][4]=n-2;a[cnt][5]=m-2;cnt++;
                    s[n-2][m-1]=(1-s[n-2][m-1]+'0')+'0';
                    s[n-2][m-2]=(1-s[n-2][m-2]+'0')+'0';
                }
                n--;
            }
            if(m&1){
                 for(int i=0;i<n-1;i++){
                    if(s[i][m-1]=='1' && s[i+1][m-1]=='0'){
                        s[i][m-1]='0';
                        a[cnt][0]=i;a[cnt][1]=m-1;a[cnt][2]=i;
                        a[cnt][3]=m-2;a[cnt][4]=i+1;a[cnt][5]=m-2;cnt++;
                        s[i][m-2]=(1-s[i][m-2]+'0')+'0';
                        s[i+1][m-2]=(1-s[i+1][m-2]+'0')+'0';
                    }
                    if(s[i][m-1]=='1' && s[i+1][m-1]=='1'){
                        s[i][m-1]='0';s[i+1][m-1]='0';
                        a[cnt][0]=i;a[cnt][1]=m-1;a[cnt][2]=i+1;
                        a[cnt][3]=m-1;a[cnt][4]=i+1;a[cnt][5]=m-2;cnt++;
                        s[i+1][m-2]=(1-s[i+1][m-2]+'0')+'0';
                    }
                }
                if(s[n-1][m-1]=='1'){
                    a[cnt][0]=n-1;a[cnt][1]=m-1;a[cnt][2]=n-1;
                    a[cnt][3]=m-2;a[cnt][4]=n-2;a[cnt][5]=m-2;cnt++;
                    s[n-1][m-2]=(1-s[n-1][m-2]+'0')+'0';
                    s[n-2][m-2]=(1-s[n-2][m-2]+'0')+'0';
                }
                m--;
            }
            for(int i=0;i<n;i+=2){
                for(int j=0;j<m;j+=2){
                    if(s[i][j]=='1' &&s[i+1][j+1]=='1'&&  s[i+1][j]=='1'&&s[i][j+1]=='1'){
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i+1;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;//1
                    }
                    else if(s[i][j]=='0' &&s[i+1][j+1]=='1'&&  s[i+1][j]=='0'&&s[i][j+1]=='0'){
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i+1;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;//2
                    }
                    else if(s[i][j]=='0' &&s[i+1][j+1]=='0'&&  s[i+1][j]=='0'&&s[i][j+1]=='1'){
                        a[cnt][0]=i;a[cnt][1]=j+1;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;//3
                    }
                    else if(s[i][j]=='0' &&s[i+1][j+1]=='0'&&  s[i+1][j]=='1'&&s[i][j+1]=='0'){
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j;cnt++;
                        a[cnt][0]=i+1;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j+1;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;//4
                    }
                    else if(s[i][j]=='1' &&s[i+1][j+1]=='0'&&  s[i+1][j]=='0'&&s[i][j+1]=='0'){
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;//5
                    }
                    else if(s[i][j]=='0' &&s[i+1][j+1]=='0'&&  s[i+1][j]=='1'&&s[i][j+1]=='1'){
                         a[cnt][0]=i+1;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i+1;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;//cout<<"6"<<endl;//6
                    }
                    else if(s[i][j]=='1' &&s[i+1][j+1]=='1'&&  s[i+1][j]=='0'&&s[i][j+1]=='0'){
                         a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j+1;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j+1;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;//cout<<"7"<<endl;//7
                    }
                    else if(s[i][j]=='1' &&s[i+1][j+1]=='0'&&  s[i+1][j]=='0'&&s[i][j+1]=='1'){
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j+1;a[cnt][2]=i+1;a[cnt][3]=j+1;a[cnt][4]=i+1;a[cnt][5]=j;cnt++;//cout<<"8"<<endl;//8
                    }
                    else if(s[i][j]=='1' &&s[i+1][j+1]=='0'&&  s[i+1][j]=='1'&&s[i][j+1]=='0'){
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j+1;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i+1;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j+1;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;//cout<<"9"<<endl;//9
                    }
                    else if(s[i][j]=='0' &&s[i+1][j+1]=='1'&&  s[i+1][j]=='1'&&s[i][j+1]=='0'){
                        a[cnt][0]=i+1;a[cnt][1]=j+1;a[cnt][2]=i;a[cnt][3]=j;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i+1;a[cnt][1]=j;a[cnt][2]=i;a[cnt][3]=j;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;//cout<<"10"<<endl;//10
                    }
                    else if(s[i][j]=='0' &&s[i+1][j+1]=='1'&&  s[i+1][j]=='0'&&s[i][j+1]=='1'){
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i+1;a[cnt][5]=j+1;cnt++;
                        a[cnt][0]=i;a[cnt][1]=j;a[cnt][2]=i+1;a[cnt][3]=j;a[cnt][4]=i;a[cnt][5]=j+1;cnt++;//cout<<"11"<<endl;//11
                    }
                    else if(s[i][j]=='0' &&s[i+1][j+1]=='0'&&  s[i+1][j]=='0'&&s[i][j+1]=='0'){}
                    else{
                        int num=0;
                        if(s[i][j]=='1'){
                            a[cnt][num++]=i;a[cnt][num++]=j;
                        }
                        if(s[i][j+1]=='1'){
                            a[cnt][num++]=i;a[cnt][num++]=j+1;
                        }
                        if(s[i+1][j]=='1'){
                            a[cnt][num++]=i+1;a[cnt][num++]=j;
                        }
                        if(s[i+1][j+1]=='1'){
                            a[cnt][num++]=i+1;a[cnt][num++]=j+1;
                        }
                        cnt++;
                    }
                    s[i][j]='0';s[i+1][j]='0';s[i+1][j+1]='0';s[i][j+1]='0';
                }
            }
            printf("%d
    ",cnt);
            for(int i=0;i<cnt;i++){
                for(int j=0;j<6;j++){
                    printf(j==5?"%d
    ":"%d ",a[i][j]+1);
                }
            }
        }
        return 0;
    }
    

    E - Greedy Shopping

    E题

  • 相关阅读:
    go语言编程之旅笔记5
    go语言编程之旅笔记4
    go语言编程之旅笔记3
    go语言编程之旅笔记1~2
    minikube使用记录
    Azure Sql : Could not find stored procedure 'sp_addlinkedserver'.
    Jenkins SVN WebDeploy远程服务器
    sqlserver使用cte实现某列按字符分隔成多行
    openstack安装记录
    C语言中的bzero函数
  • 原文地址:https://www.cnblogs.com/luoyugongxi/p/14002155.html
Copyright © 2011-2022 走看看