【JZOJ6214】【20190614】tetris
题目
这是一道和俄罗斯方块有关的有趣题目
底面宽度为\(N\),高度无限,初始时方块高度为\(A_i\)
你可以决定每次会下落一个\(1 \times K\)或者\(K \times 1\)的方块
你需要在10000次内把所有方块消完,输出方案
$N , K A_i \le 50 $
题解

#include<bits/stdc++.h>
using namespace std;
const int N=51,K=51;
int n,m,k,a[N],b[N*K],c[K],mn,mx,ans;
struct opt{int x,y;}Ans[10010];
void put(int op,int x){Ans[++ans]=(opt){op,x};}
bool judge(){
for(int i=0;i<n;++i)(c[i%k]+=a[i])%=k;
int tmp=c[0];for(int i=0;i<m;++i)if(c[i]!=tmp)return false;
tmp=c[m];for(int i=m;i<k;++i)if(c[i]!=tmp)return false;
return true;
}
int main(){
freopen("tetris.in","r",stdin);
freopen("tetris.out","w",stdout);
scanf("%d%d",&n,&k);m=n%k;
for(int i=0;i<n;++i)scanf("%d",&a[i]);
if(!judge())return puts("-1"),0;
for(int i=1;i<n;++i)while(a[i]<a[i-1])put(1,i),a[i]+=k;
mn=mx=a[0];for(int i=1;i<n;++i)mn=min(mn,a[i]),mx=max(mx,a[i]);
mx-=mn;for(int i=0;i<n;++i)a[i]-=mn,b[a[i]]++;
for(int i=mx;i;--i)b[i]+=b[i+1];
for(int i=1;i<=mx;++i)while(b[i]+k<=n)put(2,n-b[i]-k),b[i]+=k;
for(int i=0;i<k;++i)c[i]=0;
for(int i=1;i<=mx;++i)c[n-b[i]]++;
for(int i=k-1;i;--i)c[i]+=c[i+1];
mx-=c[0];
int tmp=(mx-1)/k+1;mx=tmp*k;
for(int i=0;i<k-1;++i){
for(int j=0;j<tmp;++j)put(1,i);
a[i]=mx-c[i+1];
}
for(int i=k-1;i<n;++i)a[i]=0;
mx=0;for(int i=m;i<=k-1;++i)mx=max(mx,a[i]);
for(int i=0;i<n;++i)while(a[i]<mx)put(1,i),a[i]+=k;
for(int i=0;i<n;++i)a[i]-=mx;
if(n%k){
mx=0;for(int i=0;i<m;++i)mx=max(mx,a[i]);
for(int i=0;i<m;++i)while(a[i]<mx)put(1,i),a[i]+=k;
for(int i=m;i<n;i+=k)for(int j=0;j<mx;++j)put(2,i);
}
printf("%d\n",ans);
for(int i=1;i<=ans;++i)printf("%d %d\n",Ans[i].x,Ans[i].y+1);
return 0;
}
【JZOJ6214】【20190614】tetris的更多相关文章
- 【HDOJ1811】【并查集预处理+拓扑排序】
http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(上)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 【Win 10 应用开发】应用预启动
所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...
- 【Win 10 应用开发】启动远程设备上的应用
这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...
- 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】
由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...
- 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包
微信支付教程系列之现金红包 最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付
微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...
随机推荐
- spring cloud应用
1.什么是注册中心 (1)就是首先有一个eureka server,服务的注册与发现的中心(2)你如果写好了一个服务,就可以将其注册到eureka server上去(3)然后别人的服务如果要调用你的服 ...
- vs2017专业版和企业版的密钥
Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH
- pycharm_python_flask相关学习心得逐步更新
2019-10-30: Pycharm的interpreter配置问题对于安装第三方库,如果能够在配置的可视化界面安装成功更好.如果不能可视化安装,则在pycharm的terri..仿cmd下用pip ...
- Java IO---序列化和反序列化
一.序列化和反序列化介绍 什么是序列化和反序列化? 序列化就是将对象转换为字节序列的过程. 反序列化就是将字节序列恢复为对象的过程. 序列化的用途在哪? 通常情况下,序列化有两个用途: 将对象 ...
- SpringMVC中的400错误,The request sent by the client was syntactically incorrect.
在其他对象属性类型一样情况下,只需要创建一个类,再在springmvc.xml中添加配置: package com.ujiuye.common; import org.springframework. ...
- SqlServer共用表达式(CTE)With As 处理递归查询
共用表表达式(CTE)可以看成是一个临时的结果集,可以再SELECT,INSERT,UPDATE,DELETE,MARGE语句中多次引用. 一好处:使用共用表表达式可以让语句更加清晰简练. 1.可以定 ...
- 微服务——SpringCloud(Eureka注册中心搭建)
IDE:IDEA,说实话,真不怎么喜欢用Eclipse这个IDE,太锻炼人了 配置模式:Grandle 微服务框架:SpringCloud 第一步 创建一个Spring Initializr项目 第二 ...
- java Elasticsearch 进行嵌套子聚合
聚合子查询: TermsAggregationBuilder aggregation = AggregationBuilders.terms("dt_id").field(&quo ...
- 连接mysql报"ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server"
最近在服务器上部署好的应用突然间连接不上mysql数据库,报错“ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this M ...
- 用Nodejs遍历云存储文件
起因 最近想要将云存储中的文件去重.因为有现成的Nodejs的API,所以打算用Nodejs实现此功能. 伪代码如下: scanDir = function(uri){ return new Prom ...