Good Teacher UVA - 12662
程序员文章站
2022-06-04 16:12:08
...
AC代码(分情况讨论的但是总觉得自己的做法太麻烦了不过思路可以参考一下(1)在第一个名字之前或者最后一个名字之后
(2)一般情况就是两边都有名字或者老师记住了的名字(3)只有一个名字其余所有的人都是以这一个名字为参考)
Select Code
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct node
{
char k[5];
int data;
} c[120],b[120];
int main()
{
int n, i, q;
char a[10];
int h = 0, f, j;
memset(b, 0, sizeof(b));
scanf("%d",&n);
for(i = 0; i<n; i++)
{
cin>>a;
strcpy(b[i].k, a);
if(strcmp(a, "?")!=0)
{
c[h].data = i, strcpy(c[h].k, a);
h++;
}
}
if(h==1)
{
scanf("%d",&q);
while(q--)
{
scanf("%d",&f);
f = f-1;
if(f<c[0].data)
{
for(j = 0; j<(c[0].data-f); j++)
printf("left of ");
printf("%s\n",c[0].k);
}
else if(f==c[0].data)
printf("%s\n",c[0].k);
else
{
for(j = 0; j<(f-c[0].data); j++)
printf("right of ");
printf("%s\n",c[0].k);
}
}
}
else
{
scanf("%d",&q);
while(q--)
{
int f1;
scanf("%d",&f1);
f = f1-1;
if(strcmp(b[f].k, "?")!=0)
{
printf("%s\n",b[f].k);
}
else
{
if(f>c[h-1].data)
{
for(j = 0; j<(f-c[h-1].data); j++)
printf("right of ");
printf("%s\n",c[h-1].k);
}
else if(f<c[0].data)
{
for(j = 0; j<(c[0].data-f); j++)
printf("left of ");
printf("%s\n",c[0].k);
}
else
{
for(i = 0; i<h-1; i++)
{
if(f>c[i].data&&f<c[i+1].data)
{
int d = c[i+1].data-c[i].data;
int e = c[i+1].data+c[i].data;
if(f==(e/2)&&d%2==0)
printf("middle of %s and %s\n",c[i].k, c[i+1].k);
else
{
if((f-c[i].data)<(c[i+1].data-f))
{
for(j = 0; j<(f-c[i].data); j++)
printf("right of ");
printf("%s\n",c[i].k);
break;
}
else if((f-c[i].data)>(c[i+1].data-f))
{
for(j = 0; j<(c[i+1].data-f); j++)
printf("left of ");
printf("%s\n",c[i+1].k);
break;
}
}
}
}
}
}
}
}
return 0;
}