CSU 1334: 好老师(数学啊 湖南省第九届大学生计算机程序设计竞赛)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1334

Description

我想当一个好老师,所以我决定记住所有学生的名字。可是不久以后我就放弃了,因为学生太多了,根本记不住。但是我不能让我的学生发现这一点,否则会很没面子。所以每次要叫学生的名字时,我会引用离他最近的,我认得的学生。比如有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右边的右边的同学)

Input

输入只有一组数据。第一行是学生数n(1<=n<=100)。第二行是每个学生的名字,按照从左到右的顺序给出,以空格分隔。每个名字要么是不超过3个英文字母,要么是问号。至少有一个学生的名字不是问号。下一行是询问的个数q(1<=q<=100)。每组数据包含一个整数p(1<=p<=n),即要叫的学生所在的位置(左数第一个是位置1)。

Output

对于每个询问,输出叫法。注意"middle of X and Y"只有当被叫者有两个最近的已知学生X和Y,并且X在Y的左边。

Sample Input

10A ? ? D ? ? ? H ? ?438610

Sample Output

left of DHmiddle of D and Hright of right of H

HINT

Source

湖南省第九届大学生计算机程序设计竞赛

代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
string s;
vector<string> vv;
int main()
{
	int n, m;
	int i, j;
	while(~scanf("%d",&n))
	{
		vv.clear();
		for(i = 0; i < n; i++)
		{
			cin >> s;
			vv.push_back(s);
		}
		scanf("%d",&m);
		int tt, l;
		int flag1, flag2;
		for(i = 0; i < m; i++)
		{
			scanf("%d",&tt);
			flag1 = flag2 = 0;
			if(vv[tt-1] != "?")
			{
				cout<<vv[tt-1]<<endl;
				continue;
			}
			int k = 0;
			for(j = 0; ; j++)
			{
				k++;
				int t1 = tt-k-1;
				int t2 = tt+k-1;
				if(t1>=0 && vv[t1]!="?")
				{
					flag1 = 1;
				}
				if(t2 < n && vv[t2]!="?")
				{
					flag2 = 1;
				}
				if(flag1 && flag2)//中间
				{
					cout<<"middle of "<<vv[t1]<<" and "<<vv[t2]<<endl;
					break;
				}
				else if(flag1 && !flag2)//右边
				{
					for(l = 0; l < k; l++)
					{
						cout<<"right of ";
					}
					cout<<vv[t1]<<endl;
					break;
				}
				else if(!flag1 && flag2)//左边
				{
					for(l = 0; l < k; l++)
					{
						cout<<"left of ";
					}
					cout<<vv[t2]<<endl;
					break;
				}
			}
		}
	}
	return 0;
}
/*
10
A c v ? ? ? ? H f g
50
5
6
7
8
9
*/
时间: 2024-10-26 15:41:59

CSU 1334: 好老师(数学啊 湖南省第九届大学生计算机程序设计竞赛)的相关文章

CSU 1337: 搞笑版费马大定理(数学啊 湖南省第九届大学生计算机程序设计竞赛)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1337 Description 费马大定理:当n>2时,不定方程an+bn=cn没有正整数解.比如a3+b3=c3没有正整数解.为了活跃气氛,我们不妨来个搞笑版:把方程改成a3+b3=c3,这样就有解了,比如a=4, b=9, c=79时43+93=793. 输入两个整数x, y, 求满足x<=a,b,c<=y的整数解的个数. Input 输入最多包含10组数据.每组数据包含两个

CSU 1339: 最后一滴血(模拟啊 湖南省第九届大学生计算机程序设计竞赛)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1339 Description 在ACM/ICPC这样的程序设计竞赛中,最早解出一道题称为抢到FB(First Blood,第一滴血).现在ACM/ICPC世界总决赛甚至为每道题的FB设立了特别奖. 也许我们还可以设一个LB(Last Blood,最后一滴血)奖,奖给最后一个解出某题的队伍.注意:你不能先提交程序,得到Yes之后等比赛快结束时把它再交一遍,因为一旦一只队伍解出了某题,它对

CSU 1330: 字符识别?(字符串模拟啊 湖南省第九届大学生计算机程序设计竞赛)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1330 Description 你的任务是写一个程序进行字符识别.别担心,你只需要识别1, 2, 3,如下: .*.  ***  *** .*.  ..*  ..* .*.  ***  *** .*.  *..  ..* .*.  ***  *** Input 输入仅包含一组数据,由6行组成.第一行为字符的个数n(1<=n<=10).以下5行每行包含4n个字符.每个字符恰好占5行3列,

CSU 1336: Interesting Calculator(BFS啊 湖南省第九届大学生计算机程序设计竞赛)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1336 1336: Interesting Calculator Description There is an interesting calculator. It has 3 rows of buttons. Row 1: button 0, 1, 2, 3, ..., 9. Pressing each button appends that digit to the end of

湖南省第九届大学生计算机程序设计竞赛

好老师 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 108  Solved: 52 [Submit][Status][Web Board] Description 我想当一个好老师,所以我决定记住所有学生的名字.可是不久以后我就放弃了,因为学生太多了,根本记不住.但是我不能让我的学生发现这一点,否则会很没面子.所以每次要叫学生的名字时,我会引用离他最近的,我认得的学生.比如有10个学生: A ? ? D ? ? ? H ? ? 想叫每个学生时,

湖南省第九届大学生计算机程序设计竞赛 搞笑版费马大定理

搞笑版费马大定理 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 190  Solved: 93 [Submit][Status][Web Board] Description 费马大定理:当n>2时,不定方程an+bn=cn没有正整数解.比方a3+b3=c3没有正整数解.为了活跃气氛,我们最好还是来个搞笑版:把方程改成a3+b3=c3.这样就有解了.比方a=4, b=9, c=79时43+93=793. 输入两个整数x, y, 求满足x<=a,

湖南省第九届大学生计算机程序设计竞赛 字符识别?

字符识别? Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 156  Solved: 98 [Submit][Status][Web Board] Description 你的任务是写一个程序进行字符识别.别担心,你只需要识别1, 2, 3,如下: .*.  ***  *** .*.  ..*  ..* .*.  ***  *** .*.  *..  ..* .*.  ***  *** Input 输入仅包含一组数据,由6行组成.第一行为字符的个数

湖南省第九届大学生计算机程序设计竞赛 高桥和低桥

高桥和低桥 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 358  Solved: 60 Description 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不算"淹了两次".举例说明: 假定高桥和低桥的高度分别是5和2,初始水位为1 第一次洪水:水位提高到6(两个桥都被淹),退到2(高桥不再被淹,但低桥仍然

好老师 (湖南省第九届大学生计算机程序设计竞赛)

1334: 好老师 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 267  Solved: 131 [Submit][Status][Web Board] Description 我想当一个好老师,所以我决定记住所有学生的名字.可是不久以后我就放弃了,因为学生太多了,根本记不住.但是我不能让我的学生发现这一点,否则会很没面子.所以每次要叫学生的名字时,我会引用离他最近的,我认得的学生.比如有10个学生: A ? ? D ? ? ? H ? ? 想