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\n",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\n",cnt);
        for(int i=0;i<cnt;i++){
            for(int j=0;j<6;j++){
                printf(j==5?"%d\n":"%d ",a[i][j]+1);
            }
        }
    }
    return 0;
}

E - Greedy Shopping

E题

posted @ 2020-11-18 21:08  ouluy  阅读(96)  评论(0编辑  收藏  举报