• poj 2153 Rank List


    原题链接:http://poj.org/problem?id=2153 
    简单题,map,平衡树均可。。 
    map:

     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstdio>
     5 #include<string>
     6 #include<map>
     7 using std::cin;
     8 using std::map;
     9 using std::string;
    10 map<string, int> ret;
    11 int main() {
    12 #ifdef LOCAL
    13     freopen("in.txt", "r", stdin);
    14     freopen("out.txt", "w+", stdout);
    15 #endif
    16     string buf;
    17     int n, m, v, tmp;
    18     while (cin >> n) {
    19         getchar();
    20         for (int i = 0; i < n; i++) {
    21             getline(cin, buf);
    22             ret[buf] = 0;
    23         }
    24         cin >> m;
    25         while (m--) {
    26             int ans = 0;
    27             for (int i = 0; i < n; i++) {
    28                 cin >> v;
    29                 getchar();
    30                 getline(cin, buf);
    31                 ret[buf] += v;
    32             }
    33             tmp = ret["Li Ming"];
    34             map<string, int>::iterator ite;
    35             for (ite = ret.begin(); ite != ret.end(); ++ite) {
    36                 if (ite->second > tmp) ans++;
    37             }
    38             printf("%d
    ", ans + 1);
    39         }
    40         ret.clear();
    41     }
    42     return 0;
    43 }
    View Code

    平衡树:

      1 #include<algorithm>
      2 #include<iostream>
      3 #include<cstdlib>
      4 #include<cstring>
      5 #include<cstdio>
      6 typedef char State[35];
      7 char *target = "Li Ming";
      8 const int Max_N = 11000;
      9 struct Node {
     10     State name;
     11     int data, s;
     12     bool color;
     13     Node *fa, *ch[2];
     14     inline void set(int _v, char *src, bool _color, int i, Node *p) {
     15         data = _v, color = _color, s = i;
     16         fa = ch[0] = ch[1] = p;
     17         strcpy(name, src);
     18     }
     19     inline void push_up() {
     20         s = ch[0]->s + ch[1]->s + 1;
     21     }
     22     inline int cmp(char *src) const {
     23         if (0 == strcmp(src, name)) return -1;
     24         else if (-1 == strcmp(src, name)) return 0;
     25         return 1;
     26     }
     27 };
     28 struct RedBlackTree {
     29     Node *root, *null;
     30     Node stack[Max_N], *tail;
     31     void init() {
     32         tail = &stack[0];
     33         null = tail++;
     34         null->set(0, "", 0, 0, NULL);
     35         root = null;
     36     }
     37     inline Node *newNode(char *name, int v) {
     38         Node *p = tail++;
     39         p->set(v, name, 1, 1, null);
     40         return p;
     41     }
     42     inline void rotate(Node* &x, bool d) {
     43         Node *y = x->ch[!d];
     44         x->ch[!d] = y->ch[d];
     45         if (y->ch[d] != null) y->ch[d]->fa = x;
     46         y->fa = x->fa;
     47         if (x->fa == null) root = y;
     48         else x->fa->ch[x->fa->ch[0] != x] = y;
     49         y->ch[d] = x;
     50         x->fa = y;
     51         y->s = x->s;
     52         x->push_up();
     53     }
     54     inline void insert(char *name, int v = 0) {
     55         int d = 0;
     56         Node *x = root, *y = null;
     57         while (x->s) {
     58             x->s++;
     59             d = x->cmp(name);
     60             y = x, x = x->ch[d];
     61         }
     62         x = newNode(name, v);
     63         if (y != null) { d = x->cmp(y->name), y->ch[!d] = x; }
     64         else root = x;
     65         x->fa = y;
     66         insert_fix(x);
     67     }
     68     inline void insert_fix(Node* &x) {
     69         while (x->fa->color){
     70             Node *par = x->fa, *Gp = par->fa;
     71             bool d = par == Gp->ch[0];
     72             Node *uncle = Gp->ch[d];
     73             if (uncle->color) {
     74                 par->color = uncle->color = 0;
     75                 Gp->color = 1;
     76                 x = Gp;
     77             } else if (x == par->ch[d]) {
     78                 rotate(x = par, !d);
     79             } else {
     80                 Gp->color = 1;
     81                 par->color = 0;
     82                 rotate(Gp, d);
     83             }
     84         }
     85         root->color = 0;
     86     }
     87     inline Node *find(Node *x, char *name) {
     88         while (x->s) {
     89             int d = x->cmp(name);
     90             if (-1 == d) break;
     91             x = x->ch[d];
     92         }
     93         return x;
     94     }
     95     inline void Modify(char *str, int v) {
     96         Node* ret = find(root, str);
     97         ret->data += v;
     98     }
     99     inline void dfs(Node *x, int v, int &ans) {
    100         if (x != null){
    101             dfs(x->ch[0], v, ans);
    102             if (x->data > v) ans++;
    103             dfs(x->ch[1], v, ans);
    104         }
    105     }
    106     inline void query() {
    107         int cnt = 0, ans = 0;
    108         int v = find(root, target)->data;
    109         dfs(root, v, ans);
    110         printf("%d
    ", ans + 1);
    111     }
    112 }rbt;
    113 int main(){
    114 #ifdef LOCAL
    115     freopen("in.txt", "r", stdin);
    116     freopen("out.txt", "w+", stdout);
    117 #endif
    118     char buf[100];
    119     int n, m, val;
    120     while (~scanf("%d
    ", &n)) {
    121         rbt.init();
    122         for (int i = 0; i < n; i++) {
    123             gets(buf);
    124             rbt.insert(buf);
    125         }
    126         scanf("%d
    ", &m);
    127         while (m--) {
    128             for (int i = 0; i < n; i++) {
    129                 gets(buf);
    130                 sscanf(buf, "%d", &val);
    131                 rbt.Modify(strchr(buf, ' ') + 1, val);
    132             }
    133             rbt.query();
    134         }
    135     }
    136     return 0;
    137 }
    View Code
    By: GadyPu 博客地址:http://www.cnblogs.com/GadyPu/ 转载请说明
  • 相关阅读:
    (转)The Road to TensorFlow
    (转) TensorFlow深度学习,一篇文章就够了
    论文笔记之:Fully-Convolutional Siamese Networks for Object Tracking
    关于 Local feature 和 Global feature 的组合
    (转) 技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道
    (转)一文学会用 Tensorflow 搭建神经网络
    (转)TensorFlow 入门
    (转)阿尔法狗是怎么用机器学习做决策的
    How to Configure the Gradient Boosting Algorithm
    A Gentle Introduction to the Gradient Boosting Algorithm for Machine Learning
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4523253.html
Copyright © 2020-2023  润新知