2168: 糖果行动
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Submitted: 329 Accepted: 118
[Submit][Status][Web Board]
Description
小矮人为了糖果而战,公主每指挥一次行动,所有的小矮人都同时向右运动,假设所有小矮人运动速度相同,直到其中一个拿到糖果或其中一个到达最右边就全部停止运动,公主再指挥一次,
到达最右边或已经拿到糖果的小矮人会停止运动,其余小矮人还会重复这样运动,直到所有小矮人都拿到糖果,求公主一共指挥了多少次,如果不能拿到所有糖果,输出-1。
Input
多组数据,每组先输入n,m(2<=n,m<=1000),接下来n行,每行m个字符,每一行都有一个小矮人且只有一个糖果,糖果可能在小矮人左边,‘S'表示小矮人的位置,‘C'表示糖果的位置,’.'表示空
地。
Output
输出公主的指挥的次数,如果不能拿到所有糖果,输出-1。
Sample Input 
4 7 S..C... ..S...C .S...C. S.....C 4 5 .C.S. S.C.. S...C S.C..
Sample Output
3 -1
HINT
样例一:第一次指挥第1个小矮人拿到糖果,第二次指挥第2,3个小矮人拿到糖果,第三次指挥第4个小矮人拿到糖果。
样例二:不能拿到第一个糖果。
Author
LL
代码如下:
#include <stdio.h>
int main() {
int i, m, n, flag, temp, cnt;
char s[1000][1000];
while (scanf("%d%d", &n, &m) != EOF) {
int a[1000];
flag = 1; temp = 0;
fflush(stdin);
for (i = 0; i < n; i++) {
scanf("%s", s[i]);
fflush(stdin);
cnt = strchr(s[i], 'C') - strchr(s[i], 'S');
if (cnt > 0) a[cnt]++;
else flag = 0;
}
for (i = 0; i < 1000; i++)
if (a[i] > 0) temp++;
if (flag) printf("%d
", temp);
else printf("-1
");
}
return 0;
}