雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2012-02-02 15:04  huhuuu  阅读(219)  评论(0编辑  收藏  举报
首先找规律知道|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");
}
}
}