[Daily] 20200814

C题.[Codeforces 146C] Lucky Conversion

题目链接

思路: 从a,b串不一样的所有位置 i 里,记录a[i]==4的数量cnt_4,和a[i]==7的数量cnt_7,方案肯定是能交换的交换,最后不能交换的改变。所以ans=min(cnt_4,cnt_7)+(max(cnt_4,cnt_7)-min(cnt_4,cnt_7)) = max(cnt_4,cnt_7);

//AC代码
#include<bits/stdc++.h>
using namespace std;
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
string a,b;
int cnt4,cnt7;
int main(){
	cin>>a>>b;
	int len=a.length();
	for(int i=0;i<len;i++){
		if(a[i]!=b[i]){
			if(a[i]=='4')cnt4++;else cnt7++;
		}
	}
	cout<<max(cnt4,cnt7);
}

D题.[Codeforces 146D] Lucky Number 2

题目链接

思路: 手动构造一下不难看出来如果|a3-a4|>1,肯定无解。
所以分三种情况,a3=a4; a3=a4-1; a4=a3-1
①a3=a4时,有47474或者74747两种形式。
— 显然,如果满足a1>=a3+1且a2>=a3,选用47474的形式构造最优,否则,如果满足a1>=a3且a2>=a3+1,能且只能选用74747的形式构造,再否则,无解。
②a3=a4-1时,如果满足a1>=a4且a2>=a4,能且只能选用747474的形式构造,否则无解。
③a4=a3-1时,如果满足a1>=a3且a2>=a3,能且只能选用474747的形式构造,否则无解。
如果不满足以上三种情况之一,无解

if-else判断选择形式进行构造即可,“4"和"7"如果有多余的,只需要在构造的时候,算出有多少多余的"4"和"7”,然后把多余的"4"放到所选构造形式的最左边的"4"旁边输出,把多余的"7"放到所选构造形式的最右边的"7"旁边输出,显然这样得出的结果满足最小化。

//AC代码
#include<bits/stdc++.h>
using namespace std;
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
int a1,a2,a3,a4;
void solve(){
	if(a3==a4){
		if(a1>=a3+1&&a2>=a3){
			for(int i=1;i<=a1-(a3+1);i++)printf("4");
			for(int i=1;i<=a3;i++)printf("47");
			for(int i=1;i<=a2-a3;i++)printf("7");
			printf("4");
			return;
		}else
		if(a1>=a3&&a2>=a3+1){
			printf("7");
			for(int i=1;i<=a1-a3;i++)printf("4");
			for(int i=1;i<=a3;i++)printf("47");
			for(int i=1;i<=a2-(a3+1);i++)printf("7");
			return;
		}
		else return void(cout<<-1);
	}else
	if(a3==a4-1){
		if(a1>=a4&&a2>=a4){
			printf("74");
			for(int i=1;i<=a1-a4;i++)printf("4");
			for(int i=1;i<=a4-2;i++)printf("74");
			for(int i=1;i<=a2-a4;i++)printf("7");
			printf("74");
			return;
		}
		else return void(cout<<-1);
	}
	if(a4==a3-1){
		if(a1>=a3&&a2>=a3){
			for(int i=1;i<=a1-a3;i++)printf("4");
			for(int i=1;i<=a3;i++)printf("47");
			for(int i=1;i<=a2-a3;i++)printf("7");
			return;
		}
		else return void(cout<<-1);
	}
	else return void(cout<<-1);
}
	

int main(){
	cin>>a1>>a2>>a3>>a4;
	solve();
}

猜你喜欢

转载自blog.csdn.net/qq_45530271/article/details/108013872