T55244 电影院

T1爆零系列

这道题是一道纯模拟,用心写一写一定能些出来。


但是T1爆零怎么办啊???

检查这些东西:

  1. 开数组的范围。最大差不多就开一千万的一维数组,最小也一定要比最大数据范围大至少5以上!!千万不要看错数据范围!(我就崩在这里了)

  2. 看清所有的题目条件,特别是所有特意加粗的那些字体!最好在代码旁边打上注释,注意静态差错!

  3. 在重要的地方debug一下。保险起见还可以特意去单步调试!

  4. 只有纯粹模拟的题目可以试着写两份代码,用类似于对拍的方式看看哪里是对的那里是错的。

差不多就是这些,剩下的就是运气了。。。

代码:

#include<cstdio>

const int maxn = 105;
char a[maxn][maxn];
int left[maxn];
int n, m, q;

int find(int r, int k)
{
    for(int i = 1; i <= m - k + 1; i++)
    {
        if(a[r][i] != '-') continue;
        bool flag = true;
        // [i, i + k - 1]
        // i + k - 1 = n
        for(int j = i + 1; j <= i + k - 1; j++)
        {
            if(a[r][j] != a[r][i])
            {
                flag = false;
                break;
            }
        }
        if(flag) return i;
    }
    return -1;
}
void sell(int x, int y)
{
    a[x][y] = '#';
    left[x]--, left[0]--;
    printf("%d%c", x, y + 'A' - 1);
}
void solve(int r, int k)
{
    if(r > n)
    {
        printf("Theater only contains %d rows\n", n);
        return;
    }
    if(left[0] < k)
    {
        printf("Sold out\n");
        return;
    }
    if(left[r] >= k)
    {
        int temp = find(r, k);
        if(temp != -1)
        {
            for(int i = temp; i < temp + k; i++)
            {
                sell(r, i);
                if(i != temp + k - 1) printf(" ");
            }
            printf("\n");
        }
        else
        {
            for(int i = 1, cnt = 0; i <= m && cnt < k; i++)
            {
                if(a[r][i] == '-')
                {
                    sell(r, i);
                    cnt++;
                    if(cnt != k) printf(" ");
                }
            }
            printf("\n");
        }
    }
    else
    {
        bool success = false;
        for(int i = 1; i <= n; i++)
        {
            int temp = find(i, k);
            if(temp != -1)
            {
                for(int j = temp; j < temp + k; j++)
                {
                    sell(i, j);
                    if(j != temp + k - 1) printf(" ");
                }
                printf("\n");
                success = true;
                break;
            }
        }
        if(!success)
        {
            printf("Please contact our staff to buy tickets\n");
            return;
        }
    }
}
void debug()
{
    for(int i = 1; i <= n; i++) printf("%s\n", a[i] + 1);
}
int main()
{
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i++)
    {
        scanf("%s", a[i] + 1);
        for(int j = 1; j <= m; j++)
        {
            if(a[i][j] == '-') left[i]++, left[0]++;
        }
    }
    scanf("%d", &q);
    while(q--)
    {
        int r, k; scanf("%d%d", &r, &k);
        solve(r, k);
        //debug();
    }
    return 0;
}
posted @ 2018-11-04 20:40  Garen-Wang  阅读(166)  评论(0编辑  收藏  举报