zoukankan      html  css  js  c++  java
  • 杭电1084

    第一次没仔细审题:

    View Code
      1 #include<iostream>
      2 #include<sstream>
      3 #include<string>
      4 #include<vector>
      5 using namespace std;
      6 
      7 class stu
      8 {
      9 public:
     10     int sol;
     11     string time;
     12     int h, m, s;//对应的时分秒
     13     int score;//得分
     14     bool sm;//标志是否是最小的那个(默认是)
     15     stu()
     16     {
     17         sol = 0;
     18         h = 0;
     19         m = 0;
     20         s = 0;
     21         score = 0;
     22         time = "0";
     23         sm = true;
     24     }
     25     friend istream& operator>>(istream& in, stu& x);
     26 };
     27 
     28 inline istream& operator>>(istream& in, stu& x)
     29 {
     30     in >> x.sol >> x.time;
     31     stringstream ss;
     32     ss.clear();
     33     ss << x.time;
     34     char ch;
     35     ss >> x.h >> ch >> x.m >> ch >> x.s;
     36     ss.clear();
     37     return in;
     38 }
     39 
     40 bool is_small(stu a, stu b)
     41 {
     42     //解决问题数目相同情况下比较大小
     43     if(a.h != b.h)
     44         return a.h < b.h;
     45     if(a.m != b.m)
     46         return a.m < b.m;
     47     return a.s < b.s;
     48 }
     49 
     50 void f(vector<stu>& svec, int i)
     51 {
     52     //判断是否是出于前半部分学生
     53     int j = i+1;
     54     while( j < svec.size())
     55     {
     56         if(svec[i].sol == svec[j].sol)
     57         {
     58             if(!is_small(svec[i], svec[j]))
     59                 svec[i].sm = false;
     60             else
     61                 svec[j].sm = false;
     62         }
     63         ++j;
     64     }
     65 }
     66 void mark(stu& a)
     67 {
     68     //分数等级判断
     69     int k = 0;
     70     if(a.sm)
     71         k = 5;
     72     if(a.sol == 5)
     73         a.score = 100;
     74     else if(a.sol == 4)
     75         a.score = 90 + k;
     76     else if(a.sol == 3)
     77         a.score = 80 + k;
     78     else if(a.sol == 2)
     79         a.score = 70 + k;
     80     else if(a.sol == 1)
     81         a.score = 60 + k;
     82     else
     83         a.score = 50;
     84 }
     85 void out(vector<stu> svec)
     86 {
     87     for(int i = 0; i < svec.size(); ++i)
     88     {
     89         mark(svec[i]);
     90         //cout << "slo:" << svec[i].sol << " h:" << svec[i].h << " m:" << svec[i].m << " s:" << svec[i].s <<" score:" << svec[i].score << endl;
     91         cout << svec[i].score << endl;
     92     }
     93 }
     94 int main()
     95 {
     96     int t;
     97     while(cin >> t, t >= 0)
     98     {
     99         vector<stu> svec;
    100         stu s;
    101         while(t--)
    102         {
    103             cin >> s;
    104             svec.push_back(s);
    105             int i = 0;
    106             while(i < svec.size())
    107             {
    108                 f(svec, i);
    109                 i++;
    110             }
    111         }
    112         out(svec);
    113         cout << endl;
    114     }
    115     return 0;
    116 }

    后来补充如下:

    View Code
      1 #include<iostream>
      2 #include<sstream>
      3 #include<string>
      4 #include<cstring>
      5 #include<algorithm>
      6 #include<vector>
      7 using namespace std;
      8 
      9 class stu
     10 {
     11 public:
     12     int sol;
     13     string time;
     14     int h, m, s;//对应的时分秒
     15     int score;//得分
     16     bool sm;//标志是否是最小的那个(默认是)
     17     stu()
     18     {
     19         sol = 0;
     20         h = 0;
     21         m = 0;
     22         s = 0;
     23         score = 0;
     24         time = "0";
     25         sm = false;
     26     }
     27     friend istream& operator>>(istream& in, stu& x);
     28 };
     29 
     30 inline istream& operator>>(istream& in, stu& x)
     31 {
     32     in >> x.sol >> x.time;
     33     stringstream ss;
     34     ss.clear();
     35     ss << x.time;
     36     char ch;
     37     ss >> x.h >> ch >> x.m >> ch >> x.s;
     38     ss.clear();
     39     return in;
     40 }
     41 
     42 bool cmp(stu a, stu b)
     43 {
     44     if(a.sol != b.sol)
     45         return a.sol < b.sol;
     46     //解决问题数目相同情况下比较大小
     47     if(a.h != b.h)
     48         return a.h < b.h;
     49     if(a.m != b.m)
     50         return a.m < b.m;
     51     return a.s < b.s;
     52 }
     53 void mid(vector<string>& a, vector<stu> svec)
     54 {
     55     //确定中间的那个时间
     56     sort(svec.begin(), svec.end(), cmp);
     57     int i, k;
     58     for(i = 1, k = 0; i < svec.size(); ++i)
     59     {
     60         if(svec[i].sol != svec[k].sol)
     61         {
     62             a[svec[k].sol] = svec[(k+i)/2-1].time;
     63             //cout << svec[(k+i)/2-1].time << endl;
     64             k = i;
     65         }
     66     }
     67     if(i-k > 1)
     68         a[svec[k].sol] = svec[(k+i)/2-1].time;
     69     else
     70         a[svec[k].sol] = svec[k].time;
     71 }
     72 void f(vector<stu>& svec)
     73 {
     74     vector<string> a(6, "0");
     75     mid(a, svec);
     76     for(int i = 0; i < svec.size(); ++i)
     77         if(a[svec[i].sol] >= svec[i].time)
     78             svec[i].sm = true;
     79 }
     80 
     81 void mark(stu& a)
     82 {
     83     //分数等级判断
     84     int k = 0;
     85     if(a.sm)
     86         k = 5;
     87     if(a.sol == 5)
     88         a.score = 100;
     89     else if(a.sol == 4)
     90         a.score = 90 + k;
     91     else if(a.sol == 3)
     92         a.score = 80 + k;
     93     else if(a.sol == 2)
     94         a.score = 70 + k;
     95     else if(a.sol == 1)
     96         a.score = 60 + k;
     97     else
     98         a.score = 50;
     99 }
    100 void out(vector<stu> svec)
    101 {
    102     for(int i = 0; i < svec.size(); ++i)
    103     {
    104         mark(svec[i]);
    105         cout << svec[i].score << endl;
    106     }
    107 }
    108 int main()
    109 {
    110     int t;
    111     while(cin >> t, t >= 0)
    112     {
    113         vector<stu> svec;
    114         stu s;
    115         while(t--)
    116         {
    117             cin >> s;
    118             svec.push_back(s);
    119         }
    120         f(svec);
    121         out(svec);
    122         cout << endl;
    123     }
    124     return 0;
    125 }
    126 
    127 
    128 
    129 /*
    130 5
    131 5 06:30:17
    132 4 07:31:27
    133 4 08:12:12
    134 4 05:23:13
    135 4 05:24:19
    136 
    137 5
    138 1 1:5:6
    139 1 1:6:9
    140 1 3:5:9
    141 1 2:8:32
    142 1 4:36:25
    143 
    144 5
    145 1 1:5:6
    146 1 1:6:9
    147 1 3:5:9
    148 3 5:6:9
    149 3 3:8:32
    150 
    151 4
    152 1 1:5:6
    153 1 1:6:9
    154 1 3:5:9
    155 3 5:6:9
    156 
    157 
    158 */
  • 相关阅读:
    HTML5 jQuery图片上传前预览
    【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画
    20个非常绚丽的 CSS3 特性应用演示
    C#.NET开源项目、机器学习、商务智能
    SqlServer中decimal(numeric )、float 和 real 数据类型的区别[转]
    asp.net Session
    Entity Framework 5.0系列之自动生成Code First代码
    关于Memcache mutex设计模式的.net实现
    Discuz!NT中的Redis架构设计
    使用ServiceStackRedis链接Redis简介
  • 原文地址:https://www.cnblogs.com/sanghai/p/2998721.html
Copyright © 2011-2022 走看看