Codeforces Raif Round 1 (Div. 1 + Div. 2) D

2023-05-16

D - Bouncing Boomerangs

分析

一个stack用于存只有一个的物品的行的物品位置,一个queue用于存有两个物品的行的左边物品位置

(其实这两个容器用stack还是queue无所谓,只是这样易于区分)

先安排最后一列:0不放,1在[n][n]的位置放

然后从n-1列往前逐列安排,策略:

a[i]=0,continue。

a[i]=1,往上升一行(即 去到一个全新的行),放置,同时把这个物品的信息压入stack。

a[i]=2,因为每行最多放两个物品,所以去找之前只有一个物品的行物品,这个物品的行是tt,那么第i列放置位置为[tt][i]。把用过的物品从stack中弹出,同时把刚放置的物品位置压入queue。

a[i]=3,先找之前有两个物品的行左边物品,让回旋镖第三次碰撞到这个物品上。因为这个物品的行已经有两个物品,不能再添加物品,所以可以看作“废弃的行”,那既然如此,为什么不让这个行发挥一下“余热”,去作为另一个回旋镖的第三次碰撞单位呢?所以,全新的一行为row,左边物品列是yy,那么放置的两个物品位置为[row][i]、[row][yy]。把用过的左边物品从queue中弹出,把[row][i]压入queue。

还是a[i]=3,如果找不到有两个物品的行,还可以找有一个物品的行物品让回旋镖第三次碰撞到这个物品上。作用和使用方法跟上一段的左边物品相同,但因为这一行不是“废弃的行”,所以不是首选。这个物品作为第三次碰撞的物品后,的左边就不能再有物品,所以把物品信息从stack中弹出,把[row][i]压入queue。

在整个过程中,一旦发现stack或queue空了,导致没法安排当前元素,直接输出-1return。

用vector存答案,最后统一输出。

代码

#include<bits/stdc++.h>
#define ll long long
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
int n,a[100005];
vector<pair<int, int> > v;
stack<pair<int, int> > s; //存只有一个的点行的点 
queue<pair<int, int> > q; //存有两个点行的左边那个点 
void solve(){
    cin>>n;
    rep(i,1,n){
        cin>>a[i];
    }
    if(a[n]>1){
        cout<<"-1\n"; return;
    }
    int temrow=0,flag;
    if(a[n]==1){
        v.push_back({n,n});
        temrow=n;
        s.push({n,n});
        flag=1;
    }
    for(int i=n-1;i>=1;i--){
        if(a[i]==0) continue;
        if(a[i]==2){
            flag=0;
            if(s.empty()){
                cout<<"-1\n";
                return;
            }
            pair<int,int> tt=s.top();
            s.pop();
            v.push_back({tt.first, i});
            q.push({tt.first, i});
        }
        if(a[i]==1){
            flag=1;
            if(temrow==0){
                v.push_back({n,i});
                temrow=n; 
                s.push({n,i});
                continue;
            }
            if(temrow>1){
                temrow--;  
                s.push({temrow,i});
                v.push_back({temrow,i}); 
                continue;
            }
            cout<<"-1\n"; return;
        }
        if(a[i]==3){
            if(temrow>1){
                temrow--;
                v.push_back({temrow,i});
                if(!q.empty()){
                    pair<int,int> tt=q.back();
                    q.pop();
                    v.push_back({temrow, tt.second});
                    q.push({temrow,i});
                } 
                else{
                    if(s.empty()){
                        cout<<"-1\n";return;
                    }
                    pair<int,int> tt=s.top();
                    s.pop();
                    v.push_back({temrow, tt.second});
                    q.push({temrow,i});
                }
                continue;
            }
            cout<<"-1\n"; return;
        }
    }
    
    if(v.empty()) {cout<<"0\n"; return;}
    
    cout<<v.size()<<"\n";
    rep(i,0,v.size()-1){
        cout<<v[i].first<<" "<<v[i].second<<"\n";
    }
} 
int main(){
    ios_base::sync_with_stdio(false); 
    cin.tie(0); 
    cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Codeforces Raif Round 1 (Div. 1 + Div. 2) D 的相关文章

  • 我的网页作品(div+css)

    前段时间为一个育儿网站做了一个个人空间主页 xff0c 这可是我的处女座 呵呵 请点击查看 xff1a Files shiyangxt baobaoke rar
  • HTML5 section、article和div区别

    在HTML5中 xff0c 规定开发过程中更加注重语义化和代码的结构标准 当中section article和div是非常相似的东西 xff0c 许多人无法区分它们 当初我对于这三个标签也很迷茫 xff0c 觉得都没什么区别 xff0c 用
  • Codeforces Round #291 (Div. 2)

    题目链接contest 514 A Chewba ca and Number 不允许有前导零 所以如果第一位是9的话 需要特别考虑 一开始理解错了题意 又WA了呜呜呜 include
  • C. Doremy‘s IQ(二分/贪心)

    题目 题意 给定n个任务和艾米的智商q 艾米要按顺序处理这n个任务 每个任务有难度值a i 对于每个任务 艾米可以选择处理 也可以选择不处理 如果艾米当前的智商q大于等于任务a i 则艾米可以直接处理该任务 智商不受任何影响 如果艾米当前的
  • Connected Components?【Codeforces 920E】【补图的联通块的个数】

    Educational Codeforces Round 37 Rated for Div 2 E 怎么说呢 跟这道题是一样的 这道题就变得很模板了 原题 include
  • 1400*A. World Football Cup(模拟)

    Problem 19A Codeforces 解析 模拟 记录总得分 净胜球 进球数 坑点 其中注意净胜球是进球数的差 己方进球数 对手进球数 可以为负数 排序即可 include
  • Catowice City【Codeforces 1248 F】【Tarjan】

    Codeforces Round 594 Div 2 F 这道题的解法还真是不少 写了个枚举也可以做这道题 当然Tarjan自然也是可以的 我一开始没捋清楚思路 再想想 发现 我们看到审判者 他们都会指向一些参赛选手 那么我们是不是可以尽力
  • 1600*D. Constructing the Array(优先队列

    解析 每次找到最长的连续0序列 取其中点置为 i 优先队列维护 优先按照长度排序 相同则按照下标左优先排序 include
  • 上下div之间有间距的问题

    我写了4个div 上下分布 均存在间距 代码以及效果如下 div1 height 100px background color blue position relative div2 height 100px background colo
  • 【带限制的完全背包】Educational Codeforces Round 133 (Rated for Div. 2) D. Chip Move

    题意 给定 n n n 和 k k k 初始步长为 k k k 每次可以走
  • [转]background-image属性研究

    http blog sina com cn s blog 4a0eab070100d8pk html 在设置background image属性时 经常会遇到一个background position 一直不怎么会用 今天有空研究下 版本
  • Codeforces Round #552 (Div. 3)

    A Restoring Three Numbers time limit per test 1 second memory limit per test 256 megabytes input standard input output s
  • Matlab 如何生成一个[a,b]范围内随机整数的2种方法【已经解决】

    如何使用MATLAB生成一个 a b 范围内的随机整数 比如 随机生成 9 13 范围内的一个 或多个 整数 首先感谢 slandarer的指正 现已经更改 round 为四舍五入取整 而非向上取整 方法1为一个较为不错的方法 方法1 ra
  • 1400*C. No Prime Differences(找规律&数学)

    解析 由于 1 不是质数 所以我们令每一行的数都相差 1 对于行间 分为 n m之中有存在偶数和都为奇数两种情况 如果n m存在偶数 假设m为偶数 如果都为奇数 则 include
  • 1096C - Polygon for the Angle-几何-性质

    思路 根 据 几 何 性 质 正 多 边 形 所 有 三 个 点组成的 角 都 是最小角的倍数 然后根据内角公式 可以求出 正多边形 最小角为 多边形内角 n 2 然后 打表发现 180边形最小角为1 最大角 178 所以 只有 179无法
  • Portal_JS,用JS实现的Portlet效果

    有一年多没有关顾自己的博客了 然还有部分博友造访 令我万分感动 现在发布一下最近的一个组件 PortletWin package ElementUtils js author 熊水林 xionglb 163 com version 版权所有
  • jquery筛选器

    在Web应用程序中 大部分的客户端操作都是基于对象的操作 要操作对象就必须先获取对象 jQuery提供了强大的选择器让我们获取对象 我人为地将jQuery选择器分为两大部分 选择对象和筛选条件 选择对象表示要获取什么对象 筛选条件是对获取的
  • Educational Codeforces Round 149 (Rated for Div. 2)A~D

    Grasshopper on a Line 题意 给出n和k 求从0到n最少走几步 以及步长 要求步长不能整除k 思路 从n往下找到 k不等于0的数 输出该数和n 该数即可 如果n k 0 那就只需要一步 代码 gt File Name a
  • 简短的 mouseover 显示与隐藏层的办法

    简短的 mouseover 显示与隐藏层的办法 在制作 mouseover 和 mouseout 显示 隐藏层的时候 有时总会出现 mouseover 层里面的对象时 层消失的情况 这是因为mouseover 层内 对象时 会对前层产生两个
  • 1300*C. Page Numbers

    解析 注意单个数的情况 include

随机推荐

  • Linux命令行初接触-1 操作文件和目录

    操作文件 amp 目录 1 通配符含义常用通配符常用字符类类型匹配范例 2 mkdir 创建目录3 cp 复制文件和目录工作方式常用选项 4 mv 移动和重命名文件工作方式常用选项 5 rm 删除文件和目录工作方式常用选项注意事项 6 ln
  • 机器学习入入入入门(1)机器学习基本概念、引出深度学习

    机器学习入入入入门 xff08 1 xff09 0 前言1 基本步骤2 基本概念2 1 Hyperparameters2 2 local minima 3 linear model3 1 基础概念 4 piecewise linear cu
  • 深度学习蒟蒻入门——从0安装pytorch(CPU版)

    从0安装pytorch 1 检查自己的电脑有没有GPU2 安装CPU版的pytorch3 测试pytorch 1 检查自己的电脑有没有GPU 首先打开任务管理器 xff0c 选择性能栏 然后滑到最下 xff0c 看是否有GPU一项 xff0
  • 系统学习iOS动画 —— Stroke和路径动画

    这是要完成的动画 xff1a 先添加需要的代码 xff0c 这里需要将storyboard的ViewController换成TableViewController xff0c 将Under Top Bars 和 Under Bottom B
  • 不知道这些网站还做什么程序员呀!

    今天我就来总结一些程序员必备的网站 xff0c 囊括开源项目 解决bug 技术分享 一线资源和自我提升的网站 xff0c 希望能对广大程序猿有所帮助 xff0c 赶紧给我收藏起来 xff0c 下次刷不到了可别说我没提醒你 我们首先来看一下国
  • (音视频开发)WebRTC进阶流媒体服务器开发-多人互动架构

    一 xff1a 多人互动架构方案 xff08 一 xff09 WebRTC回顾 xff0c 两层含义 xff1a 1 WebRTC是google开源的流媒体客户端 xff0c 可以进行实时通讯 xff0c 主要应用于浏览器之间进行实时通讯
  • 10种linux下磁盘快照方式恢复系统

    导读大家都知道windows系统有一个磁盘快照的功能 xff0c 在windows2003中系统恢复开始依赖于一个叫做硬盘快照服务 Volume Snapshot Service 的服务 xff0c 他能够自动创建系统快照 包括正在使用的文
  • ubuntu安装go开发环境

    一 为ubuntu20 04更新源 给root用户设置密码 xff1a 命令 xff1a sudo passwd root 备份原来的源 xff0c 命令 xff1a sudo cp etc apt sources list etc apt
  • 如何修复Ubuntu中包缓存文件被毁问题

    导读今天 xff0c 我尝试更新我的 Ubuntu 18 04 LTS 的仓库列表 xff0c 但收到了一条错误消息 xff1a E The package cache file is corrupted it has the wrong
  • 1002 A+B for Polynomials (25分) 详解+易错点

    注意点 xff1a 系数为0 xff0c 则不输出 xff0c 例 xff1a 其中 1和1相加为0 xff0c 则在输出时避免这一项 xff0c 而且要注意结果的K值 xff0c 不要包括这一项 xff0c 思路 xff0c 利用结构体存
  • Linux远程桌面的选择

    Linux的远程桌面主要分两个部分 xff1a Linux客户机连Linux服务器和Windows客户机连Linux服务器 xff0c 还有现在用平板电脑连远程桌面 Linux客户机连Windows服务器比较简单没啥可说的 xff0c rd
  • Kali Linux mdk3WiFi洪水攻击 攻击路由器 生成虚假WiFi WiFi身份验证攻击可使连接WiFi的手机掉线重连抓包

    将无线网卡转换为监听模式 airmon ng start wlan0 查找附近无线网络 airodump ng wlan0mon Authentication DoS xff1a xff08 洪水攻击 xff0c 又叫做身份验证攻击 xff
  • 大一java程序设计的某次作业题解

    题目描述 xff1a 设计程序实现输入日期及机票张数 xff0c 计算出应付金额 假设北京至上海的机票全价为 1200 元 张 xff0c 以 2017 年为例进行程序编写 xff0c 所有的法定假日 xff0c 机票无折扣 xff1b 除
  • D. Make It Round(1759D)

    要求n k后缀0数量最多 xff08 k lt 61 m xff09 xff0c 且n k尽可能大 比赛时思路 xff08 错误 xff09 xff1a 10是由2和5组成 xff0c 故先统计n的因子包含2的个数num2 包含5的个数nu
  • Codeforces Round #841 (Div. 2)

    B Kill Demodogs 分析 显然要选择和两斜线的元素相加 所以答案可以表示为 xff1a 即 xff1a 根据公式 得答案为 但答案不能直接得这个 因为n的范围为1e9 xff0c 而ull的范围为1e20 xff0c 答案的第一
  • Educational Codeforces Round 141 Editorial C~D

    1783C Yet Another Tournament 分析 正解思路是贪心 开始自己也想的贪心 xff1a 首先显然打败的人数越多越好 xff0c 然后选择权值最小的人打败 这个思路前半部分没问题 xff0c 后半部分过不了样例的第二个
  • Codeforces Round #844 (Div. 1 + Div. 2, based on VK Cup 2022 - Elimination Round) D

    1781D Many Perfect Squares 分析 对于每组 xff0c 若和均为完全平方数 xff0c 则存在 xff1a 所以枚举所有 xff0c 对于每个 xff0c 枚举其所有 双因子对 xff0c 若两个因子之差为偶数 x
  • 匹配已有字符串

    生活小妙招 通过set和substr函数 xff0c 方便快捷地写出匹配已有字符串的代码 前置芝士 xff1a set使用详解 题目 xff1a G Perfect Word 代码实现 通过set 43 string的substr的使用快速
  • 在vue中使用rules的定义和校验规则

    表单内容里面定义属性 lt Form ref 61 34 rulesForm 34 model 61 34 rulesForm 34 label width 61 34 100 34 rules 61 34 rules 34 gt lt F
  • Codeforces Raif Round 1 (Div. 1 + Div. 2) D

    D Bouncing Boomerangs 分析 一个stack用于存只有一个的物品的行的物品位置 xff0c 一个queue用于存有两个物品的行的左边物品位置 xff08 其实这两个容器用stack还是queue无所谓 xff0c 只是这