codeforces 567D One-Dimensional Battle Ships (map维护)
来源:互联网 发布:stm32jlink 烧录软件 编辑:程序博客网 时间:2024/05/22 13:05
题意:
在1~n的格子里,有k艘,每艘长为a的船,并且这些船不相交且不能相邻。
现在有m个射击,每个射击给你一个位置(1~n),并且不会重复。
由于对方每次都说没打中,因此你想找到至少要射击几次才能证明对方说谎。
若不能证明对方说谎,输出-1。
思路:
n个格子,船长为a,则能放(n+1)/(a+1)艘船。(由于要求不能相邻,因此a+1)。
使用map来维护。
map[i]:维护i直到下一个射击点这段区间能放多少艘船。(一开始map中有0,和n+1这两个点)。
每插入一个点,就会删除一个区间,并且生成两个新的区间。
边插入边更新总的能放船数,若出现<k,则返回当前是第几次射击。
code:
#include <bits/stdc++.h>using namespace std;const int N = 2e5+5;typedef long long LL;int n, k, a;int m;int x[N];map <int, int> mp;int solve() { //st.insert(0); st.insert(n+1); mp[0] = (n+1)/(a+1); mp[n+1] = 0; int cur = (n+1)/(a+1); for(int i = 0;i < m; i++) { auto it = mp.lower_bound(x[i]); auto r = it; auto l = --it; cur -= l->second; int nr = ((r->first)-x[i])/(a+1); int nl = (x[i]-(l->first))/(a+1); cur += nr+nl; mp[x[i]] = nr; l->second = nl; if(cur < k) return i+1; } return -1;} int main() { scanf("%d%d%d", &n, &k, &a); scanf("%d", &m); for(int i = 0;i < m; i++) scanf("%d", &x[i]); printf("%d\n", solve()); return 0;}
0 0
- codeforces 567D One-Dimensional Battle Ships (map维护)
- codeforces 567D. One-Dimensional Battle Ships
- Codeforces 567D One-Dimensional Battle Ships
- CodeForces 567D One-Dimensional Battle Ships
- codeforces(567D)--D. One-Dimensional Battle Ships
- CodeForces #Pi D.One-Dimensional Battle Ships
- codeforces 567D One-Dimensional Battle Ships (set)
- CodeForces 567D One-Dimensional Battle Ships【二分】
- One-Dimensional Battle Ships CodeForces
- Codeforces Round #Pi (Div. 2) D. One-Dimensional Battle Ships
- codeforces#314D&567D One-Dimensional Battle Ships (Set)
- Codeforces Round #Pi (Div. 2)567D One-Dimensional Battle Ships(set)
- [CodeForces 567D] One-Dimensional Battle Ships (区间隔断计数)
- 【打CF,学算法——三星级】CodeForces 567D One-Dimensional Battle Ships (二分)
- CF 567D(One-Dimensional Battle Ships-二分)
- 567D One-Dimensional Battle Ships(set)
- CF D. One-Dimensional Battle Ships
- 【CodeForces】567D - One-Dimensional Battle Ships & 【51Nod】1521 - 一维战舰(STL - set & 二分)
- [POJ 1947] Rebuilding Roads 树形dp
- Prim
- linux svn代码版本回退
- UVa 558 Wormholes (判负圈+Bellman-Ford算法)
- 3687-Labeling Balls-反向拓扑排序
- codeforces 567D One-Dimensional Battle Ships (map维护)
- 暑期校园生活中的那些烦心事!
- Shell编程基础
- java集合框架(map集合)
- hibernate SQL Error: 8152, SQLState: 22001
- poj-3687 Labeling Balls
- Lua笔记7-闭包2
- Find The Multiple
- 开源项目 -- 悬浮窗口