我想当一个好老师,所以我决定记住所有学生的名字。可是不久以后我就放弃了,因为学生太多了,根本记不住。但是我不能让我的学生发现这一点,否则会很没面子。所以每次要叫学生的名字时,我会引用离他最近的,我认得的学生。比如有10个学生:
A ? ? D ? ? ? H ? ?
想叫每个学生时,具体的叫法是:
位置 | 叫法 |
1 | A |
2 | right of A (A右边的同学) |
3 | left of D (D左边的同学) |
4 | D |
5 | right of D (D右边的同学) |
6 | middle of D and H (D和H正中间的同学) |
7 | left of H (H左边的同学) |
8 | H |
9 | right of H (H右边的同学) |
10 | right of right of H (H右边的右边的同学) |
输入只有一组数据。第一行是学生数n(1<=n<=100)。第二行是每个学生的名字,按照从左到右的顺序给出,以空格分隔。每个名字要么是不超过3个英文字母,要么是问号。至少有一个学生的名字不是问号。下一行是询问的个数q(1<=q<=100)。每组数据包含一个整数p(1<=p<=n),即要叫的学生所在的位置(左数第一个是位置1)。
对于每个询问,输出叫法。注意"middle of X and Y"只有当被叫者有两个最近的已知学生X和Y,并且X在Y的左边。
10A ? ? D ? ? ? H ? ?
4
3
8
6
10
left of D
H
middle of D and H
right of right of H
模拟:当时比赛的时候有一个点想错了,我以为是左右两边非?和?的距离谁小输出谁。。。。交了15遍一直wa。。。。。赛后才知道原来是谁小输出左边的左边。。。或者右边的右边。。。。。。好心痛,水题自己愣是ka了3个小时,看别人a了这个题。自己就一直写,不想换题,导致就做出一道。。。学弟学妹做的都比我多。好丢人啊,呜呜呜。。。
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #include<stdlib.h> #include<math.h> #include<vector> #include<map> #define LL long long using namespace std; int main() { char s[105][10]; int a[105]; int n; scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%s",s[i]); } int m; scanf("%d",&m); for(int i=1; i<=m; i++) { scanf("%d",&a[i]); a[i]=a[i]-1; } int ha; int haha; int ta; int r; int j,j1; int p,p1; for(int i=1; i<=m; i++) { if(strcmp(s[a[i]],"?")==0) { p=0; p1=0; ta=0; r=0; for(j=a[i]-1; j>=0; j--) { if(strcmp(s[j],"?")==0) { p++; } else { ha=j; break; } } if(j==-1) { r=1; } for(j1=a[i]+1; j1<n; j1++) { if(strcmp(s[j1],"?")==0) { p1++; } else { haha=j1; break; } } if(j1==n) ta=1; if(ta==0&&r==0) { if(p>p1) { for(int k=0; k<p1+1; k++) { printf("left of "); } printf("%s\n",s[haha]); } else if(p<p1) { for(int k=0; k<p+1; k++) { printf("right of "); } printf("%s\n",s[ha]); } else if(p==p1) { printf("middle of %s and %s\n",s[ha],s[haha]); } } else if(ta==1&&r==0) { for(int k=0; k<p+1; k++) { printf("right of "); } printf("%s\n",s[ha]); ta=0; } else if(ta==0&&r==1) { for(int k=0; k<p1+1; k++) { printf("left of "); } printf("%s\n",s[haha]); r=0; } } else { printf("%s\n",s[a[i]]); } } }