QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#93398 | #6132. Repair the Artwork | lam | AC ✓ | 1153ms | 10524kb | C++14 | 1.5kb | 2023-03-31 19:39:03 | 2023-03-31 19:39:04 |
Judging History
answer
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 110LL;
const int mod = 1e9 + 7;
int n,m;
int a[maxn];
int lim[maxn];
ll dp[maxn][5060][2];
ll ppow(ll x, ll y)
{
ll temp=1LL;
while (y)
{
if (y&1) temp=temp*x%mod;
x=x*x%mod;
y/=2;
}
return temp;
}
void xuly()
{
cin>>n>>m;
for (int i=1; i<=n; i++) cin>>a[i];
a[0]=a[n+1]=1;
dp[0][0][0] = 0LL;
dp[0][0][1] = 1LL;
int mmax = 0;
lim[0] = 0;
for (int i=1,last=0; i<=n+1; i++)
{
lim[i] = lim[last]+(i-last)*(i-last-1)/2;
for (int j=0; j<=lim[i]; j++) dp[i][j][0] = dp[i][j][1] = 0LL;
for (int j=last; j<i; j++)
{
if (a[j]==0) continue;
int val = (i-j)*(i-j-1)/2;
for (int k=0; k<=lim[j]; k++)
for (int type=0; type<2; type++)
if (dp[j][k][type])
dp[i][k+val][type^1] = (dp[i][k+val][type^1] + dp[j][k][type])%mod;
}
if (a[i]==1) last=i;
}
ll ans = 0;
int sum = 0;
for (int i=0; i<=n+1; i++) if (a[i]==1) sum++;
for (int j=0; j<=lim[n+1]; j++)
{
ans = (ans + (dp[n+1][j][0] - dp[n+1][j][1] + mod)%mod*ppow(j,m)%mod)%mod;
}
if (sum%2==1) ans = (mod-ans)%mod;
ans=(ans+mod)%mod;
cout<<ans<<'\n';
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
int tt; cin>>tt;
while (tt--) xuly();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3556kb
input:
3 2 2 2 0 3 2 2 1 0 3 1 2 1 0
output:
8 3 1
result:
ok 3 number(s): "8 3 1"
Test #2:
score: 0
Accepted
time: 1ms
memory: 5736kb
input:
100 2 1 0 1 2 1 2 1 2 1 1 1 1 6 2 1 14 2 3 12 2 2 2 6 13 2 2 0 2 0 2 7 14 0 0 0 0 2 2 0 5 8 2 2 0 0 0 5 5 2 2 0 0 0 12 3 0 2 0 2 2 0 1 2 2 2 2 0 7 11 2 2 0 1 0 1 0 4 4 2 1 2 2 7 5 1 1 0 0 1 0 0 2 14 2 1 15 17 2 2 1 2 0 0 0 0 2 0 1 0 0 0 0 15 11 1 1 2 0 1 2 0 0 1 0 2 1 1 1 1 15 18 1 0 1 0 2 2 1 2 0 1...
output:
1 1 0 1 1 175715347 833406719 467966815 458805426 650344 2208 537089254 146 7776 1 703335050 123067364 355668256 487954758 53774922 544070885 436748805 369291507 760487845 513270785 501075264 487417783 464534262 979007529 137956839 143317512 648268264 851188473 702545117 946416372 595191705 35054850...
result:
ok 100 numbers
Test #3:
score: 0
Accepted
time: 185ms
memory: 10392kb
input:
1000 20 673037423 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 774964932 2 2 2 17 730319736 2 2 1 1 2 2 2 2 2 2 2 2 2 1 2 2 1 11 893285699 2 2 2 1 2 1 2 2 2 1 2 16 98149251 1 2 1 2 1 2 1 1 2 1 2 2 2 2 1 2 7 556953277 1 2 2 1 2 2 2 3 228111342 1 1 1 11 640995044 2 2 1 1 2 2 1 1 1 1 1 19 741419324 1 1 2 ...
output:
447486147 204414804 452414918 684654914 763978130 805973365 0 922180033 214948715 401017738 0 201368027 752718484 611006275 848004989 391560729 950934074 202096866 443534870 24665646 482580424 321199514 922369975 152629767 5546104 1 194145234 1 1 1 562381239 648246425 497517379 217016206 961507095 4...
result:
ok 1000 numbers
Test #4:
score: 0
Accepted
time: 1153ms
memory: 10524kb
input:
1000 50 416236992 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 50 657728991 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 50 740461763 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ...
output:
763259804 476502422 599342821 232859927 793988697 591429049 270188459 585052379 112828376 874793236 511742305 443789116 531138043 829814299 715762187 530976897 659595243 398499036 665696512 377388317 780011237 877457048 769085674 80046792 628967449 305823394 274620920 654337446 807171478 690217437 6...
result:
ok 1000 numbers
Test #5:
score: 0
Accepted
time: 86ms
memory: 9812kb
input:
1000 50 598094879 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 50 370102582 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 50 89148477 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2...
output:
799398716 932856936 764416567 57812598 711885564 231337579 355184372 128337468 66039637 243697360 95147120 522827313 427687773 11613749 119992325 840421248 552748897 2153604 854978507 598264350 888588637 168914307 64499881 640494492 442303426 759524304 392240094 936658374 641034548 250860728 8449099...
result:
ok 1000 numbers