zoukankan      html  css  js  c++  java
  • hdu 2648 Shopping

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2648

    纯暴力的方法T_T。。。

    如下:

      1 #include<cstdio>
      2 #include<cstdlib>
      3 #include<string>
      4 #include<iostream>
      5 #include<algorithm>
      6 typedef char State[35];
      7 char *target = "memory";
      8 const int Max_N = 11000;
      9 struct Node{
     10     State name;
     11     int v, s;
     12     Node *ch[2];
     13     inline void
     14     set(int _v = 0, char *src = "", int _s = 0,Node *p = NULL){
     15         ch[0] = ch[1] = p;
     16         v = _v, s = _s, strcpy(name, src);
     17     }
     18     inline void push_up(){
     19         s = ch[0]->s + ch[1]->s + 1;
     20     }
     21     inline int cmp(char *src) const{
     22         if (0 == strcmp(src, name)) return -1;
     23         else if (-1 == strcmp(src, name)) return 0;
     24         return 1;
     25     }
     26 };
     27 struct SizeBalanceTree{
     28     Node *tail, *null, *root;
     29     Node stack[Max_N];
     30     void init(){
     31         tail = &stack[0];
     32         null = tail++;
     33         null->set();
     34         root = null;
     35     }
     36     inline Node *newNode(char *name, int v){
     37         Node *p = tail++;
     38         p->set(v, name, 1, null);
     39         return p;
     40     }
     41     inline void rotate(Node* &x, int d){
     42         Node *k = x->ch[!d];
     43         x->ch[!d] = k->ch[d];
     44         k->ch[d] = x;
     45         k->s = x->s;
     46         x->push_up();
     47         x = k;
     48     }
     49     inline void Maintain(Node* &x, int d){
     50         if (x->ch[d] == null) return;
     51         if (x->ch[d]->ch[d]->s > x->ch[!d]->s){
     52             rotate(x, !d);
     53         } else if (x->ch[d]->ch[!d]->s > x->ch[!d]->s){
     54             rotate(x->ch[d], d), rotate(x, !d);
     55         } else {
     56             return;
     57         }
     58         Maintain(x, 0), Maintain(x, 1);
     59     }
     60     inline void insert(Node* &x, char *name, int v){
     61         if (x == null){
     62             x = newNode(name, v);
     63             return;
     64         } else {
     65             x->s++;
     66             int d = x->cmp(name);
     67             insert(x->ch[d], name, v);
     68             x->push_up();
     69             Maintain(x, d);
     70         }
     71     }
     72     inline Node *Modify(Node *x, char *name){
     73         if (x == null) return null;
     74         int d = x->cmp(name);
     75         if (-1 == d) return x;
     76         else return Modify(x->ch[d], name);
     77     }
     78     inline void insert(char *str, int v = 0){
     79         insert(root, str, v);
     80         return;
     81     }
     82     inline void Modify(char *str, int v){
     83         Node* ret = Modify(root, str);
     84         ret->v += v;
     85     }
     86     inline void dfs(Node *x, int v, int &ans){
     87         if (x != null){
     88             dfs(x->ch[0], v, ans);
     89             if (x->v > v) ans++;
     90             dfs(x->ch[1], v, ans);
     91         }
     92     }
     93     inline void query(){
     94         int cnt = 0, ans = 0;
     95         int v = Modify(root, target)->v;
     96         dfs(root, v, ans);
     97         printf("%d
    ", ans + 1);
     98     }
     99 }sbt;
    100 int main(){
    101 #ifdef LOCAL
    102     freopen("in.txt", "r", stdin);
    103     freopen("out.txt", "w+", stdout);
    104 #endif
    105     char buf[100];
    106     int n, m, val;
    107     while (~scanf("%d", &n)){
    108         sbt.init();
    109         for (int i = 0; i < n; i++){
    110             scanf("%s", buf);
    111             sbt.insert(buf);
    112         }
    113         scanf("%d", &m);
    114         while (m--){
    115             for (int i = 0; i < n; i++){
    116                 scanf("%d %s", &val, buf);
    117                 sbt.Modify(buf, val);
    118             }
    119             sbt.query();
    120         }
    121     }
    122     return 0;
    123 }
    View Code
    By: GadyPu 博客地址:http://www.cnblogs.com/GadyPu/ 转载请说明
  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4472260.html
Copyright © 2011-2022 走看看