题目

这是一道和俄罗斯方块有关的有趣题目

底面宽度为\(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的更多相关文章

  1. 【HDOJ1811】【并查集预处理+拓扑排序】

    http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) ...

  2. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  4. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  5. 【AutoMapper官方文档】DTO与Domin Model相互转换(上)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  6. 【Win 10 应用开发】应用预启动

    所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...

  7. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  8. 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】

    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...

  9. 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包

            微信支付教程系列之现金红包           最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...

  10. 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付

    微信支付教程系列之扫码支付                  今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...

随机推荐

  1. 记vs2017编辑launchSettings.json中launchUrl错误

    当编辑launchSettings.json中launchUrl后,api访问出错,Swagger页面不能使用. 解决方法:将项目根目录下.vs文件夹删除,然后重新生成,ok

  2. 发送邮件使用html模板的实现的大致思路

    客户最近有一个需求,大致的意思是提供一个 word文档,让其作为一个模板,在发送邮件的时候能够实现按照这个模板的样式和内容,替换其中 的一些字段,作为邮件的内容发给收件人.这个需求最大的问题就是在于这 ...

  3. 带入gRPC:分布式链路追踪 gRPC + Opentracing + Zipkin

    在实际应用中,你做了那么多 Server 端,写了 N 个 RPC 方法.想看看方法的指标,却无处下手? 本文将通过 gRPC + Opentracing + Zipkin 搭建一个分布式链路追踪系统 ...

  4. System.ValueTuple 未定義或匯入預先定義的類型

    System.ValueTuple 没有定义或者导入 'System.ValueTuple´2´ is not defined or imported System.ValueTuple 未定義或匯入 ...

  5. JavaScript 之 navigator 对象

    navigator 对象可以查看用户所使用的浏览器类型和系统平台类型. 1.userAgent  通过 userAgent 可以判断用户浏览器的类型. Chrome 浏览器效果: 2.platform ...

  6. 滥用exchage远程调用域管理员API接口

    0x00 前言 在大多数的Active Directory和Exchange中,Exchange服务器具有很高的权限,即Exchange服务器上的管理员可以很容易地将权限提升到域管理员权限,我在zdi ...

  7. setsockopt()函数使用

    closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket BOOL bReuseaddr=TRUE; setsockopt (s,SOL_SOCKET ,SO ...

  8. JVM 源码解读之 CMS 何时会进行 Full GC

    t点击上方"涤生的博客",关注我 转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注. 前言 本文内容是基于 JDK 8 在文章 JVM 源码解读之 CMS GC 触 ...

  9. OCR5:预处理

    Tesseract4.X已经有了初步成效(见下面的对比), 但目前结果对于训练之外的数据, 仍会有很大的偏差.想要更好的 OCR 结果, README 中重点强调的一点是: 在交给 Tesseract ...

  10. AOP的动态实现cglib和jdk

    动态代理的两种实现以:cglib和jdk,spring的aop(切面)的实现原理就是采用的动态代理技术. 看完代码.动态代理的作用是什么: Proxy类的代码量被固定下来,不会因为业务的逐渐庞大而庞大 ...