码迷,mamicode.com
首页 > 其他好文 > 详细

构造 Codeforces Round #107 (Div. 2) B. Phone Numbers

时间:2015-07-18 13:50:55      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

 

题目传送门

  1 /*
  2     构造:结构体排个序,写的有些啰嗦,主要想用用流,少些了判断条件WA好几次:(
  3 */
  4 #include <cstdio>
  5 #include <algorithm>
  6 #include <cstring>
  7 #include <cmath>
  8 #include <vector>
  9 #include <map>
 10 #include <iostream>
 11 #include <string>
 12 using namespace std;
 13 
 14 const int MAXN = 1e2 + 10;
 15 const int INF = 0x3f3f3f3f;
 16 struct Phone
 17 {
 18     string name;
 19     string num[MAXN];
 20     int tot, t, p, g, id;
 21 }p[MAXN];
 22 
 23 bool cmp_t(Phone x, Phone y)
 24 {
 25     if (x.t == y.t)    return x.id < y.id;
 26     return x.t > y.t;
 27 }
 28 
 29 bool cmp_p(Phone x, Phone y)
 30 {
 31     if (x.p == y.p)    return x.id < y.id;
 32     return x.p > y.p;
 33 }
 34 
 35 bool cmp_g(Phone x, Phone y)
 36 {
 37     if (x.g == y.g)    return x.id < y.id;
 38     return x.g > y.g;
 39 }
 40 
 41 int main(void)        //Codeforces Round #107 (Div. 2) B. Phone Numbers
 42 {
 43 //    freopen ("C.in", "r", stdin);
 44 
 45     int n;
 46     while (cin >> n)
 47     {
 48         for (int i=1; i<=n; ++i)
 49         {
 50             cin >> p[i].tot >> p[i].name;    p[i].id = i;
 51             p[i].t = p[i].p = p[i].g = 0;
 52             for (int j=1; j<=p[i].tot; ++j)
 53             {
 54                 cin >> p[i].num[j];
 55                 if (p[i].num[j][0] == p[i].num[j][1] && p[i].num[j][1] == p[i].num[j][3] &&
 56                     p[i].num[j][3] == p[i].num[j][4] &&    p[i].num[j][4] == p[i].num[j][6] &&
 57                     p[i].num[j][6] == p[i].num[j][7])    p[i].t++;
 58                 else if (p[i].num[j][0] > p[i].num[j][1] && p[i].num[j][1] > p[i].num[j][3] &&
 59                         p[i].num[j][3] > p[i].num[j][4] && p[i].num[j][4] > p[i].num[j][6] &&
 60                         p[i].num[j][6] > p[i].num[j][7])    p[i].p++;
 61             }
 62             p[i].g = p[i].tot - p[i].t - p[i].p;
 63 //            cout << p[i].t << " " << p[i].p << " " << p[i].g << endl;
 64         }
 65 
 66         int pre = 0;
 67         sort (p+1, p+1+n, cmp_t);
 68         cout << "If you want to call a taxi, you should call: ";
 69         for (int i=1; i<=n; ++i)
 70         {
 71             if (i == 1)
 72             {
 73                 cout << p[i].name;    pre = p[i].t;
 74             }
 75             else if (p[i].t == pre)    cout << ", " << p[i].name;
 76             else    break;
 77         }
 78         cout << "." << endl;
 79         sort (p+1, p+1+n, cmp_p);
 80         cout << "If you want to order a pizza, you should call: ";
 81         for (int i=1; i<=n; ++i)
 82         {
 83             if (i == 1)
 84             {
 85                 cout << p[i].name;    pre = p[i].p;
 86             }
 87             else if (p[i].p == pre)    cout << ", " << p[i].name;
 88             else    break;
 89         }
 90         cout << "." << endl;
 91         sort (p+1, p+1+n, cmp_g);
 92         cout << "If you want to go to a cafe with a wonderful girl, you should call: ";
 93         for (int i=1; i<=n; ++i)
 94         {
 95             if (i == 1)
 96             {
 97                 cout << p[i].name;    pre = p[i].g;
 98             }
 99             else if (p[i].g == pre)    cout << ", " << p[i].name;
100             else    break;
101         }
102         cout << "." << endl;
103     }
104 
105     return 0;
106 }
107 
108 /*
109 If you want to call a taxi, you should call: Rogulenko.
110 If you want to order a pizza, you should call: Fedorov, Rogulenko, Kaluzhin.
111 If you want to go to a cafe with a wonderful girl, you should call: Melnikov.
112 */

 

构造 Codeforces Round #107 (Div. 2) B. Phone Numbers

标签:

原文地址:http://www.cnblogs.com/Running-Time/p/4656706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!