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;
}