社区讨论
T3求助
题目总版参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhj3qt8v
- 此快照首次捕获于
- 2025/11/03 20:14 4 个月前
- 此快照最后确认于
- 2025/11/03 20:14 4 个月前
拼尽全力无法战胜 orz orz
85pts,h=2 WA 了
CPP#include <bits/stdc++.h>
using namespace std;
#define int __int128
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
inline void print(int n)
{
if(n<0)
{
putchar('-');
n*=-1;
}
if(n>9) print(n/10);
putchar(n % 10 + '0');
}
#define db double
#define pii pair<int,int>
#define mp make_pair
int a[100006];
int n,m,k,h;
priority_queue<int> q;
bool check(int x)
{
while(!q.empty())
{
q.pop();
}
int num1=0;
int numh=0;
for(int i=1;i<=n;i++)
{
if(a[i]<x)
{
numh=numh+(x-a[i])/h;
num1=num1+(x-a[i])%h;
if((x-a[i])%h!=0)
{
q.push((x-a[i])%h);
}
}
// while(!q.empty())
// {
// cout<<q.top()<<" ";
// q.pop();
// }
}
if(numh<=k && num1<=m) return 1;
if(numh<=k && num1>m)
{
while(numh<k && !q.empty() && num1>m) //really tang
{
int tmp=q.top();
q.pop();
// if(num1>m && numh+1<=k)
// {
num1-=tmp;
numh+=1;
// }
// cout<<num1<<numh<<endl;
}
if(numh<=k && num1<=m) return 1;
}
return 0;
}
signed main()
{
int st=clock();
// freopen(".in","r",stdin);
// freopen("sk.out","w",stdout);
n=read(); m=read();k=read();h=read();
int mn=INT_MAX;
for(int i=1;i<=n;i++)
{
a[i]=read();
mn=min(a[i],mn);
}
int l=mn,r=10000000000000008;
int ans=mn;
while(l<r)
{
int mid=(l+r)/2;
if(check(mid))
{
ans=mid;
l=mid+1;
}
else r=mid;
}
print(ans);
// cerr<<1.0*(clock()-st)/CLOCKS_PER_SEC<<endl;
return 0;
}
/*
1 0 2 2
1
*/
回复
共 3 条回复,欢迎继续交流。
正在加载回复...