天天看點

【noip2008】【普及組】立體圖

題目圖太多不好複制,自己去找了,反正noip到處都有。

這裡發一道普及組模拟水題,主要是為了後面的一道題,現在這裡mark一下。

直接放代碼了:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<set>
#include<map>
#include<queue>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<stack>
#define INF 2100000000
#define ll long long
#define clr(x)  memset(x,0,sizeof(x))
#define clrmax(x)  memset(x,127,sizeof(x))

using namespace std;

inline int read()
{
    char c;
    int ret=;
    while(!(c>='0'&&c<='9'))
        c=getchar();
    while(c>='0'&&c<='9')
    {
        ret=(c-'0')+(ret<<)+(ret<<);
        c=getchar();
    }
    return ret;
}

#define M 300

const char st[][]={ {"!!+---+"},
                        {"!/   /|"},
                        {"+---+ |"},
                        {"|   | +"},
                        {"|   |/"},
                        {"+---+"},};

char c[M][M];
int n,m,h,l,a[M/][M/],mx,mxp[M/];

int main()
{
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    n=read();m=read();
    for(int i=;i<=n;i++)
        for(int j=;j<=m;j++)
        {
            a[i][j]=read();
            mx=max(mx,+a[i][j]*+(n-i+)*);
            mxp[i]=max(mxp[i],a[i][j]);
        }
    for(int i=n;i>=;i--)
        for(int k=mxp[i];k>=;k--)
            for(int j=m;j>=;j--)
                if(a[i][j]>=k)
                    for(int o=mx-(n-i)*--(k-)*;o<=mx-(n-i)*-(k-)*;o++)
                        for(int p=(n-i)*+j*-;p<=(n-i)*+j*+;p++)
                            if(!c[o][p]||c[o][p]=='!')c[o][p]=st[o-(mx-(n-i)*--(k-)*)][p-((n-i)*+j*-)];
    for(int i=;i<=mx;i++,printf("\n"))
        for(int j=;j<=n*+m*+;j++)
            if(!c[i][j]||c[i][j]=='!')putchar('.');
            else putchar(c[i][j]);
    return ;
}
           

大概就是這個樣子,如果有什麼問題,或錯誤,請在評論區提出,謝謝。