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的更多相关文章

  1. Codeforces Round #413 (Div1 + Div. 2) C. Fountains(树状数组维护最大值)

    题目链接:https://codeforces.com/problemset/problem/799/C 题意:有 c 块硬币和 d 块钻石,每种喷泉消耗硬币或钻石中的一种,每个喷泉有一个美丽值,问建 ...

  2. 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 ...

  3. 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 ...

  4. Educational Codeforces Round 21 Problem E(Codeforces 808E) - 动态规划 - 贪心

    After several latest reforms many tourists are planning to visit Berland, and Berland people underst ...

  5. 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 ...

  6. Educational Codeforces Round 21 Problem A - C

    Problem A Lucky Year 题目传送门[here] 题目大意是说,只有一个数字非零的数是幸运的,给出一个数,求下一个幸运的数是多少. 这个幸运的数不是最高位的数字都是零,于是只跟最高位有 ...

  7. 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  ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. Gym - 101020H Weekend floyd+next_permutation

    https://vjudge.net/problem/Gym-101020H 题意:正常读取方式给你一个图(双向的),然后给你f个点,让你找一条路从1到n的最短路,要求经过f个点(以任意顺序). 题解 ...

  2. Oracle安装部署之linux OS install oracle database安装脚本

    #!/bin/bash#Purpose:Create and config oracle install.#Usage:Log on as the superuser('root') #1.creat ...

  3. git 出现 refusing to merge unrelated histories 解决

    如果出现refusing to merge unrelated histories,使用以下方法即可 git pull origin master --allow-unrelated-historie ...

  4. 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) ...

  5. firmware 固件

    COMPPUTER SCIENCE AN OVERVIEW 11th Edition firmware 固件 boot loader 引导程序 device driver 设备驱动程序 Basic I ...

  6. flask的session用法

    转自:https://www.cnblogs.com/52forjie/p/8282453.html 简介 flask-session是flask框架的session组件,由于原来flask内置ses ...

  7. http://www.cnblogs.com/linxiyue/p/8244724.html

    http://www.cnblogs.com/linxiyue/p/8244724.html

  8. LoadRunner-参数化(参数间关联)

    多用户测试,每个用户账号对应一个密码,账号和密码需要一 一关联才能登录成功. 1.在已经对账号进行参数化后,选中密码的值->右键选择Replace with a Parameter,参数名为pa ...

  9. CCO2017 Vera and Trail Building 构造+图论

    正解:构造+图论 解题报告: 找了半天才找到的传送门! 先简要表达下题意 一个图上,如果存在(a,b)满足a<b且存在从a到b再回到a的路径,每条道路被经过至多一次,我们称(a,b)为完美点对试 ...

  10. zookeeper 版本不一致导致不断重连

    在使用kafka 和zookeeper 实现实时分析程序时,由于zookeeper部署版本和分析程序导入jar包的版本不一致,导致了当实时分析程序从远程服务器连接kafka集群的zookeeper时报 ...