博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #336 (Div. 2)
阅读量:5170 次
发布时间:2019-06-13

本文共 3556 字,大约阅读时间需要 11 分钟。

 

水 

简单的模拟,小贪心。其实只要求max (ans, t + f);

#include 
using namespace std;#define lson l, mid, o << 1#define rson mid + 1, r, o << 1 | 1typedef long long ll;const int N = 1e5 + 5;const int INF = 0x3f3f3f3f;int n, s;struct Floor { int f, t; bool operator < (const Floor &r) const { return f > r.f || (f == r.f && t < r.t); }}a[105];int main(void) { scanf ("%d%d", &n, &s); for (int i=1; i<=n; ++i) { scanf ("%d%d", &a[i].f, &a[i].t); } sort (a+1, a+1+n); int ans = 0, now = s, i = 1; while (now > 0 && i <= n) { if (now > a[i].f) { now--; ans++; } else { if (ans < a[i].t) { ans = a[i].t; i++; while (i <= n && a[i].f == now && ans >= a[i].t) i++; } else { while (i <= n && a[i].f == now && ans >= a[i].t) i++; } } } while (now > 0) { now--; ans++; } printf ("%d\n", ans); return 0;}

 

组合 

题意:都是01的a字符串在b字符串的所有连续子串不同的个数。

分析:看上去很难做。但是换一个思路,考虑a字符串的每一个字符最终会和b中哪些字符比较,求一个前缀就能解决了。多想想还是能想出来的,JayYe说做多了这些题目都是同一个套路。

#include 
using namespace std;#define lson l, mid, o << 1#define rson mid + 1, r, o << 1 | 1typedef long long ll;const int N = 2e5 + 5;const int INF = 0x3f3f3f3f;char s[N], t[N];int cnt0[N], cnt1[N];int main(void) { scanf ("%s%s", s + 1, t + 1); int lens = strlen (s + 1), lent = strlen (t + 1); memset (cnt0, 0, sizeof (cnt0)); memset (cnt1, 0, sizeof (cnt1)); int c1[2] = {0, 0}, c2[2] = {0, 0}; for (int i=1; i<=lens; ++i) if (s[i] == '0') c1[0]++; for (int i=1; i<=lent; ++i) { if (t[i] == '0') { c2[0]++; cnt0[i] = cnt0[i-1] + 1; cnt1[i] = cnt1[i-1]; } else { cnt1[i] = cnt1[i-1] + 1; cnt0[i] = cnt0[i-1]; } } c1[1] = lens - c1[0]; c2[1] = lent - c2[0]; ll ans = 0; for (int i=1; i<=lens; ++i) { if (s[i] == '0') { ans += cnt1[lent-lens+i] - cnt1[i-1]; } else { ans += cnt0[lent-lens+i] - cnt0[i-1]; } } printf ("%I64d\n", ans); return 0;}

  

DP 

题意:在最后面多一个becaon,问在某一个地方某一个能量能使最后死掉的becaon最少。

分析:假设会杀掉j的becaon,那么找出j位置会杀掉的位置,那么j到n都死完了,pos到j也死完了,再加上kill[pos]的求最小值,kill[]是dp,从后往前能更新。

#include 
using namespace std;#define lson l, mid, o << 1#define rson mid + 1, r, o << 1 | 1typedef long long ll;const int N = 1e5 + 5;const int INF = 0x3f3f3f3f;struct Beacon { int a, b; bool operator < (const Beacon &r) const { return a < r.a; }}p[N];int kill[N];int bsearch(int l, int r, int k) { while (l <= r) { int mid = l + r >> 1; if (p[mid].a < k) l = mid + 1; else if (p[mid].a == k) return mid - 1; else { r = mid - 1; } } return r;}int main(void) { int n; scanf ("%d", &n); for (int i=1; i<=n; ++i) { scanf ("%d%d", &p[i].a, &p[i].b); } sort (p+1, p+1+n); int ans = n; for (int i=n-1; i>=0; --i) { //kill i bacon int j = n - i; if (j == 1) { ans = n - 1; kill[1] = 0; continue; } int pos = bsearch (1, j - 1, p[j].a - p[j].b); while (pos > 0 && p[j].a - p[j].b <= p[pos].a) pos--; if (pos == j - 1) kill[j] = kill[j-1]; else kill[j] = kill[pos] + j - pos - 1; ans = min (ans, kill[pos] + j - pos - 1 + i); } printf ("%d\n", ans); return 0;}

  

 

转载于:https://www.cnblogs.com/Running-Time/p/5074392.html

你可能感兴趣的文章
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>
ObjectiveC基础教程(第2版)
查看>>
centos 引导盘
查看>>
Notes of Daily Scrum Meeting(12.8)
查看>>
Apriori算法
查看>>
onlevelwasloaded的调用时机
查看>>
lr_start_transaction/lr_end_transaction事物组合
查看>>
CodeIgniter学习笔记(四)——CI超级对象中的load装载器
查看>>
.NET CLR基本术语
查看>>
ubuntu的home目录下,Desktop等目录消失不见
查看>>
建立,查询二叉树 hdu 5444
查看>>
[Spring框架]Spring 事务管理基础入门总结.
查看>>
2017.3.24上午
查看>>
Python-常用模块及简单的案列
查看>>