zoukankan      html  css  js  c++  java
  • G

    G - 好老师
    Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu

    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 
    my answer:
    #include<iostream>
    using namespace std;
    int main()
    {
    	int n;
    	string a[500];
    	int t[2000];
    	int f[2000];
    	while(cin>>n)
    	{
    		int k=1;
    		for(int i=1;i<=n;i++){ 
    		    cin>>a[i];
    		    if(a[i]!="?")
    		     t[k++]=i;
    		}
    		int m;
    		cin>>m;
    		for(int i=1;i<=m;i++)
    		   cin>>f[i];
            if(t[1]!=1){
            	for(int j=t[1]-1;j>=1;j--)
            	  a[j]="left of "+a[j+1];
            }
            if(t[k-1]!=n){
            	for(int j=t[k-1];j<=n;j++)
            	  a[j+1]="right of "+a[j];
            }
           for(int i=1;i<=k-2;i++){
            	int x=t[i];
            	int y=t[i+1];
            	int c=(t[i]+t[i+1])/2;
    				
            	for(int h=x+1;h<=c;h++){
            		a[h]="right of "+a[h-1];
            	}
             	for(int h=y-1;h>c;h--){
            		a[h]="left of "+a[h+1];
            	}
    		    if((t[i]+t[i+1])%2==0) {a[c]="middle of "+a[x]+" and "+a[y];c-=1;}
            }
    		for(int i=1;i<=m;i++)
    		   cout<<a[f[i]]<<endl;		   
    	}
    	return 0;
    }
    好吧,还是差太远了。多多加油把!!!我能行!!!

  • 相关阅读:
    Grovvy初识
    在eclipse中安装插件
    解决 APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tas
    Axis2 webservice入门--Webservice的发布与调用
    一步一步教你自定义博客园(cnblog)界面
    Enum枚举
    并行与并发
    多线程join(加入)
    守护线程
    停止线程
  • 原文地址:https://www.cnblogs.com/NYNU-ACM/p/4248799.html
Copyright © 2011-2022 走看看