FZU 1573 大学自习室
2009-07-29 16:00
190 查看
大学自习室
解题:
先知道一半的距离在哪里,再比较各个符合要求的座位哪个离中间比较近。要注意特殊情况的处理。
如:2
EE
0
这也是有结果的。囧
Time Limit:1s | Memory limit:32M |
Accepted Submit:184 | Total Submit:645 |
图书馆终于建成了,可以自习的教室也多了。所以,往常从不自习的Roam也开始上自习了。图书馆的自习室虽然很大而且座位众多,但找到满意座位也确实能算一门学问…… 由于Roam找座不是很有经验,而且他还有一些特殊的要求,所以Roam希望你来帮他选择座位。 Roam 对于座位的要求有: 旁边有另一个空座位,可以是左边,也可以是右边(放书包用的...); 为了环境相对稳定,满足要求1的同时,Roam的座位必须是离两边过道最远的; 在教室的最后一排 (-__-!)。 为了使问题更加明确,我们做以下假定: 只考虑教室最后一排中间部分的座位,两边就是过道; 每个座位都有一个编号,若有N(1<=N<=50)个座位,则座位编号从左到右依次为 0,1,2,…,N-1. 输入数据使用一个长度等于座位数的字符串 Seat 表示,字符串中的每一个字符对应一个座位的状态,其中的E(大写字母)表示座位没人,P(大写字母)表示座位已经有人了。 例如:Seat="EPEPEEE" 表示以下的情况:
数据输入输入包括多组数据。每组数据输入数据的第一行是一个数字N,(1<=N<=50),表示该教室最后一排有N个座位。第二行是一个字符串,表示字符串seat。 输出数据对于每组输出数据,输出只有一行,即为你所找到的座位的编号。如果有多个符合条件的座位,则仅输出其中编号最小的那个。如果有多个符合条件的座位,则仅输出其中编号最小的那个; 如果不存在这样的座位,输出-1。 样例输入7 EPEPEEE 6 PEPPEP 样例输出4 -1 Original: FOJ月赛-2008年3月 |
先知道一半的距离在哪里,再比较各个符合要求的座位哪个离中间比较近。要注意特殊情况的处理。
如:2
EE
0
这也是有结果的。囧
#include <iostream> using namespace std; int index(char a[],int n) { int i,j,pos2=0;float half,dist; int pos[100]; half=1.00*(n-1)/2; dist=half; if (n==2) { if (a[0]=='E' && a[1]=='E') { return 0; } } for (i=1,j=0;i<n;i++) { if (a[i-1]=='E' && a[i]=='E') { pos[j]=i-1; j++; pos[j]=i; j++; } } for (i=0;i<j;i++) { if (pos[i]<half && half-pos[i]<dist) { dist=half-pos[i]; pos2=pos[i]; } else if(pos[i]>half && pos[i]-half<dist) { dist=pos[i]-half; pos2=pos[i]; } else if (pos[i]==half) { dist=0; pos2=pos[i]; } } if(pos2==0) return -1; else return pos2; } int main() { int n; char a[51]; while (cin>>n) { memset(a,'/0',sizeof(a)); cin>>a; cout<<index(a,n)<<endl; } return 0; }
相关文章推荐
- FOJ--1573--大学自习室--解题报告
- FOJ 1573 大学自习室
- FOJ 1573 大学自习室
- ACM-FZUoj2009-1573解题报告
- 推荐大学自习室后的《再见大四》
- 大学毕业后拉开差距的原因(转)
- 李开复:写给出国上大学女儿的信
- 软件工程专业,大学期间最重要的是学好哪些知识?
- 大学十年 林锐
- 青年文摘:大学是间坏公司
- 胡适:赠于今年的大学毕业生
- 再见了,可爱的大学
- 大学的老师都在干嘛去了
- 快速从大学中走进社会
- 不要荒废了大学四年,大学应该怎么学习计算机专业
- 大一计算机系新生,有点迷茫。大学四年学什么最重要
- FZU April 排列
- 大学不教的求职课
- Unix&Linux大学教程:16 过滤器:简介和基本操作
- FZU 2030 括号问题