判断 YES/NO 的时候
if((n - p) * (av - 1) >= k - av * p)
能A
但是
av>ceil(tmp*1.0/(n-p)
就WA了几个点
有人能康康或者给一组hack数据吗
谢谢啦
#include<bits/stdc++.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define int long long
#define re register
#define mod 998244353
#define inf 0x3f3f3f3f
using namespace std;
const int N=300005;
int n,m,k,d,t,sum,mi,p;
char a[N];
int b[N];
template <class T> inline void read(T &x){
x=0;int g=1; char s=getchar();
for (;s>'9'||s<'0';s=getchar()) if (s=='-') g=-1;
for (;s<='9'&&s>='0';s=getchar()) x=(x<<1)+(x<<3)+(s^48);
x*=g;
}
signed main()
{
re int i,j,x,y,z;
read(n);read(m);read(k);read(p);
if(n==p&&k%p!=0) return printf("NO"),0;
int av=k/p;
if (av>m) av=m;
int tmp=k-av*p,cnt=0;
if ((n - p) * (av - 1) >= k - av * p)//av>ceil(tmp*1.0/(n-p) ???
{
printf("YES\n");
for (i=1;i<=p;i++)
printf("%lld %lld\n",av,m-av);
while(tmp)
{
if (tmp>=av-1) printf("%lld %lld\n",av-1,m-av+1),tmp-=av-1;
else printf("%lld %lld\n",tmp,m-tmp),tmp=0;
cnt++;
}
for (i=1;i<=n-p-cnt;i++)
printf("%lld %lld\n",0,m);
}
else printf("NO");
return 0;
}