28分求助,错的都是第几十行第几百个的字符
查看原帖
28分求助,错的都是第几十行第几百个的字符
941431
Autream楼主2024/3/22 16:44
#include<bits/stdc++.h>
#define arrout(a,n) rep(i,1,n)std::cout<<a[i]<<" "
#define arrin(a,n) rep(i,1,n)std::cin>>a[i]
#define rep(i,x,n) for(int i=x;i<=n;i++)
#define dep(i,x,n) for(int i=x;i>=n;i--)
#define erg(i,x) for(int i=head[x];i;i=e[i].nex)
#define dbg(x) std::cout<<#x<<":"<<x<<" "
#define mem(a,x) memset(a,x,sizeof a)
#define all(x) x.begin(),x.end()
#define arrall(a,n) a+1,a+1+n
#define PII std::pair<int,int>
#define m_p std::make_pair
#define u_b upper_bound
#define l_b lower_bound
#define p_b push_back
#define CD const double
#define CI const int
#define int long long
#define il inline
#define ss second
#define ff first
#define itn int
CI N=1e3+5;
int32_t n,ans,min=INT_MAX,limx,limy,vis[N][N];
char mp[N][N];
struct node {
    int32_t l,r,h;
    bool operator<(const node& b)const {
        if(l==b.l) {
            if(r==b.r) {
                return h<b.h;
            }
            return r<b.r;
        }
        return l<b.l;
    }
}a[10005];
signed main() {
    std::cin>>n;
    rep(i,1,n) {
        std::cin>>a[i].l>>a[i].r>>a[i].h;
        a[i].r--;
        min=std::min(min,a[i].l);
        limx=std::max(limx,a[i].r);
        limy=std::max(limy,a[i].h);
    }
    // std::sort(arrall(a,n));
    rep(i,0,limy+1) {
        rep(j,0,limx+1) {
            if(i==0) {
                mp[i][j]='*';
            } else {
                mp[i][j]='.';
            }
        }
    }
    rep(i,1,n) {
        rep(j,1,a[i].h) {
            mp[j][a[i].l]=mp[j][a[i].r]='#';
        }
        rep(j,a[i].l,a[i].r) {
            mp[a[i].h][j]='#';
        }
        int x1=1,x2=a[i].h-1,y1=a[i].l+1,y2=a[i].r-1;
        vis[x1][y1]++;
        vis[x1][y2+1]--;
        vis[x2+1][y1]--;
        vis[x2+1][y2+1]++;
    }
    rep(i,1,limy) {
        rep(j,1,limx) {
            vis[i][j]+=vis[i-1][j]+vis[i][j-1]-vis[i-1][j-1];
        }
    }
    dep(i,limy,0) {
        rep(j,1,limx) {
            if(mp[i][j]=='#'&&vis[i][j]>0) {
                mp[i][j]='.';
            }
        }
    }
    rep(i,1,limy+1) {
        rep(j,0,limx+1) {
            if(mp[i][j]=='#') {
                if(mp[i][j-1]=='.'&&!vis[i][j-1]){
                    ans++;
                }
                if(mp[i][j+1]=='.'&&!vis[i][j+1]){
                    ans++;
                }
                if(mp[i-1][j]=='.'&&!vis[i-1][j]){
                    ans++;
                }
                if(mp[i+1][j]=='.'&&!vis[i+1][j]){
                    ans++;
                }
            }
        }
    }
    std::cout<<ans<<'\n';
    dep(i,limy,0) {
        rep(j,min,limx) {
            std::cout<<mp[i][j];
        }
        puts("");
    }
    return 0;
}
2024/3/22 16:44
加载中...