Codeforces Round#413 Problem A - C
Problem#A Carrot Cakes
vjudge链接[here]
(偷个懒,cf链接就不给了)
题目大意是说,烤面包,给出一段时间内可以考的面包数,建第二个炉子的时间,需要达到的面包数,问建炉子是否合理。
玄学 & 智商题,可能是因为我智商不够,所以在我决定休息的时候被hank掉了。。。(纠正一个错误,是fst掉的)
输NO的情况大概是当炉子建好后,考完第一波的时间,任务已经或刚好完成。
Code
/** * Codeforces * Problem#799A * Accepted * Time:15ms * Memory:8k */ #include<iostream> #include<fstream> #include<sstream> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<cmath> #include<ctime> #include<map> #include<stack> #include<set> #include<queue> #include<vector> using namespace std; typedef bool boolean; #define inf 0xfffffff #define smin(a, b) (a) = min((a), (b)) #define smax(a, b) (a) = max((a), (b)) template<typename T> inline boolean readInteger(T& u) { char x; ; ); ) { ungetc(x, stdin); return false; } if(x == '-') { aFlag = -; x = getchar(); } + x - '); u *= aFlag; ungetc(x, stdin); return true; } int n, t, k, d; inline void work() { readInteger(n); readInteger(t); readInteger(k); readInteger(d); ; if(turns * k > n) puts("NO"); else if(turns * k == n && (d == t || turns * t <= d + t)) puts("NO"); else puts("YES"); } int main() { work(); ; }
Problem#A
Problem#B T-shirt buying
vjudge链接[here]
题目大意是说,每件衣服有两面,每面有个颜色,有些人要来买,他只买存在一面有他喜欢的颜色且价格最低的一个,输出每个人付的钱,没有买到输出-1。
用个set,依题意乱搞就好了。(每场比赛貌似都是b题稳AC)
Code
/** * Codeforces * Problem#799B * Accepted * Time:296ms * Memory:14964k */ #include<iostream> #include<fstream> #include<sstream> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<cmath> #include<ctime> #include<map> #include<stack> #include<set> #include<queue> #include<vector> using namespace std; typedef bool boolean; #define inf 0xfffffff #define smin(a, b) (a) = min((a), (b)) #define smax(a, b) (a) = max((a), (b)) template<typename T> inline boolean readInteger(T& u) { char x; ; ); ) { ungetc(x, stdin); return false; } if(x == '-') { aFlag = -; x = getchar(); } + x - '); u *= aFlag; ungetc(x, stdin); return true; } typedef class Tshirt { public: int p; int id; Tshirt() { } Tshirt(int p, int id):p(p), id(id) { } boolean operator < (Tshirt b) const { if(p != b.p) return p < b.p; return id < b.id; } }Tshirt; int n, m; int* prices; int *color1, *color2; multiset<Tshirt> ps[]; inline void init() { readInteger(n); prices = )]; color1 = )]; color2 = )]; ; i <= n; i++) readInteger(prices[i]); ; i <= n; i++) { readInteger(color1[i]); ps[color1[i] - ].insert(Tshirt(prices[i], i)); } ; i <= n; i++) { readInteger(color2[i]); if(color1[i] != color2[i]) ps[color2[i] - ].insert(Tshirt(prices[i], i)); } } inline void solve() { int c; readInteger(m); while(m--) { readInteger(c); c--; ) { printf("-1 "); } else { multiset<Tshirt>::iterator t = ps[c].begin(); printf("%d ", t->p); ) { ps[color1[t->id] - ].erase(ps[color1[t->id] - ].find(Tshirt(t->p, t->id))); } ) { ps[color2[t->id] - ].erase(ps[color2[t->id] - ].find(*t)); } ps[c].erase(t); } } } int main() { init(); solve(); ; }
Problem#B
Problem#C Fountains
vjudge链接[here]
C题思路不是很难,很好想,结果写炸了。。。
第一种情况,买两个不同购买方式的物品,贪心就好了。
第二种情况,买两个购买方式相同的物品,先按价格从小到大拍一道序,然后记录一个能延伸到的一个最远的物品r,每次i++时要用while循环去更新r,接着剩下的事交给线段树查最大值就好了。两种购买方式的物品都做一下就好了。
当然,写炸的缘故
1.自己坑自己。。sort的cmpare函数改了后没有改for循环的顺序(第一种情况比较懒,开始就写了就不想改了)
2.少特判当某种购买方式的物品不存在的情况,然后建树就挂了,MLE。
Code
/** * Codeforces * Problem#799C * Accepted * Time:62ms * Memory:6300k */ #include<iostream> #include<fstream> #include<sstream> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<cmath> #include<ctime> #include<map> #include<stack> #include<set> #include<queue> #include<vector> using namespace std; typedef bool boolean; #define inf 0xfffffff #define smin(a, b) (a) = min((a), (b)) #define smax(a, b) (a) = max((a), (b)) template<typename T> inline boolean readInteger(T& u) { char x; ; ); ) { ungetc(x, stdin); return false; } if(x == '-') { aFlag = -; x = getchar(); } + x - '); u *= aFlag; ungetc(x, stdin); return true; } typedef class MyPair { public: int c; int p; MyPair(, ):c(c), p(p) { } }MyPair; typedef class SegTreeNode { public: int val; SegTreeNode* l, *r; SegTreeNode():val(), l(NULL), r(NULL) { } inline void pushUp() { val = max(l->val, r->val); } }SegTreeNode; typedef class SegTree { public: SegTreeNode* root; SegTree() { } SegTree(int n, MyPair*& lis) { build(root, , n, lis); } void build(SegTreeNode*& node, int l, int r, MyPair*& lis) { node = new SegTreeNode(); if(l == r) { node->val = lis[l].c; return; } ; build(node->l, l, mid, lis); build(node->r, mid + , r, lis); node->pushUp(); } int query(SegTreeNode*& node, int l, int r, int ql, int qr) { ; if(l == ql && r == qr) { return node->val; } ; if(qr <= mid) return query(node->l, l, mid, ql, qr); , r, ql, qr); int a = query(node->l, l, mid, ql, mid); , r, mid + , qr); return max(a, b); } void clear(SegTreeNode*& node) { if(node->l) clear(node->l); if(node->r) clear(node->r); delete node; } }SegTree; int n; int C, D; MyPair *cs, *ds; , cnd = ; , bd = -; SegTree stc, stdd; inline void init() { readInteger(n); readInteger(C); readInteger(D); cs = )]; ds = )]; int a, b; char x; ; i <= n; i++) { readInteger(a); readInteger(b); getchar(); x = getchar(); if(x == 'C' && b <= C) cs[++cnc] = MyPair(a, b); else if(x == 'D' && b <= D) ds[++cnd] = MyPair(a, b); } } boolean cmp1(const MyPair& a, const MyPair& b) { if(a.c != b.c) return a.c > b.c; return a.p < b.p; } boolean cmp2(const MyPair& a, const MyPair& b) { if(a.p != b.p) return a.p < b.p; return a.c > b.c; } ; inline void solve() { ) sort(cs + , cs + cnc + , cmp1); ) sort(ds + , ds + cnd + , cmp1); ; i <= cnc; i++) if(cs[i].p <= C) { bc = cs[i].c; break; } ; i <= cnd; i++) if(ds[i].p <= D) { bd = ds[i].c; break; } && bd != -) res = bc + bd; ) sort(cs + , cs + cnc + , cmp2); ) sort(ds + , ds + cnd + , cmp2); int r = cnc; if(cnc) { stc = SegTree(cnc, cs); ; i <= r; i++) { , a1 = ; while(cs[i].p + cs[r].p > C) r--; if(i > r) break; ) a0 = stc.query(stc.root, , cnc, , i - ); if(i < cnc) a1 = stc.query(stc.root, , cnc, i + , r); && a1 == ) continue; smax(res, max(a0, a1) + cs[i].c); } } r = cnd; if(cnd) { stdd = SegTree(cnd, ds); ; i <= r; i++) { , a1 = ; while(ds[i].p + ds[r].p > D) r--; if(i > r) break; ) a0 = stdd.query(stdd.root, , cnd, , i - ); if(i < cnd) a1 = stdd.query(stdd.root, , cnd, i + , r); && a1 == ) continue; smax(res, max(a0, a1) + ds[i].c); } } printf("%d", res); } int main() { init(); solve(); ; }
Problem#C
Codeforces Round#413 Problem A - C的更多相关文章
- Codeforces Round #413 (Div1 + Div. 2) C. Fountains(树状数组维护最大值)
题目链接:https://codeforces.com/problemset/problem/799/C 题意:有 c 块硬币和 d 块钻石,每种喷泉消耗硬币或钻石中的一种,每个喷泉有一个美丽值,问建 ...
- codeforces Round 286# problem A. Mr. Kitayuta's Gift
Mr. Kitayuta has kindly given you a string s consisting of lowercase English letters. You are asked ...
- Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)(A.暴力,B.优先队列,C.dp乱搞)
A. Carrot Cakes time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
- Educational Codeforces Round 21 Problem E(Codeforces 808E) - 动态规划 - 贪心
After several latest reforms many tourists are planning to visit Berland, and Berland people underst ...
- Educational Codeforces Round 21 Problem D(Codeforces 808D)
Vasya has an array a consisting of positive integer numbers. Vasya wants to divide this array into t ...
- Educational Codeforces Round 21 Problem A - C
Problem A Lucky Year 题目传送门[here] 题目大意是说,只有一个数字非零的数是幸运的,给出一个数,求下一个幸运的数是多少. 这个幸运的数不是最高位的数字都是零,于是只跟最高位有 ...
- Codeforces Round #413, rated, Div. 1 + Div. 2 C. Fountains(贪心 or 树状数组)
http://codeforces.com/contest/799/problem/C 题意: 有n做花园,有人有c个硬币,d个钻石 (2 ≤ n ≤ 100 000, 0 ≤ c, d ≤ 100 ...
- C.Fountains(Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)+线段树+RMQ)
题目链接:http://codeforces.com/contest/799/problem/C 题目: 题意: 给你n种喷泉的价格和漂亮值,这n种喷泉题目指定用钻石或现金支付(分别用D和C表示),C ...
- Educational Codeforces Round 32 Problem 888C - K-Dominant Character
1) Link to the problem: http://codeforces.com/contest/888/problem/C 2) Description: You are given a ...
随机推荐
- Gym - 101020H Weekend floyd+next_permutation
https://vjudge.net/problem/Gym-101020H 题意:正常读取方式给你一个图(双向的),然后给你f个点,让你找一条路从1到n的最短路,要求经过f个点(以任意顺序). 题解 ...
- Oracle安装部署之linux OS install oracle database安装脚本
#!/bin/bash#Purpose:Create and config oracle install.#Usage:Log on as the superuser('root') #1.creat ...
- git 出现 refusing to merge unrelated histories 解决
如果出现refusing to merge unrelated histories,使用以下方法即可 git pull origin master --allow-unrelated-historie ...
- CGI servlet Applet Scriptlet Scriptlet JSP data layer(数据层),business layer(业务层), presentation layer(表现层)
https://en.wikipedia.org/wiki/Common_Gateway_Interface In computing, Common Gateway Interface (CGI) ...
- firmware 固件
COMPPUTER SCIENCE AN OVERVIEW 11th Edition firmware 固件 boot loader 引导程序 device driver 设备驱动程序 Basic I ...
- flask的session用法
转自:https://www.cnblogs.com/52forjie/p/8282453.html 简介 flask-session是flask框架的session组件,由于原来flask内置ses ...
- http://www.cnblogs.com/linxiyue/p/8244724.html
http://www.cnblogs.com/linxiyue/p/8244724.html
- LoadRunner-参数化(参数间关联)
多用户测试,每个用户账号对应一个密码,账号和密码需要一 一关联才能登录成功. 1.在已经对账号进行参数化后,选中密码的值->右键选择Replace with a Parameter,参数名为pa ...
- CCO2017 Vera and Trail Building 构造+图论
正解:构造+图论 解题报告: 找了半天才找到的传送门! 先简要表达下题意 一个图上,如果存在(a,b)满足a<b且存在从a到b再回到a的路径,每条道路被经过至多一次,我们称(a,b)为完美点对试 ...
- zookeeper 版本不一致导致不断重连
在使用kafka 和zookeeper 实现实时分析程序时,由于zookeeper部署版本和分析程序导入jar包的版本不一致,导致了当实时分析程序从远程服务器连接kafka集群的zookeeper时报 ...