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; }