UVA 12662(模拟)

来源:互联网 发布:自学java哪本书好 编辑:程序博客网 时间:2024/06/08 11:09





题意:问‘?’字符的位置,详情见图




题解:这里讨论不知道为什么一直错。。。。。。。。


讨论:1.当L,R,两边字符同时存在,且距离相等就输出    middle of  and 。。。

2.如果有一边的距离小于另一边,或者另一边找不到字符,那么就输出  left of /right of 

3.否则输出  left of /right of 


这一题大概错了9次。。。。。。心累

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<set>#include<utility>using namespace std;#define inf 0x3f3f3f3f#define N 5000char s[N][10];int getpos(int n,int st,int num){for(int i=st;i<=n&&i>=1;i+=num){if(s[i][0]!='?')return i;}return -1;}int main(){#ifdef CDZSCfreopen("i.txt","r",stdin);#endifint n,x,m;while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%s",s[i]);}scanf("%d",&m);while(m--){scanf("%d",&x);if(s[x][0]!='?'){printf("%s\n",s[x]);}else{int L,R;L=getpos(n,x,-1);R=getpos(n,x,1);int lgL=x-L,lgR=R-x;if(lgL==lgR&&L!=-1&&R!=-1){printf("middle of %s and %s\n",s[L],s[R]);}else if(lgL<lgR||R==-1){while(lgL--)printf("right of ");printf("%s\n",s[L]);}else{while(lgR--)printf("left of ");printf("%s\n",s[R]);}}}}return 0;}


0 0
原创粉丝点击