D. Bouncing Boomerangs

题意
题设:在指定大小的无边界图上设弹射点,从下往上射入的飞镖,碰到的弹射点后向右90°换向。输入n,代表一张n*n的图,依次输入每列射入的飞镖必须要弹射的次数。注意:每列每行最多两个弹射点。
思路
自己写的时候,本来是正向写的,但是写着写着就发现了问题,发现这样想不行,让刚刚白白写了一个小时的代码全费了。
看了大佬的博客才知道,原来要从后往前选择每个点。
代码

#include<bits/stdc++.h>
#define ll long long
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) a*b/(__gcd(a,b))
#define rep(i,s,e) for(int i=s;i<e;i++)
#define mem(a,n) memset(a, n ,sizeof a)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
priority_queue <int,vector<int>,greater<int> > Q;
const int INF= 0x3f3f3f3f;
const int maxn= 1e5+5;
int a[maxn],a1[maxn],a2[maxn];
int h[maxn],n,t1,t2;
vector<pair<int,int> > ans;//存弹射点
int main()
{IOS;cin>>n;rep(i,1,n+1) cin>>a[i];int nh=n+1;//从后开始,逆序处理 for(int i=n;i>=1;i--) {if(a[i]==1){h[i]=--nh;a1[++t1]=i;//存入a1并计数 ans.push_back({i,h[i]});}else if(a[i]==2){if(!t1){cout<<-1;return 0;}h[i]=h[a1[t1--]];//与弹射1的点同高度,更新可用点数量a2[++t2]=i;//存入a2并计数 ans.push_back({i,h[i]});}else if(a[i]==3){if(!t1 && !t2){cout<<-1;return 0;}h[i]=--nh;ans.push_back({i,h[i]});//当前列放置对应高度弹射点 int j;if(t2)  j=a2[t2--];//优先用a2 else    j=a1[t1--]; ans.push_back({j,h[i]});//第二次弹射的点,同高度 a2[++t2]=i;}}cout<<ans.size()<<endl;for(int i=0;i<ans.size();i++)cout<<ans[i].second<<' '<<ans[i].first<<endl;return 0;
}

D. Bouncing Boomerangs相关推荐

  1. codeforces1457 C. Bouncing Ball

    写这个题写了1h,赛后无意看见jly神的代码只能膜拜%%% C. Bouncing Ball 预处理从1→k1\to k1→k开始跳需要添加多少个平台,预处从k+1→nk+1\to nk+1→n这些不 ...

  2. 1415C. Bouncing Ball

    C. Bouncing Ball:题目 很好的dp,1400分难见的题 #include <bits/stdc++.h> using namespace std; #define int ...

  3. 447. Number of Boomerangs

    题目: Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple o ...

  4. C#LeetCode刷题之#447-回旋镖的数量(Number of Boomerangs)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3792 访问. 给定平面上 n 对不同的点,"回旋镖&q ...

  5. 【Elasticsearch】Elasticsearch bouncing result 问题

    课程大纲 1.preference 决定了哪些shard会被用来执行搜索操作 _primary, _primary_first, _local, _only_node:xyz, _prefer_nod ...

  6. LeetCode447. Number of Boomerangs

    Description Given n points in the plane that are all pairwise distinct, a "boomerang" is a ...

  7. 图论 ---- 构造DFS树的思想 K - Boomerangs Gym - 102001K

    题目链接 题目大意: 解题思路: 启发性思考首先我们先图切成dfs树,然后给图一个稳定结构之后,我们就可以去构造了 对于每个点我们从第底端开始构造每次把每次点的儿子两两匹配,如果是奇数个儿子就把多出来 ...

  8. LeetCode Number of Boomerangs

    题意:给出平面上的n个点,求出元组(i,j,k)的个数,其中元组满足i与j的距离与i与k距离相等,与(i,j,k)顺序有关 思路:以一个点为起点,看其它点到该点的距离及具有一样距离的个数.在统计元组个 ...

  9. Gym - 102001K Boomerangs 构造 + 三元环

    传送门 文章目录 题意: 思路: 题意: 给你一张nnn个点mmm条边的简单图,让你找出尽可能多的三元环,要求每个三元环都不能共边,输出三元环数量和具体是那个. n,m≤1e5n,m\le1e5n,m ...

  10. 通过Scroller.js制作上拉加载和下拉刷新

    为什么80%的码农都做不了架构师?>>>    之前做移动端webAPP开发,一直是用的IScroll来做滚动列表,但是IScroll没有直接提供上下拉刷新的功能,虽然我们基于ISc ...

最新文章

  1. 信息安全隐患日趋严重 专家呼吁政策监管仍待加强
  2. Yii Model中添加默认搜索条件
  3. nginx的请求接收流程(二)
  4. eclipse从svn导入maven项目变成普通项目解决办法
  5. java开发平台普元_java开发平台的两种实现模式
  6. poj 1847 Tram 最短路 dijkstra、floyed
  7. 分析ARP***与欺骗
  8. hashset如何检查重复_如何使用 C# 中的 HashSet
  9. html css底部弧度,CSS实现底部弧度效果
  10. Unity3D 下载与安装
  11. 文华财经数据导出工具
  12. 【应用笔记】【AN002】通过iTool2基于MinGW平台读写EEPROM
  13. 6-9.添加HLSL镜面高光
  14. linux测试dvi接口,支持Linux系统的高清DVI采集卡推荐
  15. 《实践论》笔记及当下反思(一)
  16. double转换为二进制
  17. matlab生成随机数,matlab随机数生成方法
  18. 西南大学计算机科学与技术专业在哪个校区,西南大学有几个校区及校区地址 哪个校区最好...
  19. 【通俗易懂学JAVA】——public void与public static void的区别
  20. 区块链:对链式结构型 PoS 系统的 “虚假权益” 攻击

热门文章

  1. 工程经济有何难,思维导图来助阵
  2. 怎样通过执行命令重启电脑资源管理器,任务栏自动隐藏修复
  3. re.sub()用法的详细介绍
  4. 在jsp页面上直接打开pdf文档
  5. Python——爬取单章小说内容
  6. 无线路由器DNS服务器异常,fast无线路由器dns异常的解决方法
  7. 泰尔指数r语言_EG指数:从繁琐到简单
  8. windows下DxDiag查看笔记本电脑主板型号信息
  9. VVIC搜款网平台API接口
  10. GAS超标,以太坊告急