題目圖太多不好複制,自己去找了,反正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 ;
}
大概就是這個樣子,如果有什麼問題,或錯誤,請在評論區提出,謝謝。