测试样例不严谨:
#include<bits/stdc++.h>
#include <functional>
using namespace std;
long long n,m,k,ans=0,t[100005];
struct name{
long long a,b;
};
name l[100005];
bool cmp(name x,name y){
if(x.a!=y.a) return x.a<y.a;
return x.b>y.b;
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=m;i++) cin>>l[i].a;
for(int i=1;i<=m;i++) cin>>l[i].b;
sort(l+1,l+m+1,cmp);
long long sum=l[1].b,o=l[1].a,cnt=1;
for(int i=2;i<=m;i++){
if(sum>=k){
t[o]=cnt;
while(true){
if(l[i].ao)i++;
else break;
}
o++;
cnt=sum=0;
}
if(l[i].ao){
sum+=l[i].b;
cnt++;
}
}
if(sum>=k) t[o]=cnt;
for(int i=1;i<=n;i++){
ans+=t[i];
t[i]=bool(!t[i])*1e9;
}
sort(t+1,t+n+1);
if(t[n]==1e9) cout<<"-1";
else cout<<ans;
}
切记不要像我一样:
#include<bits/stdc++.h>
using namespace std;
long long n,m,k;
struct name{
long long a,b;
};
name l[100005];
long long t[100005];
bool cmp(name x,name y){
if(x.a!=y.a){
return x.a<y.a;
}
return x.b>y.b;
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=m;i++) cin>>l[i].a;
for(int i=1;i<=m;i++) cin>>l[i].b;
sort(l+1,l+m+1,cmp);
long long sum=l[1].b,o=l[1].a,cnt=1;
for(int i=2;i<=m;i++){
if(sum>=k){
t[o]=cnt;
while(true){
if(l[i].ao){
i++;
}else{
break;
}
}
o++;
cnt=0;
sum=0;
}
if(l[i].ao){
sum+=l[i].b;
cnt++;
}
}
if(sum>=k){
t[o]=cnt;
}
for(int i=1;i<=m;i++){
if(!t[i]) t[i]=1e9;
}
sort(t+1,t+n+1);
if(t[n]1e9){
cout<<"-1";
return 0;
}
long long ans=0;
while(true){
long long l=0;
for(int i=1;i<=n;i++){
if(t[i]){
t[i]--,ans++;
l=i;
}
}
long long ans2=0,ans3=0,p=0;
for(int i=1;i<=n;i++){
if(t[i]){
ans2++;
p=i;
}
ans3+=t[i];
}
if(ans20){
cout<<ans;
return 0;
}else if(ans21){
if(lp){
cout<<ans+1;
return 0;
}
if(t[n+1]==1e9){
cout<<"-1";
}else{
cout<<ans+t[l]*2;
}
return 0;
}
}
}