T2】排座椅

横行相同时列数+1,纵行相同时行数+1。

主要是用桶排序,因为范围太大了,用sort会超时

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
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<m;j++){
if(maxs<heng[j]){
maxs=heng[j];
d=j;
}
}
heng[d]=0;
h[d]++;
}
for(int i=1;i<=l;i++){
int maxs=-1,d;
for(int j=1;j<n;j++){
if(maxs<shu[j]){
maxs=shu[j];
d=j;
}
}
shu[d]=0;
s[d]++;
} //我的四次排序:超时了 呵呵
/*
sort(heng,heng+maxheng+1,cmp);
sort(shu,shu+maxshu+1,cmp);
sort(heng,heng+k,cmp2);
sort(shu,shu+l,cmp2);
*/
for(int i=1;i<=maxheng;i++){
if(h[i]) printf("%d ",i);
}
cout<<endl;
for(int i=1;i<=maxshu;i++){
if(s[i]) printf("%d ",i);
}
return 0;
}

  

T3】传球游戏

感觉像是数学题

。。。但是并不是

  1. //知道是简单的DP
  2. //f[i][j]表示第i次传到第j个人手里的方法总数
  3. //f[i][j] = f[i-1][j-1]+f[i-1][j+1];(还要对环做一下处理)
  4. //边界:f[0][1] = 1;
  5. //解:f[m][1]
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
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<<a[m][1]<<endl;
return 0;
}

  

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 <iostream>
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<<endl){
for(int j=1;j<=l;j++)cout<<canvax[i][j];
}
return 0;
}

  

最新文章

  1. React Native知识5-Touchable类组件
  2. SharedPreferences介绍,用来做数据存储
  3. grep 命令详解
  4. 转:django 接收页面form的post数组
  5. 使用PHPExcel导出文件
  6. input 只读不能修改
  7. DMALL刘江峰:生鲜市场具有巨大O2O改造空间
  8. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
  9. 线程技术 ☞ Future模式
  10. Examples_08_08
  11. java面试题系列12
  12. iOS获取本地时间
  13. Head First设计模式之策略模式
  14. Oracle外部表与SQLLDR
  15. 开源顶级持久层框架——mybatis(ibatis)——day02
  16. Day039--HTML
  17. Java泛型用法总结
  18. CentOS 7 yum方式快速安装MongoDB
  19. 【Beta】Scrum Meeting 1
  20. 文件扩展关联命令(assoc)

热门文章

  1. 自考网络原理:安全套接字层SSL
  2. leetcode 剑指offer小结
  3. vscode 开发Vue项目
  4. 关于HTML5语义化
  5. 使用chrome自带的实时字幕功能
  6. 小程序中使用less
  7. windows 系统的端口问题
  8. JS篇(006)-怎样添加、移除、移动、复制、创建和查找节点?
  9. 关于elementui 面包屑设置
  10. vue3使用swiper 完整步骤