D. Bouncing Boomerangs
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相关推荐
- codeforces1457 C. Bouncing Ball
写这个题写了1h,赛后无意看见jly神的代码只能膜拜%%% C. Bouncing Ball 预处理从1→k1\to k1→k开始跳需要添加多少个平台,预处从k+1→nk+1\to nk+1→n这些不 ...
- 1415C. Bouncing Ball
C. Bouncing Ball:题目 很好的dp,1400分难见的题 #include <bits/stdc++.h> using namespace std; #define int ...
- 447. Number of Boomerangs
题目: Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple o ...
- C#LeetCode刷题之#447-回旋镖的数量(Number of Boomerangs)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3792 访问. 给定平面上 n 对不同的点,"回旋镖&q ...
- 【Elasticsearch】Elasticsearch bouncing result 问题
课程大纲 1.preference 决定了哪些shard会被用来执行搜索操作 _primary, _primary_first, _local, _only_node:xyz, _prefer_nod ...
- LeetCode447. Number of Boomerangs
Description Given n points in the plane that are all pairwise distinct, a "boomerang" is a ...
- 图论 ---- 构造DFS树的思想 K - Boomerangs Gym - 102001K
题目链接 题目大意: 解题思路: 启发性思考首先我们先图切成dfs树,然后给图一个稳定结构之后,我们就可以去构造了 对于每个点我们从第底端开始构造每次把每次点的儿子两两匹配,如果是奇数个儿子就把多出来 ...
- LeetCode Number of Boomerangs
题意:给出平面上的n个点,求出元组(i,j,k)的个数,其中元组满足i与j的距离与i与k距离相等,与(i,j,k)顺序有关 思路:以一个点为起点,看其它点到该点的距离及具有一样距离的个数.在统计元组个 ...
- Gym - 102001K Boomerangs 构造 + 三元环
传送门 文章目录 题意: 思路: 题意: 给你一张nnn个点mmm条边的简单图,让你找出尽可能多的三元环,要求每个三元环都不能共边,输出三元环数量和具体是那个. n,m≤1e5n,m\le1e5n,m ...
- 通过Scroller.js制作上拉加载和下拉刷新
为什么80%的码农都做不了架构师?>>> 之前做移动端webAPP开发,一直是用的IScroll来做滚动列表,但是IScroll没有直接提供上下拉刷新的功能,虽然我们基于ISc ...
最新文章
- 信息安全隐患日趋严重 专家呼吁政策监管仍待加强
- Yii Model中添加默认搜索条件
- nginx的请求接收流程(二)
- eclipse从svn导入maven项目变成普通项目解决办法
- java开发平台普元_java开发平台的两种实现模式
- poj 1847 Tram 最短路 dijkstra、floyed
- 分析ARP***与欺骗
- hashset如何检查重复_如何使用 C# 中的 HashSet
- html css底部弧度,CSS实现底部弧度效果
- Unity3D 下载与安装
- 文华财经数据导出工具
- 【应用笔记】【AN002】通过iTool2基于MinGW平台读写EEPROM
- 6-9.添加HLSL镜面高光
- linux测试dvi接口,支持Linux系统的高清DVI采集卡推荐
- 《实践论》笔记及当下反思(一)
- double转换为二进制
- matlab生成随机数,matlab随机数生成方法
- 西南大学计算机科学与技术专业在哪个校区,西南大学有几个校区及校区地址 哪个校区最好...
- 【通俗易懂学JAVA】——public void与public static void的区别
- 区块链:对链式结构型 PoS 系统的 “虚假权益” 攻击