`
ccjsjymg
  • 浏览: 62011 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

003排名

阅读更多
首先一个正整数t,表示测试用例的数量。
对每组数据,首先输入一个n(1<=n<=10000),表示参赛队伍的数量。然后有n行,每行为:
Team-name Problems Penalty Info
其中Team-name表示队名(长度不超过20),Problems表示解题数量(32位有符号整数可以表示),Penalty表示罚时(32位有符号整数可以表示),Info为M表示女队,N表示正常队伍。
排序后的结果,格式与输入相同。
首先根据题目数量由多至少,同等题目情况下女队优先,然后罚时少者优先,最后按队名字典序。
每组样例后输出一个空行。
分享到:
评论
1 楼 ccjsjymg 2009-04-15  
简单的赛程排名:
#include <iostream>
using namespace std;
#define ARRAYLENGTH 9
#define GROUPLENGTH 10000
#include <math.h>
#include <ctype.h>
#include <vector>
#include <algorithm>
char* splitDigit(string digitStr);
//char* splitInt(int a);
bool isDigit(string testCaseCout);
int get_Int(char c);
int stringToInt(string teamName);
bool isLetter(string str);
//int calculate(int number);
char get_Char(int c);
bool checkDigit(char c);
bool checkNORM(char c);
bool compareString(string str1,string str2);

/*
数据的复杂度,此程序目前测试用例为1个 
首先根据题目数量由多至少,同等题目情况下女队优先,然后罚时少者优先,最后按队名字典序。
*/ 
/*
字典排序 
*/
char *c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char number[ARRAYLENGTH] = {'1','2','3','4','5','6','7','8','9'};

struct paiming
{
       string teamName;
       int problems;
       int penalty;
       char info;       
};
bool comparator(struct paiming p1,struct paiming p2);
void byLetter(vector<struct paiming> v);

/*按解题数排序*/
bool proSort(struct paiming p1,struct paiming p2)
{
     int t1 = p1.problems;
     int t2 = p2.problems;
     if(t1 != t2)
      {
           return t1 > t2; 
      }    
     return true;
}

/*按N/M排序*/
bool infoSort(struct paiming p1,struct paiming p2)
{
     int t1 = p1.problems;
     int t2 = p2.problems;
     if(t1 == t2)
     {
         char i1 = p1.info;
         char i2 = p2.info;
         if(i1 != i2)
         {
            if(i1 == 'M')
            {
                return true;
            }else
            {
                return false;  
            }
         } 
     }else
     {
          return proSort(p1,p2);
     }
     return true;
}
/*按罚时排序*/
bool paSort(struct paiming p1,struct paiming p2)
{
     int t1 = p1.problems;
     int t2 = p2.problems;
     char c1 = p1.info;
     char c2 = p2.info;
     if(t1 == t2 && c1 ==  c2)
       {
       int i1 = p1.penalty;
       int i2 = p2.penalty;
       if(i1 != i2)
       {
          return i1 < i2;
       }
     }else
     {
        if(t1 ==  t2)
        {
            if(c1 == 'M')
            {
                return true;
            }else
            {
                return false;  
            }  
        }else
        {
            return proSort(p1,p2);
        }
        
     }
     
     return true;
}

/*字典排序*/
bool compareString(string str1,string str2)
{    
       char c1,c2;
       string ts;
       if(str1.length() >= str2.length())
       {
           ts =  str2;
       }
       else
       {
           ts = str1;
       }
       for(int i = 0;i < ts.length();i++)
       {
          if((c1 = str1[i]) != (c2 = str2[i]))
          {
               return c1 < c2;
          }
       }
     return true;
     
}
bool comparator_letter(struct paiming p1,struct paiming p2)
{
     
     int t1 = p1.problems;
     int t2 = p2.problems;
     char c1 = p1.info;
     char c2 = p2.info;
     int i1 = p1.penalty;
     int i2 = p2.penalty;
     if(t1 == t2 && c1 == c2 && i1 == i2)
     {
       string t1 = p1.teamName;
       string t2 = p2.teamName;
       return compareString(t1,t2);
     }else
     {
       if(t1 == t2)
       {
             if(c1 == c2)
             {
                return i1 < i2;  
             }else
             {
                if(c1 == 'M')
                {
                    return true;
                }else
                {
                    return false;  
                }  
             }
       }else
       {
            return proSort(p1,p2);
       }
     }
     return true;
     
}

/*------------------以上为排序------------------------------*/
/*检验是否是N或者M*/
bool checkNORM(char c)
{
     if(c == 'M' || c == 'N')
     {
          return true;
     }
     return false;
}
/*检验是否为数字*/
bool checkDigit(string a)
{
     bool flag = true;
     char *p= splitDigit(a);
     while(*p != '\0')
     {
              char pp = *p++;
              if(pp < '0' || pp > '9')
              {
                  flag = false;
                  break;
              }
     }
     return flag;
}
/*检验是否为字母*/
bool isLetter(string str)
{
   for(int i = 0;i < str.length();i++)
   {
       char c = str[i];
       char up_c = toupper(c);
       if(up_c < 'A' || up_c > 'Z')
       {
          return false; 
       }else
       {
          continue; 
       }
   }
   return true;  
}

/*判断数字*/ 
bool isDigit(string testCaseCout)
{
    bool flag = true;
    char *p = splitDigit(testCaseCout);
    while(*p != '\0')
    {
       int i = 0;
       char pp = *p++;
       while(i < ARRAYLENGTH)
       {
           if(pp == number[i])     
            {
               break;    
            }
            else
            {
               if(i == ARRAYLENGTH - 1)
               {
                   flag = false;
                   break;
               }
               i++; 
               continue; 
            }
       }
       if(!flag)
           break;
     }
     return flag;
}
/*将string化为int型*/
int stringToInt(string teamName)
{
     int sum = 0;
     char str[10000] = {'\0'};
     for(int i = 0;i < teamName.length();i++)
     {
         str[i] = teamName[i];
         int ii = get_Int(str[i]);
         double d = pow(10,teamName.length()-i-1);
         sum += (int)(ii * d);
     }
     return sum;
}
/*拆分字符串*/
char* splitDigit(string digitStr)
{
     int _len = digitStr.length();
     static char str[100] = {'\0'};
     for(int i = 0;i < _len;i++)
     {
          str[i] = digitStr[i];
     }
     return str;//不能返回栈空间即将释放的内存空间 
}
/*原先字符当作数字*/
int get_Int(char c)
{
  static int cc = 0;
  switch (c)
  {
     case '1':
          cc = 1;
           break;
     case '2':
          cc = 2;
           break;
     case '3':
          cc = 3;
           break;
     case '4':
           cc = 4;
           break;
     case '5':
          cc = 5;
           break; 
     case '6':
           cc = 6;
           break;
     case '7':
           cc = 7;
           break;
     case '8':
          cc = 8;
           break;
     case '9':
           cc = 9;
           break;
     default:
           cc = 0;
           break;      
  }
  return cc;
}
void t()
{
     string testCaseCout;
     cout<<"输入测试用例数量:"<<endl;// 
     cin>>testCaseCout;
     while(!isDigit(testCaseCout))
     {
         cout<<"测试用例数量不是数字,请重新输入:"<<endl;
         cin>>testCaseCout;
     }
     int testCaseNumber = stringToInt(testCaseCout);
     string groupCount;
     cout<<"输入参赛队伍数量:"<<endl;
     cin>>groupCount;
     while(!isDigit(testCaseCout))
     {
         cout<<"参赛队伍数量不是数字,请重新输入:"<<endl;
         cin>>groupCount;                        
     }
     int _groupCount = stringToInt(groupCount);
     while(_groupCount< 0 || _groupCount > GROUPLENGTH)
     {
         cout<<"参赛队伍数量在1~10000,请重新输入:"<<endl;
         cin>>groupCount;              
     }
     _groupCount = stringToInt(groupCount);
     struct paiming pa;
     vector<struct paiming> v;
     cout<<"请分别输入队名,解题数量,罚时,Info:"<<endl;
     string prob,penal;
     for(int i = 0;i < _groupCount;i++)
     {
         cin>>pa.teamName>>prob>>penal>>pa.info;
         while(!isLetter(pa.teamName) || !checkNORM(pa.info))
         {
              cout<<"请输入对应的类型数据:"<<endl;
              cin>>pa.teamName>>prob>>penal>>pa.info;
         }
          pa.problems = stringToInt(prob);
          pa.penalty = stringToInt(penal);
          v.push_back(pa);
     }
    sort(v.begin(),v.end(),comparator_letter);
   for(vector<struct paiming>::const_iterator iter = v.begin() ; iter < v.end() ; ++iter)
   {
     cout<<iter->teamName<<" "<<iter->problems<<" "<<iter->penalty<<" "<<iter->info<<endl;  
   }
}
int main()
{
    t();
    system("PAUSE");
}

相关推荐

    黄页信息网站系统源代码--003

    【黄页信息网站系统源代码--003】是一个针对企业、商家和服务提供者信息的在线展示平台,它集成了用户交互、数据管理和信息发布等功能。黄页网站的主要目的是方便用户查找本地或特定领域的服务,同时也为企业提供了...

    XpShop 模板V2-003

    10. **SEO优化**:考虑到搜索引擎排名的重要性,XpShop V2-003可能会遵循最佳的SEO实践,如使用元标签、优化URL结构、加载速度优化等。 压缩包子文件"XpShop14"可能是模板的源代码文件,包括HTML、CSS、JavaScript...

    XpShop模板V3-003

    在SEO优化方面,XpShop V3-003可能考虑了搜索引擎的抓取规则,采用合适的元标签、关键词优化和内链策略,有利于提高网站在搜索引擎中的排名,从而增加网站流量。 综上所述,XpShop模板V3-003是一个全方位的电商解决...

    XpShop模板V2-003

    它通常采用HTML5、CSS3和JavaScript技术,符合Web标准,有利于SEO优化,提高网站在搜索引擎中的排名。同时,模板支持第三方插件集成,可以方便地添加更多功能,如评论系统、评分系统、优惠券等。 四、持续更新与...

    XpShop 模板V3-003

    5. **SEO优化**:为了提高搜索引擎排名,XpShop V3-003可能会包含SEO友好的元素,如元标签、关键词优化和URL结构,帮助网站获得更多的自然流量。 6. **社交媒体整合**:模板可能集成了社交媒体分享按钮,让用户可以...

    XpShop 模板V1-003

    同时,模版还支持SEO优化,有助于提高搜索引擎排名,增加网站曝光度。 三、模版文件结构解析 在提供的压缩包文件"XpShop18"中,我们可以看到模版的完整结构,包括HTML文件、CSS样式表、JavaScript脚本、图片资源等...

    003.3-如何获取更多的关键词--谷歌SEO从入门到精通 带你打造排名10.zip

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(随意编程),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...

    XpShop模板V5-003

    1. **搜索优化**:内置SEO优化工具,帮助商家提高在搜索引擎中的排名,增加网站流量。 2. **购物车功能**:用户可以方便地将商品添加到购物车,进行一次性结算,提升了购物流程的便利性。 3. **商品分类**:支持多级...

    XpShop模板V8-003

    7. **SEO优化**:模板应考虑搜索引擎优化,以便于网站在搜索引擎中的排名提升,吸引更多的自然流量。 8. **后台管理系统**:管理员可以轻松管理商品信息、订单、用户数据等,提高运营效率。 9. **多语言支持**:...

    ZP003_经典行业网站模板_

    这些模板可能还考虑到了SEO优化,有利于提高网站在搜索引擎中的排名,从而吸引更多的潜在客户。 在实际应用中,这些模板的优势在于其灵活性和可定制性。用户可以根据自己的品牌调性和业务需求,调整模板的颜色、...

    XpShop模板V1-003

    6. **SEO优化**:为了提升搜索引擎排名,XpShop模板通常包含SEO友好元素,如元标签、关键词优化和URL结构。 7. **多语言支持**:对于面向全球市场的电商网站,多语言支持是必不可少的,XpShop模板可能包含此功能,...

    中英文企业网站系统源代码--003

    6. **SEO优化**:为了提高搜索引擎排名,源代码可能包含了针对中英文的SEO优化策略,如元标签设置、关键词优化等。 7. **安全性**:源代码中可能包含了安全措施,如防止SQL注入、XSS攻击,以及用户数据加密,确保...

    大学接收校外推荐免试讨论生申请表003.docx

    【标题】: "大学接收校外推荐免试讨论生申请表003.docx" 主要涉及的是关于高校接收推荐免试研究生的申请流程和要求,其中包含申请人的基本信息、学术成绩、外语能力、获奖情况、个人陈述以及推荐意见等关键环节。...

    微电子--芯片测试与封装作业.doc

    中国华大集成电路设计集团有限公司排名第二,销售额达12.003亿元。北京中星微电子有限公司排名第三,销售额达10.134亿元。 在芯片制造领域,中芯国际集成电路制造有限公司排名第一,销售额达113.502亿元。上海华虹...

    博客系统源代码--003

    这个“博客系统源代码--003”很可能是一个经过改进或者更新的版本,对于学习和理解如何构建这样的系统非常有帮助。 在描述中提到的“用户名admin,密码admin888”,这是默认的管理员账户信息。在实际部署时,为了...

    XpShop模板V4-003

    4. **SEO友好**:优化的HTML结构和元标签,有利于搜索引擎抓取,提高网站的可见性和排名。 5. **集成支付接口**:可能已经预集成常见的在线支付方式,如支付宝、微信支付等,方便顾客进行支付。 6. **安全性**:...

    003国际商学院.pdf

    1. 考博录取流程:考博录取涉及报名、考试、评分、排名以及最终的拟录取过程。考生首先需要根据国际商学院的要求提交申请,通过初步审核后参加入学考试,考试成绩加上其他各项评分(如外语、专业基础、专业综合和...

Global site tag (gtag.js) - Google Analytics