按照我的写法,如果用 long long,sub#4就会爆。
但如果把 long long 都改成 __int128 就 AC 了,请问各位大佬这是为什么?
AC代码:
#include<bits/stdc++.h>
#define md 1000000007
using namespace std;
int main()
{
long long t,n,k;
cin>>t;
while(t--){
__int128 maxn=0,ans=0;
cin>>n>>k;
if(k==1){
cout<<n*(n+1)/2%md<<endl;continue;
}
maxn=n*(n+1)/2;
__int128 tt=(n-1)*n/2,shang=k/2,xia=k-shang;
__int128 ans_s=(((tt-shang+1)+tt)*shang/2);
__int128 ans_x=(((maxn-xia+1)+maxn)*xia/2);
ans=(ans_s+ans_x)%md;
cout<<(long long)ans%md<<endl;
}
return 0;
}
另外问一句:__int128 在 CSP 比赛中可以用吗?