245 条题解

  • -1
    @ 2017-05-06 21:45:06
    //AC100 留念
    #include <bits/stdc++.h>
     using namespace std;
     int data[205];
     int main()
      {
        int n, k, tmp, ans = 0;
        cin >> n >> k;
        for(int i = 1; i <= n; i++)
            while(cin >> tmp && tmp != 0)
               data[tmp]++;
        for(int i = 1; i <= n; i++)
            if(data[i] >= k)
                ans++;
        cout << ans << endl;
        return 0;
      }
    
  • -1
    @ 2017-05-01 00:25:47

    唯心主义代码

    #include<cstdio>
    using namespace std;
    struct hua{int a;int e=0;};
    int main(){
    int res=0,n,k;
    hua name[40000];
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
        while(scanf("%d",&name[i].a)==1&&name[i].a!=0)
            name[i].e++;
    for(int i=1;i<=n;i++)
        if(name[i].e>=k) res++;
    printf("%d",res);
    return 0; 
    }
    
  • -1
    @ 2016-12-09 18:19:48

    #include<cstdio>
    #include<queue>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define maxa 10000
    using namespace std;
    int n,a[maxa];
    int main()
    {
    int n,k,ans = 0,cnt,x;
    cin>>n>>k;
    while(n--)
    {
    cnt = 0;
    while(cin>>x&&x)
    cnt++;
    if(cnt>=k)
    ans++;
    }
    cout<<ans<<endl;
    return 0;
    }

  • -1
    @ 2016-08-05 15:54:53

    你TM在逗我
    这就是传说中的贪心
    ```pascal
    program VictoriaBall;
    var n,k,m,i,t,l:longint;

    begin
    readln(n,k);
    m:=0;
    for i:=1 to n do
    begin
    read(t);
    l:=0;
    while t<>0 do
    begin
    inc(l);
    read(t);
    end;
    if l>=k then inc(m);
    end;

    writeln(m);
    end.
    ```

  • -2
    @ 2018-02-08 21:09:29

    发表一下正解的思路
    首先普遍的做法是判断每个人有多少的原意沟通的人,如果人数大于K,就让结果加一
    但是这个思路很容易就可以证明不对,能过只是因为数据水
    我们考虑这样一种情况:一个人有很多个愿意沟通的人,但是他所愿意沟通的人都无法来到,那么这个人能够来吗?
    显然不能
    介绍一下标解的思路:
    建立一张无向图,每两个原意沟通的人之间有一条边相连
    这张图有两个性质
    1.一个出度小于K的点必然被删除
    2.若该图中每个点的出度都不小于K,该图一定符合要求,因为我们可以把所有人都选上
    这样的话我们就可以用弗洛伊德维护这张图,逐渐删去出度小于K的点,每删去一个点,把所有与该点相连的点的出度减1
    当删到满足性质2时,便符合要求,且一定是最优的
    附上AC代码

    #include<iostream>
    using namespace std;
    int map[210][210],ll[210],pan[210];
    int main()
    {
        int n,k,i,j,a=1,sum;
        cin>>n>>k;
        sum=n;
        for(i=1;i<=n;i++)
        {
            while(1)
            {
                cin>>a;
                if(a==0)
                break;
                map[i][a]=1;
                map[a][i]=1;
                ll[i]++;
            }
        }
        for(int e=1;e<=n;e++)
        for(i=1;i<=n;i++)
        {
            if(ll[i]<k&&!pan[i])
             {
                pan[i]=1;
                sum--;
                for(j=1;j<=n;j++)
                {
                    if(map[i][j])
                     ll[j]--;   
                }
             }
        }
        cout<<sum;
        return 0;
    }
    

信息

ID
1021
难度
3
分类
贪心 点击显示
标签
递交数
6422
已通过
3220
通过率
50%
被复制
23
上传者