基础编程——KTV
题目描述
小编的想法
使用逆向思维,歌曲不超过1000,不妨我们设置一个1001大小的数组,每次有人喜欢唱歌a[i]++。
之后遍历数组,初始化需要的歌曲时间spendTime为0,如果a[i]==0,则continue;若可以整除x,则spendTime+=(a[i]/x);若不可整除,则spendTime+=(a[i]/x+1);最后,把计算得到的spendTime和y作比较,如果spendTime>y,输出NO,否则输出YES。
完整代码
#include<iostream>
using namespace std;
int main(){
int t,i,j,k,n,x,y,m,s,sum;
int a[1001];
cin>>t;
for(i=0;i<t;i++){
for(j=0;j<1001;j++) a[j]=0;
cin>>n>>x>>y;
for(j=0;j<n;j++){
cin>>m;
for(k=0;k<m;k++){
cin>>s;
a[s]++;
}
}
sum=0;
for(j=0;j<1001;j++){
if(a[j]==0) continue;
if(a[j]%x==0) sum+=(a[j]/x);
else sum+=(a[j]/x+1);
}
if(sum>y) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return 0;
}