【noip2008】【普及组】立体图

题目图太多不好复制,自己去找了,反正noip到处都有。
这里发一道普及组模拟水题,主要是为了后面的一道题,现在这里mark一下。
直接放代码了:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#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;
}

大概就是这个样子,如果有什么问题,或错误,请在评论区提出,谢谢。

你可能感兴趣的:(模拟,noip,noip,普及组,模拟)