Skip to content

百度之星三

2007年5月26号

百度之星编程比赛 第二题 数7


#include
#include

//int maxa=10002, maxb=10002, maxc=240003, maxd=2001;
#define maxa 10002
#define maxb 10002
#define maxc 240003
#define maxd 2001

int a[maxa], ra[maxa], b[maxb], rb[maxb], c[maxc];

int main()
{
int digit[10];
int x,y,z,n,mc,mra,mrb;
int i,j,k,kk,flag,f;
char s[6];

memset(a, 0, sizeof(a) );
memset(ra, 0, sizeof(ra));
memset(b, 0, sizeof(b) );
memset(rb, 0, sizeof(rb));
memset(c, 0, sizeof(c) );

// calc for req1 and first half of query n
for (i=1, k=1; i {
if(k%7==0){
ra[k] = -1;
continue;
}
kk = k;
flag = 0;
while(kk > 0)
{
if(kk % 10 == 7){
flag = 1;
ra[k] = -1;
break;
}
kk = kk / 10;
}
if(flag == 1) continue;
a[i] = k;
ra[k] = i;
++i;
}
mra = k-1;
// calc req2 and last half of query n
for (i=1,k=1; i {
memset(digit, 0, sizeof(digit));
kk = k;
flag = 0;
while(kk > 0)
{
f = kk % 10;
if(digit[f] == 1)
{
flag = 1;
rb[k] = -1;
break;
}
digit[f] = 1;
kk = kk / 10;
}
if (flag == 1) continue;
b[i] = k;
rb[k] = i;
++i;
}
mrb = k-1;
// calc req12
mc = 0;

for (i=1,j=1,k=1; (i {
while(a[i] != b[j])
{
while (a[i] < b[j]) ++i;
while (a[i] > b[j]) ++j;
}
c[k] = a[i];
}
mc = k-1;
// read in data and resolve
for (i=0; i<100; ++i)
{
scanf("%s %d", &s, &n);
if(strcmp(s, "req1") == 0)
{
if(n > maxa) printf(“SORRY!\n”);
else printf(“%d\n”,a[n]);
}else if(strcmp(s, “req2″) == 0)
{
if(n > maxb) printf(“SORRY!\n”);
else printf(“%d\n”,b[n]);
}else if(strcmp(s, “req12″) == 0)
{
if(n > mc) printf(“SORRY!\n”);
else printf(“%d\n”,c[n]);
}else if(strcmp(s, “query”) == 0)
{
if(n > mra || n > mrb) printf(“SORRY!\n”);
else printf(“%d %d\n”,ra[n], rb[n]);
}
}
return 0;
}

Post a Comment

Your email is never published nor shared. Required fields are marked *