Falling Apples Kattis - apples (详细注释)

题目

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <string.h>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <algorithm>
#define MAX 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,m,k;
int visi[11];//判断该列是否有#
int cnt_a[11];//遍历时当前#上的苹果数
int cnt[11];//每一列的a综述
char ans[50001][11];//结果输出
char a[50001][11]; //输入的数组
int main()
{
    cin>>n>>m;
    for(int i = 0 ;i < n;i++){
        for(int j = 0 ; j < m ; j++){
            cin>>a[i][j];
            if(a[i][j] == '#')
                visi[j] = 1;
            if(a[i][j] == 'a')
                cnt[j]++;
        }
    }
    for(int j = 0 ; j < m ; j++)
    {
        if(visi[j] == 0) //没有# 直接全部落下苹果
            for(int i = n - 1 ; i >= n  - cnt[j];i--)
                ans[i][j] = 'a';
        else{ //有#         
            for(int i = 0 ; i < n ; i++)
            {
                if(a[i][j] == '#'){ //把当前#上的苹果都落下
                    ans[i][j] = '#';
                    for(int k = i - 1 ;k >=i - cnt_a[j];k--)
                        ans[k][j] = 'a';
                    cnt_a[j] = 0;
                }
                else if(a[i][j] == 'a')
                    cnt_a[j]++;
            }
            if(cnt_a[j] != 0)//把剩余的苹果都落下
                for(int i = n - 1 ; i >= n-cnt_a[j];i--)
                    ans[i][j] = 'a';
        }
    }   
    for(int i = 0 ; i < n ; i++)
    {
        for(int j = 0 ; j < m ;j++)
        {
            if(ans[i][j] != 'a' && ans[i][j] !='#')
                cout<<".";
            else
                cout<<ans[i][j];
        }
        cout<<endl;
    }
    return 0;
}

上一篇:10 个超棒的 JavaScript 简写技巧,前端开发资料分享


下一篇:Nginx 简单介绍