【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=0;
    while(!(c>='0'&&c<='9'))
        c=getchar();
    while(c>='0'&&c<='9')
    {
        ret=(c-'0')+(ret<<1)+(ret<<3);
        c=getchar();
    }
    return ret;
}

#define M 300

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

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

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

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

發佈了76 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章