横行相同时列数+1,纵行相同时行数+1。
主要是用桶排序,因为范围太大了,用sort会超时
#include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn=1010; const int INF=0x3fffffff; int m,n,k,l,d; int xi,xj,yi,yj; int heng[1001],shu[1001]; int h[1001],s[1001]; int main(){ scanf("%d %d %d %d %d",&m,&n,&k,&l,&d); //这题数据量大,用cin肯定会超时的 int maxheng=0,maxshu=0; for(int i=1;i<=d;i++){ scanf("%d %d %d %d",&xi,&xj,&yi,&yj); if(xi==yi) { int t=min(xj,yj); if(t>maxshu) maxshu=t; shu[t]++; } else if(xj==yj) { int t=min(xi,yi); if(t>maxheng) maxheng=t; heng[t]++; } } for(int i=1;i<=k;i++){ //桶排序 ,用sort很费时 int maxs=-1,d; for(int j=1;j T3】传球游戏 感觉像是数学题 。。。但是并不是 //知道是简单的DP //f[i][j]表示第i次传到第j个人手里的方法总数 //f[i][j] = f[i-1][j-1]+f[i-1][j+1];(还要对环做一下处理) //边界:f[0][1] = 1; //解:f[m][1] #include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn=1010; const int INF=0x3fffffff; //知道是简单的DP //f[i][j]表示第i次传到第j个人手里的方法总数 //f[i][j] = f[i-1][j-1]+f[i-1][j+1];(还要对环做一下处理) //边界:f[0][1] = 1; //解:f[m][1]; int a[maxn][maxn]; int n,m; int main(){ cin>>n>>m; int l,r; a[0][1]=1; for(int i=1;i<=m;i++){ //传m次 for(int j=1;j<=n;j++){ if(j==1) l=n; else l=j-1; if(j==n) r=1; else r=j+1; a[i][j]=a[i-1][l]+a[i-1][r]; } } cout< T4】立体图 怕了怕了 看起来就好复杂 就是模拟 1 算出画布的长宽L、K L = 4n+1+2m k = max(3*h[i][j]+1+2*(m-i+1)); 2 立方体(i, j)的左下角在画布上的坐标(x, y) x = k - 2*(m-i) y = 4*(j-1)+2*(m-i)+1; 3 写出Draw(i, j)函数 以画布i,j为左下角画一个方格 #include using namespace std; int m, n, k, l; int h[101][101]; char canvax[1001][1001]; char block[6][8]={ "..+---+", "./ /|", "+---+ |", "| | +", "| |/.", "+---+..", }; void draw(int x,int y){ for(int i=0;i<6;i++){ for(int j=0;j<7;j++){ //x,y是左下角 if(block[i][j]!='.') canvax[x-5+i][y+j]=block[i][j]; } } } int main(){ cin>>m>>n; l=4*n+1+2*m; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>h[i][j]; k=max(k,3*h[i][j]+1+2*(m-i+1)); } } for(int i=1;i<=k;i++){ for(int j=1;j<=l;j++) canvax[i][j]='.'; } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ int x,y; x=k-2*(m-i); y=4*(j-1)+2*(m-i)+1; while(h[i][j]>0){ h[i][j]--; draw(x,y); x-=3; } } } for(int i=1;i<=k;i++,cout<
感觉像是数学题
。。。但是并不是
#include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn=1010; const int INF=0x3fffffff; //知道是简单的DP //f[i][j]表示第i次传到第j个人手里的方法总数 //f[i][j] = f[i-1][j-1]+f[i-1][j+1];(还要对环做一下处理) //边界:f[0][1] = 1; //解:f[m][1]; int a[maxn][maxn]; int n,m; int main(){ cin>>n>>m; int l,r; a[0][1]=1; for(int i=1;i<=m;i++){ //传m次 for(int j=1;j<=n;j++){ if(j==1) l=n; else l=j-1; if(j==n) r=1; else r=j+1; a[i][j]=a[i-1][l]+a[i-1][r]; } } cout< T4】立体图 怕了怕了 看起来就好复杂 就是模拟 1 算出画布的长宽L、K L = 4n+1+2m k = max(3*h[i][j]+1+2*(m-i+1)); 2 立方体(i, j)的左下角在画布上的坐标(x, y) x = k - 2*(m-i) y = 4*(j-1)+2*(m-i)+1; 3 写出Draw(i, j)函数 以画布i,j为左下角画一个方格 #include using namespace std; int m, n, k, l; int h[101][101]; char canvax[1001][1001]; char block[6][8]={ "..+---+", "./ /|", "+---+ |", "| | +", "| |/.", "+---+..", }; void draw(int x,int y){ for(int i=0;i<6;i++){ for(int j=0;j<7;j++){ //x,y是左下角 if(block[i][j]!='.') canvax[x-5+i][y+j]=block[i][j]; } } } int main(){ cin>>m>>n; l=4*n+1+2*m; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>h[i][j]; k=max(k,3*h[i][j]+1+2*(m-i+1)); } } for(int i=1;i<=k;i++){ for(int j=1;j<=l;j++) canvax[i][j]='.'; } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ int x,y; x=k-2*(m-i); y=4*(j-1)+2*(m-i)+1; while(h[i][j]>0){ h[i][j]--; draw(x,y); x-=3; } } } for(int i=1;i<=k;i++,cout<
怕了怕了
看起来就好复杂
就是模拟
1 算出画布的长宽L、K
L = 4n+1+2m
k = max(3*h[i][j]+1+2*(m-i+1));
2 立方体(i, j)的左下角在画布上的坐标(x, y)
x = k - 2*(m-i)
y = 4*(j-1)+2*(m-i)+1;
3 写出Draw(i, j)函数 以画布i,j为左下角画一个方格
#include using namespace std; int m, n, k, l; int h[101][101]; char canvax[1001][1001]; char block[6][8]={ "..+---+", "./ /|", "+---+ |", "| | +", "| |/.", "+---+..", }; void draw(int x,int y){ for(int i=0;i<6;i++){ for(int j=0;j<7;j++){ //x,y是左下角 if(block[i][j]!='.') canvax[x-5+i][y+j]=block[i][j]; } } } int main(){ cin>>m>>n; l=4*n+1+2*m; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>h[i][j]; k=max(k,3*h[i][j]+1+2*(m-i+1)); } } for(int i=1;i<=k;i++){ for(int j=1;j<=l;j++) canvax[i][j]='.'; } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ int x,y; x=k-2*(m-i); y=4*(j-1)+2*(m-i)+1; while(h[i][j]>0){ h[i][j]--; draw(x,y); x-=3; } } } for(int i=1;i<=k;i++,cout<