[BZOJ4790][构造] CERC 2016 D. Dancing Disks

BZOJ 2139 road(构造,最小生成树)【BZOJ 修复工程】 【BZOJ修复计划 #8】BZOJ 2139 road 【国家集训队】 阅读详情

CERC2016 D题

题意

有个6*6的棋盘,刚开始在(1,1)这个点有n个棋子叠起来(棋子大小无序),你可以从顶部移动任意多个棋子到相邻的位置,但是只能向下或者向右移动,要求你构造一种移动方法使所以棋子移动到(6,6)并且棋子大小从底向上降序

Sample
input
6
1 6 5 4 3 2
output
1 1 D 6
2 1 D 6
4 1 D 6
5 1 D 6
6 1 R 6
6 2 R 6
6 3 R 6
6 4 R 6
6 5 R 5
6 5 R 1


x y R/D w 表示从(x,y)顶部取w个棋子想右/下移动

一到机房就被Manchery安利了这题……
搜CERC2016可以搜到题面题解

考虑n路归并,可以从(1..x,1..y)的格子归并到(x,y)

这里写图片描述

——图片自CERC2016

(1,1)因为没有移动,所以只能保证顶部第一个棋子是有序的,(2,1)(1,2)可以通过比较(1,1)的顶部两个棋子来做到两个棋子的升序,(2,2)可以归并(1,1)(2,1)(1,2)做到5个有序……其他的格子可以从它之前的格子中n路归并得到序列。递归处理就可以了。
大概(6,6)刚好可以做到40000
要做到从底向上升序的话,之前的格子得从底向上降序,反之亦然

粗略算了下复杂度……大概O(66+36nlog36)?? 反正跑得过……

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#define X first
#define Y second

using namespace std;

typedef pair<int,int> pari;
typedef pair<int,pari> par;

int n;
int C[10][10];
stack<int> A[10][10],B[10][10];
priority_queue<par,vector<par>,less<par> > Q1;
priority_queue<par,vector<par>,greater<par> > Q2;

inline void move(int i,int j,int x,int y){
    for(;i<x;i++) printf("%d %d D 1\n",i,j);
    for(;j<y;j++) printf("%d %d R 1\n",i,j);
}

inline void Sort1(int x,int y){
    for(int i=1;i<=x;i++)
        for(int j=1;j<=y;j++)
            if((i!=x||j!=y)&&!A[i][j].empty()) Q1.push(par(A[i][j].top(),pari(i,j)));
    while(!Q1.empty()){
        A[x][y].push(Q1.top().X);
        int i=Q1.top().Y.X,j=Q1.top().Y.Y; Q1.pop();
        move(i,j,x,y); A[i][j].pop();
        if(!A[i][j].empty()) Q1.push(par(A[i][j].top(),pari(i,j)));
    }
}

inline void Sort2(int x,int y){
    for(int i=1;i<=x;i++)
        for(int j=1;j<=y;j++)
            if((i!=x||j!=y)&&!A[i][j].empty()) Q2.push(par(A[i][j].top(),pari(i,j)));
    while(!Q2.empty()){
        A[x][y].push(Q2.top().X);
        int i=Q2.top().Y.X,j=Q2.top().Y.Y; Q2.pop();
        move(i,j,x,y); A[i][j].pop();
        if(!A[i][j].empty()) Q2.push(par(A[i][j].top(),pari(i,j)));
    }
}

void solve(int x,int y,int wh){
    if(x==1&&y==1){
        if(!B[x][y].empty()) A[x][y].push(B[x][y].top()),B[x][y].pop();
        return ;
    }
    if((x==1&&y==2)||(x==2&&y==1)){
        if(B[1][1].empty()) return ;
        int i=B[1][1].top(); B[1][1].pop();
        if(B[1][1].empty()){ A[x][y].push(i); move(1,1,x,y); return ; }
        int j=B[1][1].top(); B[1][1].pop();
        if((i>j)^wh) printf("%d %d %c 2\n",1,1,x==1?'R':'D');
        else printf("%d %d %c 1\n%d %d %c 1\n",1,1,x==1?'R':'D',1,1,x==1?'R':'D');
        if(wh) A[x][y].push(max(i,j)),A[x][y].push(min(i,j));
        else A[x][y].push(min(i,j)),A[x][y].push(max(i,j));
        return ;
    }
    for(int i=x;i;i--)
        for(int j=y;j;j--)
            if(i!=x||j!=y) solve(i,j,wh^1);
    if(wh) Sort1(x,y);
    else Sort2(x,y);
}

int main(){
    freopen("disks.in","r",stdin);
    freopen("disks.out","w",stdout);
    scanf("%d",&n);
    for(int i=1,x;i<=n;i++){
        scanf("%d",&x); B[1][1].push(x);
    }
    solve(6,6,1);
}
Stata:手动安装ivreghdfe包的完整指南与常见问题解决 本文提供了Stata中手动安装ivreghdfe包的完整指南,包括准备工作、详细安装步骤及常见问题解决方案。ivreghdfe作为处理高维固定效应模型的强大工具,依赖ftools、reghdfe和ivreg2三个核心组件,手动安装可避免版本冲突问题。文章还分享了进阶使用技巧,如并行计算加速和保存固定效应估计值,助力用户高效完成工具变量回归分析。 阅读详情

相关推荐

syslog RFC5424协议详解

RFC5424协议解读与报文分析。

chenwr2018的博客 6690

Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks

Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks 强烈安利这道构造题目,非常有意思。 这里用到的思想是归并排序! 多路归并排序! 我们这样想,假设6*6的网格中除了最后一个网格外,其他的凡是有元素的格子中,这些元素都是严格有序的。 也就是说在每个rod上,从栈顶到栈底是严格单调递减的,那么我们可以模仿归并排序的

SUNSET 430

Windows下用VS2022编译libcurl全流程(含openssl配置避坑指南)

本文详细介绍了在Windows平台使用Visual Studio 2022编译libcurl库的完整流程,重点解决了集成OpenSSL支持HTTPS功能时的常见配置难题。从环境准备、源码获取、依赖编译到工程配置,提供了清晰的步骤和针对非默认安装路径的避坑指南,帮助开发者高效完成网络库的集成工作。

weixin_29291185的博客 245

洛谷 2320 & bzoj 1192 题解 (思维,构造)

原题链接: 洛谷 bzoj 题意简述 给定一个n(&lt;=1e9)n(&lt;=1e9)n(<=1e9),构造一个序列使得: [1,n][1,n][1,n]中所有整数是这个序列中某些元素的和 字典序最小 输出这个序列 思路 我们一开始认为:nnn是1e91e91e9,这个序列怎么也是1e81e81e8,但是为什么还要输出呢?不是要OLEOLEOLE。。。 仔细想想,并不...

LightningUZ的博客 297

基于继电器与三极管的自动水泵控制器DIY:从电路原理到PCB制作实战

继电器作为一种利用电磁原理实现电路通断控制的电气开关,其核心价值在于通过小电流信号控制大电流负载,实现强弱电之间的安全隔离。在自动化控制领域,继电器常与三极管等半导体器件配合,构成驱动电路,将微弱的传感器信号放大,从而可靠地控制电机、水泵等执行机构。这种组合技术广泛应用于工业控制、智能家居及各类电子DIY项目中,例如实现水箱水位的自动检测与控制。本文将以一个典型的自动水泵控制器项目为例,深入剖析如何利用继电器与三极管搭建水位检测与驱动电路,并详细讲解从电路设计、PCB自制(热转印法)到系统调试的完整工程实践

weixin_31774841的博客 346

如何利用VS2017创建一个简单的窗口

#如何利用VS2017创建一个简单的窗口 1、新建->Windows桌面向导 2、应用程序类型->桌面应用程序,点击确定 3、点击调试->开始调试 可建立如下图的窗口 4、可以在生成的项目文件的中找到windows17_2的应用程序,打开界面如下: 注:新建空白项目也可以,注意在解决方案资源器中添加.cpp文件,如源.cpp文件,下载代码见博文 ...

weixin_46894139的博客 2914

BZOJ 3101(N皇后-N皇后O(n)构造一组解的方法)

3101: N皇后 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 70  Solved: 32 [Submit][Status] Description n*n的棋盘,在上面摆下n个皇后,使其两两间不能相互攻击… Input 一个数n Output

nike0good |Oier&ACMer | 熟能生巧 2931

FUEL算法解读(一)——框架解读,思维导图可以很清晰看懂算法启动框架,已更新完,图太大放不上来链接在文末

一图看懂FUEL算法节点框架!!!

weixin_43793717的博客 2784

[构造] Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks

FB! 懒 直接搬题解吧 先令fn,mf_{n,m}表示n∗mn*m的网格能排序的最大数量 我们把左上角这一格里的数 按大小分到其他块中 其中(i,j)(i,j)最多放fn−i+1,m−j+1f_{n-i+1,m-j+1}个 然后递归的做就好了 我们发现某根柱子就算本来有东西也毫不影响 踩上去就是了 这样是fn,m=∑i=1n∑j=1mfi,j     i≠n or j≠mf1,1=1

雯舞 694

ATECC508A芯片开发笔记(三):获取508A串号、随机数源码及I2C抓包分析

ATECC508A芯片开发笔记(三):读取508A串号、获取随机数源码及I2C抓包分析 APP层函数编写及源码分析 At508_GetSernum() GetSernum抓包记录 At508_GetRandom( ) GetRandom抓包记录 经过前两章节,CryptoAuthlib库已经成功适配在代码中了,下面简单测试一下API函数,并分析下I2C通讯流程: APP层函数编写及源码分析利用li

HowieXue 薛永浩的博客 2万+

智能合约监控告警:提示工程架构师用AI Prompt实现精准预警

当AI大模型(尤其是代码理解模型如CodeLlama、GPT-4 Code)与区块链数据结合,智能合约监控迎来范式革新。AI模型如何精准理解智能合约的业务特殊性?如何避免"AI幻觉"导致的误报?如何让模型学会区分"正常异常"与"攻击前兆"?答案藏在"提示工程"(Prompt Engineering)中。理解特定智能合约的业务逻辑(如DeFi协议的清算机制、NFT的铸造规则)识别复杂的攻击模式(如重入攻击的调用链特征、闪电贷的套利路径)结合链上链下数据进行多维度推理(如关联价格波动与异常交易)

AI架构全栈开发实战笔记 1010

CERC2016 gym101173C

Problem C: Convex Contour题目链接: http://codeforces.com/gym/101173题意给你若干个三角形、圆型、正方形摆成一排,问周长。题解分上下左右进行计算,注意三角形到圆形的连线是切线。#include<bits/stdc++.h>using namespace std;typedef long long ll; const int SIZE = 1;c

czw's blog 1193

8 卡 GPU 服务器与 NVLink/NVSwitch 互联技术

NVLink 是一种点对点的高速互连技术,单条 NVLink 就是一条全双工双路信道,每条 NVLink 链路可以将 2 个 GPU 直连起来,并且每个 GPU 可以提供多条 NVLink 接口连接多个 GPU。另外,PCIe Switch 互联拓扑中的 GPU 之间可能存在 GPU0→Switch0→CPU0→CPU1→Switch1→GPU7 的通信链路,它的通信不可避免的存在一定的延迟,因而更适合用于对信号效率不敏感且追求性价比的使用场景,如:推理、云计算等领域。本文讨论的是单机 GPU 卡间互联。

烟云的计算 4262

[CERC2016][JZOJ5000]Bipartite Blanket 结论

状态压缩dp,F[mask]表示一边的点集mask是否存在完备匹配(左右各做一次),依据Hall定理转移 将左右所有存在完备匹配的点集合的权值和算出来塞到两个数组里,two pointers判权值和够不够就行了#include <bits/stdc++.h> #pragma GCC optimize(2) #define tn ((1<<n)-1) #define tm ((1<<m)-1) #d

HbFS- 880

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【XVII Open Cup E.V. Pankratiev. Grand Prix of Europe. D】Dancing Disks 题解

题目大意   有一个 6×6 的网格图,每个格子上有一根柱子。   现在有 n 个盘子套在 (1,1) 的柱子上,自底向上分别为 a1,a2,⋯ ,an​(构成一个大小为 n 的排列)。   每次操作你可以选择一根柱子,将其最上面的连续若干个盘子拿起,往下走一格或往右走一格。   请构...

Four's 408

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

BZOJ 2407 探险

dijkstra+思路

依然一笑作春温。 683

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Bzoj4503:两个串:FFT,构造

题目链接:4503:两个串 听说这样的通配符匹配问题常用FFT搞一搞?好吧蒟蒻并不会 对于这道题如果没有通配符,我们构造一个函数 这样如果s1和s2相等当且仅当f[x]=0 但是这道题有通配符,所以我们要把是通配符的位置s2[i]=0 然后变换一下公式可得: 这样有通配符的位置相应的函数值就会为0,表示可以匹配一切 但是这样没法做,于是将s2数组拧一拧,翻转过来,发现就是一个卷积之类

蜜の夜明け 1893

构造题(bzoj2296)

#include #include #include #include using namespace std; int t; int main(){  cin>>t;  while(t--){   int x;   scanf("%d",&x);   long long now=1234567890000000;   now+=x; now-=now%x;   if(x

renxinyu2002的博客 466

BZOJ 4412/Usaco2016 Feb Circular Barn(构造)

BZOJ 4412 /Usaco2016 Feb Circular Barn

sherlock_zhuang的博客 1288

bzoj 5044 岛屿生成 构造

Description 小Q设计了一款2D游戏,它的地图建立在二维笛卡尔坐标系上。这个游戏最大的特色就是可以随机生成地图,但是 岛屿生成却给小Q带来了巨大的麻烦。一个岛屿可以看成一个恰好有n个顶点的简单多边形,每个顶点的坐标都必须 是整数,同时为了防止精度误差,每条边的长度也必须是整数。为了体现程序的随机性,任何一条边都不能与x轴 或者y轴平行。当然,这个多边形不能自交,也不允许连续3

弱菜zc 685

CERC2016 gym101173L

Problem L: Lost LogicGustav is reading about 2-satisfiability, a well known problem of assigning truth values to boolean variables in order to satisfy a list of constraints — simple logical formulas inv

czw's blog 4625

BZOJ4345 POI2016Korale(构造+堆+线段树)

  注意到k与n同阶,考虑构造一种枚举子集的方式,使得尽量先枚举较小的子集。首先sort一下,用堆维护待选子集。每次取出最小子集,并加入:1.将子集中最大数ai替换为ai+1 2.直接向子集中添加ai+1 这两个子集(若不存在ai+1则不操作)。如此操作k次即可得到第一问的答案。   对于正确性,我们证明当删除一个子集后恰好比他大的下一个子集一定在堆中。采取归纳和反证。显然每个子集都可以由上面的...

weixin_30881367的博客 168

舞蹈链(Dancing Links)算法

关于舞蹈链,可以看以下两篇博客: 跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题 http://www.cnblogs.com/grenet/p/3145800.html 算法实践——舞蹈链(Dancing Links)算法求解数独 http://www.cnblogs.com/grenet/p/3163550.html 或是看hihocoder上的两道

hermito的专栏 2452

bzoj3802 cerc2014 Vocabulary

3802: Vocabulary Time Limit: 10 Sec Memory Limit: 128 MB Submit: 54 Solved: 11 [Submit][Status] Description 给你三个字符串,这些字符串有些单词模糊不可认了,用"?"来代表。 现在你可以用任意英文小写字母来代表它们。要求是使得给定的三个字符串中 所有的"?"被你认定的字母

u012647218的专栏 1237

[构造] Codeforces Gym 101173 CERC 16 K & BZOJ 4796 Key Knocking

每三个一起考虑 不论如何 我们都可以进行最多一次操作使得答案加2 就好了#include<cstdio> #include<cstdlib> #include<algorithm> #include<string> #include<cstring> using namespace std;const int N=1000005; char s[N]; int n;const int op[]={

雯舞 1002
上一篇: [BZOJ4800][Ceoi2015][Meet In Middle]Ice Hockey World Championship
下一篇: [BZOJ4804][积性函数][线性筛][莫比乌斯反演]欧拉心算
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值