题解:P14166 [Algo Beat Contest 002.5 A] 题目分配 (divide)
miller2014 · · 题解
题目传送门
1 具体做法
1.1 无解
不难发现,如果每道题都恰好让 -1 -1即可。
1.2 最大值
为了符合题目要求,我们让第 太邪恶了。
1.3 最小值
同上,为了符合题目要求,我们让第
2 代码
2.1 无解
一个判断即可。
if(n>=2000000000||m<n*(n+1)/2)cout<<"-1 -1\n";
2.2 最大值
为了防止溢出,对与
if(n&1)cout<<m-(n-1)/2*n-1;
else cout<<m-n/2*(n-1)-1;
2.3 最小值
同上,为了防止溢出,对与
if(n&1)cout<<n-1+((m-(n+1)/2*n)%n?1:0)<<"\n";
else cout<<n-1+((m-n/2*(n+1))%n?1:0)<<"\n";
2.4 ACcode
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int t,n,m;
cin>>t;
while(t--)
{
cin>>n>>m;
if(n>=2000000000||m<n*(n+1)/2)cout<<"-1 -1\n";
else if(n&1)cout<<m-n/2*(n-1)-1<<" "<<n-1+((m-n/2*(n+1))%n?1:0)<<"\n";
else cout<<m-(n-1)/2*n-1<<" "<<n-1+((m-(n+1)/2*n)%n?1:0)<<"\n";
}
}
已做防伪处理,请勿复制!!!