Educational Codeforces Round 45

A.

一个小模拟    不解释

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
long long n,m,a,b;
int main(){
    scanf("%I64d%I64d%I64d%I64d",&n,&m,&a,&b);
    printf("%I64d\n",min((n%m)*b,(m-(n%m))*a));
}

B.

给你一个数列A[i]

把所有Ai>Aj且Ai<=Aj+K的Aj去掉 最少剩下多少数

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
int n,k,a[200050],vis[200050],ans;
int main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    sort(a+1,a+1+n);
    for(int i=1;i<n;i++)if(a[i]!=a[i+1]&&a[i]+k>=a[i+1])vis[i]=1;
    for(int i=n;i;i--)if(vis[i]&&a[i]==a[i-1])vis[i-1]=1;
    for(int i=1;i<=n;i++)if(!vis[i])ans++;
    printf("%d\n",ans);
}

C.

猜你喜欢

转载自www.cnblogs.com/SiriusRen/p/9164350.html