游客 Signup | Login
中文 | En

2112 - 我要当学霸!

     自从fuzhongqing来到青岛科技大学以来发现身边有很多学霸存在。不甘堕落的学渣fuzhongqing决定向学霸学习,自我提升,可是那些才是真正的学霸呢?

     fuzhongqing发现学霸有一个共同特征---去图书馆借书。于是他就像图书馆管理员阿姨借来了借书表。借书表有m(1<=m<=10000)行记录了n(1<=n<=1000)个人的借书行为。每行有两个数字ai,bi 代表ai个人借了bi本书。当然如果他借书的数目不够(小于)k本就说明他是伪学霸了。不值得fuzhongqing学习!

    现在弱弱的fuzhongqing跑来向会编程的你求助。让你帮他找出那些是学霸。

Input

第一行有一个整数T 表示有T组测试数据

接下来一行有三个整数 m n k 分别表示借书表的条目数,借书人数,学霸的最低读书标准。

接下来有m行每行有两个数字ai,bi 代表ai个人借了bi本书。(同一个人有可能借书多次)

Output

输出学霸的编号 如果有多个学霸 那么按照谁学霸编号升序输出   每组数组用用空格隔开  .如果没有学霸请输出0.

Examples

Input

2
5 4 4
1 1
2 2
3 4
2 3
4 6
4 3 9
1 5
2 6
3 7
3 1

Output

2 3 4
0

Solution C

#include <stdio.h>
#include <string.h>
int main()
{ 
	 int T;
	 scanf("%d",&T);
	 while(T--)
	 {  int a,b,m,k,n,x=0,i,j,s1[1000],temp=0;
	    char s[1000];
		memset(s1,0,sizeof(int)*1000);
	    scanf("%d%d%d",&m,&n,&k);
		while(m--)
        {    int flag=1;
			 scanf("%d%d",&a,&b);
			 s1[a]+=b;
			 if(s1[a]>=k)
			 {
			 for(i=0;i<x;i++)
			 if(s[i]==a) flag=0;
			 if(flag) s[x++]=a;
			 }
		}
		for(i=0;i<x;i++)
		 for(j=i+1;j<x;j++)
			 if(s[j]<s[i]) {temp=s[j];s[j]=s[i];s[i]=temp;}
	    for(i=0;i<x;i++)
			if(!i)printf("%d",s[i]);else printf(" %d",s[i]);
	    if(!x) printf("0");
		printf("\n");
	 }
	 return 0;
}

Solution C++

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int m,n,key,max=0;
        int per[10001];
        memset(per,0,sizeof(per));
        cin>>m>>n>>key;
        while(m--)
        {
            int a,b;
            cin>>a>>b;
            per[a]+=b;
            if(a>max&&b>=key)
            max=a;
        }
        int none=1;
        for(n=1;n<=max;n++)
        {
            if(per[n]>=key)
            {
                none=0;
                if(n!=max)
                    cout<<n<<" ";
                else
                    cout<<n<<endl;
            }
        }
        if(none) cout<<"0"<<endl;
    }
    return 0;
}

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题