题解

15 条题解

  • 1
    @ 2018-11-06 17:43:49
    //字符串真好用QwQ
    //贪心部分,每个人存一下最小排名,按排名排序,如果一个人的排名与在他前面的人数量相等,那这个人的排名是确定的
    //注意处理排名相同的情况
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    struct node{
        string c;
        int ranke;
    }q[510];
    int cmp(const node&x,const node&y)
    {
        return x.ranke<y.ranke;
    }
    char a[4];
    string b;
    int main()
    {
        int n,i,j,k,t,m,now=0,has=0,ji=0;
        cin>>n;
        for(i=1;i<=n;i++)
         {
            cin>>t>>a>>m;
            for(j=1;j<=t;j++)
            {
                cin>>b;
                for(k=1;k<=now;k++)
                 if(b==q[k].c)
                  break;
                if(k<=now)
                 q[k].ranke=min(q[k].ranke,m);
                else
                 {
                    now++;
                    q[now].c=b;
                    q[now].ranke=m;
                 }
            }
         }
         sort(q+1,q+now+1,cmp);
         q[0].ranke=-1;
         for(i=1;i<=now;i++)
          { 
                ji++;
                if(q[i].ranke!=q[i-1].ranke)
                {
                    has+=ji;
                    ji=0;
                }
                //cout<<q[i].ranke<<" "<<q[i].c<<endl;
                if(q[i].ranke==has)
                 cout<<has<<" "<<q[i].c<<endl;
            
          }
          return 0;
    }
    
  • 1
    @ 2016-12-17 12:15:33

    /*
    思路:预处理:将歌曲输入的时候编号,歌曲名存于song[][]内
    用f[i]表示前i名内有几首歌
    用s[i][101]存放前i名内各歌曲编号,如s[i][j]=1表示第j首歌在前i名

    用ans[i]表示确定为第i名的歌曲编号 若ans[i]不为0方才输出
    */
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int N=101;
    char song[N][26],temp[26];
    int f[N],s[N][101],ans[N],now=0;
    int pd(char s[26])//判断歌曲名是否已经存在,若存在返回编号,不存在则新建一个编号
    {for(int i=1;i<=now;i++)
    if(strcmp(song[i],s)==0) return i;
    now++;
    strcpy(song[now],s);
    return now;
    }
    int main()
    {int n,i,j,t,mmax=0,a,b;
    scanf("%d",&n);
    //输入预处理
    for(i=1;i<=n;i++)
    {scanf("%d %s %d",&a,temp,&b);
    for(j=1;j<=a;j++)
    {scanf("%s",temp);
    t=pd(temp);
    s[b][t]=1; //前b名编号为t的歌存在
    mmax=mmax<b?b:mmax;
    }
    }
    //从1到mmax统计各名次的个数
    for(i=1;i<=mmax;i++)
    {if(f[i-1]==i-1)
    {//找出不相同的编号存到ans中
    for(j=1;j<=now;j++)
    {if(s[i][j] && !s[i-1][j]) { ans[i]=j;break;}
    }
    }
    //更新当前名次存在的歌曲编号,统计个数
    t=0;
    for(j=1;j<=now;j++)
    {
    if(s[i-1][j]) s[i][j]=1;
    if(s[i][j]) t++;
    }
    f[i]=t;
    }
    //输出答案
    for(i=1;i<=now;i++)
    {if(ans[i])
    {printf("%d %s\n",i,song[ans[i]]);
    }
    }
    return 0;
    }

  • 0
    @ 2014-10-16 18:06:05

    默默的想问一下逻辑那里出了问题,求解?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct ism
    {
    int A;
    int B;
    char str[100][26];
    } Ism;
    char str_mark[100][26];
    int mark;
    int compare(const void* a,const void* b);
    int main()
    {
    int n;
    scanf("%d",&n);
    Ism ism[n];
    int i,j,t;
    for(i=0; i<n; i++)
    {
    scanf("%d and %d ",&ism[i].A,&ism[i].B);
    for(j=0; j<ism[i].A; j++)
    scanf("%s",ism[i].str[j]);
    }
    qsort(ism,n,sizeof(Ism),compare);
    if(ism[0].B==1)
    printf("%d %s",ism[0].B,ism[0].str[0]);
    else
    {
    for(i=0; i<ism[0].A; i++)
    strcpy(str_mark[mark++],ism[0].str[i]);
    }
    int fs=0;
    for(i=1; i<n; i++)
    {
    if(ism[i].B-ism[i-1].B==1)
    {
    for(j=0; j<ism[i].A; j++)
    {
    fs=0;
    for(t=0; t<mark; t++)
    {
    if(!strcmp(str_mark[t],ism[i].str[j]))
    {
    fs=1;
    break;
    }
    }
    if(fs==0&&j<ism[i].A)
    break;
    }
    printf("%d %s\n",ism[i].B,ism[i].str[j]);
    }
    else
    {
    for(j=0;j<ism[i].A;j++)
    {

    fs=0;
    for(t=0; t<mark; t++)
    {
    if(!strcmp(str_mark[t],ism[i].str[j]))
    {
    fs=1;
    break;
    }
    }
    if(fs==0&&j<ism[i].A)
    {
    strcpy(str_mark[mark++],ism[i].str[j]);
    }
    }
    }
    }

    return 0;
    }
    int compare(const void* a,const void* b)
    {
    return(((Ism*)a)->B-((Ism*)b)->B);
    }

  • 0
    @ 2009-11-05 20:05:24

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    嘿嘿 1A哦~~

  • 0
    @ 2009-10-24 15:08:11

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    千万注意 ansistring...

  • 0
    @ 2009-10-18 16:00:58

    编译通过...

    ├ 测试数据 01:答案正确... 25ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:25ms

    sunny的杰作

  • 0
    @ 2009-02-04 14:59:56

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    用ANSISTTRING才过,感谢LoLitter的提醒!!!!!!!!!!!!

  • 0
    @ 2007-11-08 14:40:10

    根据最末可能排序

  • 0
    @ 2007-08-20 16:53:05

    AC

  • 0
    @ 2007-08-02 09:20:55

    怎么第7点及第10点总超时?用oibh上的数据测瞬间就出解了。

    ?????哪位大牛解释下?十分感谢!

  • 0
    @ 2007-02-05 23:21:58

    编译通过...

    ├ 测试数据 01:答案正确... 119ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 56ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:175ms

    一次ac,就是输入读得大了

  • 0
    @ 2006-12-27 20:03:51

    预处理f[i]代表必须放在[1,i]这个范围内(当然可以是[1,i]的子集)的歌的个数

    f[i]=i说明1..i区间内被安排满了,此时如果再有f=i+1,说明。。。。

  • 0
    @ 2006-11-15 08:46:50

    编译通过...

    ├ 测试数据 01:答案正确... 9ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:9ms

    为什么有一个9ms 这可是puppy测的啊。 难道是读入时耗的时

  • 0
    @ 2006-11-07 17:24:36

    vijos的数据 是不是和oibh 公布一模一样呢/?

    我怎么在 自己的计算机上都是一闪出解,为何提交时 最后一个点tle 呢?

    。。。。。。

    只能用神奇来形容了。。 同一个程序 再交一遍就A 了。 汗。

  • 0
    @ 2006-11-05 15:19:33

    编译通过...

    ├ 测试数据 01:答案正确... 119ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 103ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:222ms

    用STRING就不过 用ANSISTTRING就过 我无语了-.-

    • @ 2016-09-01 19:59:55

      说明数据大!!唉……

  • 1

信息

ID
1287
难度
6
分类
字符串 | 贪心 点击显示
标签
(无)
递交数
267
已通过
74
通过率
28%
被复制
4
上传者