Skip the Class hdu AB

    xiaoxiao2021-03-25  69

    原文:

    http://acm.split.hdu.edu.cn/showproblem.PHP?pid=6015

    翻译:

    问题描述

    终于又开学啦。呃喵最喜欢的就是开学了,因为这样她又可以愉快地翘课了(啊?)

    呃喵接下来有n节课程需要上(换句话说,可以翘。)

    每节课程有相应的课程类型与课程翘课价值。

    有一点需要注意的是,呃喵不可以翘同一类课程超过两次,就是如果这类课已经翘了两次,接下来就一定要上。

    问你在这个条件下,呃喵可以获得的最大翘课价值。

    输入描述

    第一行为一个整数T,代表数据组数。

    接下来,对于每组数据——

    第一行一个整数n,表示接下来需要依次上的课程数量,

    接下来有n行,每行包括一个仅由'a'~'z'构成的长度不超过10的字符串s与一个正整数v

    其中字符串表示课程的类型,相同的字符串代表相同的课程。

     

    数据保证——

    1 <= T <=1000

    对于每组数据,1 <= n <=1001 <= |s| <= 10, 1 <= v <= 1000

    输出描述

    对于每组数据,输出一行。

    该行有1个整数,表示呃喵可以获得的最大翘课价值。

    输入样例

    2

    5

    english 1

    english 2

    english 3

    math 10

    cook 100

    2

    a 1

    a 2

    输出样例

    115

    3

    新入坑acm,上C语言课时也没有太深了解结构体,半天做不出来这个题,最后看了答案,并不是很难,附上sort函数用法。

    http://www.jb51.NET/article/54863.htm

    代码:

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; struct node {     char name[15];     int va; }cl[105]; bool cmp(node x,node y) {     if(strcmp(x.name,y.name)==0)         return x.va>y.va;     else         return strcmp(x.name,y.name)>0? true:false; } int main() {     int t,n,i,sum,cnt=1;     scanf("%d",&t);     while(t--)     {         scanf("%d",&n);         for(i=0;i<n;i++)         {             scanf("%s%d",cl[i].name,&cl[i].va);         }         sort(cl,cl+n,cmp);         sum=cl[0].va;         for(i=1;i<n;i++)         {             if(strcmp(cl[i-1].name,cl[i].name)==0)             {                 if(cnt<2)                 {                     sum=sum+cl[i].va;                     cnt++;                 }             }             else             {                 cnt=1;                 sum=sum+cl[i].va;             }         }         printf("%d\n",sum);     }

        return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-38082.html

    最新回复(0)