D - Lucky Number 2
题意:幸运数字由4和7组成,现在给出一个数字,已知4的个数,7的个数,47的个数和74的个数。
求解出这个数字(要求最小)
题解:一个构造题
\[ abs(47的个数 - 74的个数) > 1 \]
\[ 4和7的个数不足无法构造 \]
满足以上条件时,无法构成,其他情况时,优先存放4,取最小值。
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
int abs(int a){
return a<0?-a:a;
}
int main(){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(abs(c-d)>1){
printf("-1\n");
return 0;
}
string s;
if(c==d+1){
for(int i=0;i<c;i++){
s+="47";
}
}
if(c+1==d){
for(int i=0;i<d;i++){
s+="74";
}
}
if(c==d){
for(int i=0;i<c;i++){
s+="47";
}
if(a>c)s+="4";
else s="7"+s;
}
int ls=0,lt=0;
for(int i=0;i<s.length();i++){
if(s[i]=='4')ls++;
else lt++;
}
if(ls>a||lt>b){
printf("-1\n");
}
else{
int fa=1;
int na=a-ls,nb=b-lt;
for(int i=0;i<s.length();i++){
if(s[i]=='4'&&fa){
fa=0;
while(na--){
printf("4");
}
}
if(s[i]=='7'){
lt--;
if(lt==0){
while(nb--){
printf("7");
}
}
}
printf("%c",s[i]);
}
}
return 0;
}
【CoreForces Round #104D】Lucky Number 2
原文:https://www.cnblogs.com/Vagrant-ac/p/12151787.html