【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 微信支付教程系列之扫码支付
微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...
随机推荐
- 记vs2017编辑launchSettings.json中launchUrl错误
当编辑launchSettings.json中launchUrl后,api访问出错,Swagger页面不能使用. 解决方法:将项目根目录下.vs文件夹删除,然后重新生成,ok
- 发送邮件使用html模板的实现的大致思路
客户最近有一个需求,大致的意思是提供一个 word文档,让其作为一个模板,在发送邮件的时候能够实现按照这个模板的样式和内容,替换其中 的一些字段,作为邮件的内容发给收件人.这个需求最大的问题就是在于这 ...
- 带入gRPC:分布式链路追踪 gRPC + Opentracing + Zipkin
在实际应用中,你做了那么多 Server 端,写了 N 个 RPC 方法.想看看方法的指标,却无处下手? 本文将通过 gRPC + Opentracing + Zipkin 搭建一个分布式链路追踪系统 ...
- System.ValueTuple 未定義或匯入預先定義的類型
System.ValueTuple 没有定义或者导入 'System.ValueTuple´2´ is not defined or imported System.ValueTuple 未定義或匯入 ...
- JavaScript 之 navigator 对象
navigator 对象可以查看用户所使用的浏览器类型和系统平台类型. 1.userAgent 通过 userAgent 可以判断用户浏览器的类型. Chrome 浏览器效果: 2.platform ...
- 滥用exchage远程调用域管理员API接口
0x00 前言 在大多数的Active Directory和Exchange中,Exchange服务器具有很高的权限,即Exchange服务器上的管理员可以很容易地将权限提升到域管理员权限,我在zdi ...
- setsockopt()函数使用
closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket BOOL bReuseaddr=TRUE; setsockopt (s,SOL_SOCKET ,SO ...
- JVM 源码解读之 CMS 何时会进行 Full GC
t点击上方"涤生的博客",关注我 转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注. 前言 本文内容是基于 JDK 8 在文章 JVM 源码解读之 CMS GC 触 ...
- OCR5:预处理
Tesseract4.X已经有了初步成效(见下面的对比), 但目前结果对于训练之外的数据, 仍会有很大的偏差.想要更好的 OCR 结果, README 中重点强调的一点是: 在交给 Tesseract ...
- AOP的动态实现cglib和jdk
动态代理的两种实现以:cglib和jdk,spring的aop(切面)的实现原理就是采用的动态代理技术. 看完代码.动态代理的作用是什么: Proxy类的代码量被固定下来,不会因为业务的逐渐庞大而庞大 ...