欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Good Teacher UVA - 12662

程序员文章站 2022-06-04 16:12:08
...

Good Teacher UVA - 12662

Good Teacher UVA - 12662

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;
}