贪心结构体?
本题正解是priority_queue
可能是数据范围比较小,所以勉强a
思路:依旧先结构体排序(l,r),老样子根据 r 升序排序,clt 结构体是收集糖果的甜度和个数,之后暴力判断即可
时间复杂度:n+k+nlog2(n)+n^2 -> n^2
ps:(保留大的阶数)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+9;
struct we{
int l,r;
bool operator<(const we&t)const{
return r<t.r;
}
}arr[N];
struct clt{
int x,num;
}brr[N];
bool bj[N];
void moyuhualuo(){
int n,k; cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>arr[i].l>>arr[i].r;
} sort(arr+1,arr+1+n);
for(int i=1;i<=k;i++){
cin>>brr[i].x>>brr[i].num;
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(brr[j].num&&arr[i].l<=brr[j].x&&arr[i].r>=brr[j].x){
ans++;
brr[j].num--;
break;
}
}
}
cout<<ans;
}
int main( )
{
cin.tie(nullptr)->sync_with_stdio(false);
moyuhualuo();
return 0;
}
圆圈均分糖果?
题目求最小的代价,也就是求传出去的糖果总和:
正负是x内含的并不是图片上的正负号!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+9;
void moyuhualuo(){
int n; cin>>n;
int sum=0;
vector<int>a(n+1),c(n+1);
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
int avg=sum/n;
for(int i=1;i<=n;i++){
c[i]=c[i-1]+avg-a[i];
} sort(c.begin()+1,c.end());
int ans=0;
for(int i=1;i<=n;i++){
ans+=abs(c[n/2+1]-c[i]);
}cout<<ans;
}
int main( )
{
moyuhualuo();
return 0;
}
时间复杂度:2*n+nlog2(n)+n-> n/nlog2(n)->nlog2(n)
数据大的话一直都是nlog2(n)
今日无事,抚琴听曲 ^ _ ^