WUST Online Judge

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;
}
作者:McR
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/mcr-tcp/p/9170744.html