题解:[Algo Beat Contest 002.5 A] 题目分配 (divide)
验题人题解。这题我验了十几分钟,没想到吧。
前置知识
- 用上面的方法加是可以确保增加的不合理度最少的。
- 需要增加
m-\frac{n(n+1)}{2} 次。 - 当增加量是
n 的倍数时,最小的不合理度为m-1 。否则,最小的不合理度为m 。
代码展示
为了防止分类讨论,这里使用了 __int128。
它是一种在 64 位操作系统下可以使用的类型,能够存储 cin 或 cout 读入或输出。
#include<bits/stdc++.h>
#define int __int128
using namespace std;
void read(int& a){
long long b;cin>>b;a=b;
}
void write(int a){
long long b=a;cout<<b;
}
void solve(){
int n,m;read(n),read(m);
swap(n,m);
if (m*(m+1)/2>n){
cout<<"-1 -1\n";
}
else{
write(n-m*(m-1)/2-1);
cout<<" ";
write(m-1+((n-m*(m+1)/2)%m?1:0));
cout<<"\n";
}
}
signed main(){
int t;read(t);
while (t--)solve();
return 0;
}