DZY Loves Partition
【思路】
贪心
【代码】
1 #include <iostream> 2 using namespace std; 3 4 typedef long long ll; 5 const int mod=1e9+7; 6 7 ll n,k,a[200000]; 8 9 int main() 10 { 11 int T; 12 cin>>T; 13 while(T--) { 14 cin>>n>>k; 15 ll x=n/k; 16 if(k*(k+1)/2>n) 17 cout<<-1<<endl; 18 else { 19 if(k%2) { 20 for(int i=k/2;i>0;i--) a[i]=x-(k/2-i+1); 21 for(int i=k/2+1;i<=k;i++) a[i]=x+(i-k/2-1); 22 int m=n%k; 23 for(int i=k;m>0;m--,i--) a[i]++; 24 } 25 else { 26 for(int i=k/2;i>0;i--) a[i]=x-(k/2-i+1); 27 for(int i=k/2+1;i<=k;i++) a[i]=x+(i-k/2); 28 int m=n%k; 29 for(int i=k/2;i&&m;i--,m--) a[i]++; 30 if(m>0) 31 for(int i=k;i>k/2&&m;i--,m--) a[i]++; 32 } 33 ll ans=a[1]; 34 for(int i=2;i<=k;i++) { ans*=a[i]; ans%=mod; } 35 cout<<ans<<endl; 36 } 37 } 38 return 0; 39 }