规律好题——Codeforces Round #104 (Div. 2) D

首先找规律知道|s(47)-s(74)|<=1
|s(47)-s(74)|==0
  47474……4
或  74747……7
|s(47)-s(74)|==1
会是4747……47
或是7474……74
最终由是s(4),s(7)决定
View Code
#include<stdio.h>
#include<math.h>

int main()
{
int a,b,c,d;
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
{
int i,j;
if(abs(c-d)>1)
{
printf("-1\n");
continue;
}

int add=0,max=c;
if(abs(c-d)==1)
{
if(max<d)max=d;
if(a<max||b<max){
printf("-1\n");continue;
}

if(c>d){
add=a-max;
while(add--)printf("4");
add=max;
while(add--)printf("47");
add=b-max;
while(add--)printf("7");
printf("\n");
}
else
{
printf("7");
add=a-d;
while(add--)printf("4");
add=c;
while(add--)printf("47");
add=b-d;
while(add--)printf("7");
printf("4\n");
}
}
else
{
if(a<c||b<c){
printf("-1\n");continue;
}

if(a==b&&b==c){
printf("-1\n");continue;
}

if(a>=c+1)//474
{
add=a-c-1;
while(add--)printf("4");
add=c;
while(add--)printf("47");
add=b-c;
while(add--)printf("7");
printf("4");
}
else
{
add=c;
while(add--)printf("74");
add=b-c;
while(add--)printf("7");
}
printf("\n");
}
}
}


原文地址:https://www.cnblogs.com/huhuuu/p/2335808.html