QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#144724 | #6132. Repair the Artwork | PhantomThreshold# | AC ✓ | 596ms | 5400kb | C++20 | 2.5kb | 2023-08-21 18:05:19 | 2023-08-21 18:05:22 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
const int mod = 1e9+7;
const int maxn = 105;
inline void add(int &a,const int &b){ a+=b;if(a>=mod)a-=mod; }
inline void dec(int &a,const int &b){ a-=b;if(a<0)a+=mod; }
int pw(int x,int k)
{
int re=1;
for(;k;k>>=1,x=(ll)x*x%mod) if(k&1)
re=(ll)re*x%mod;
return re;
}
int n,m;
int a[maxn];
vector<int>v1;
int f[maxn][maxn*maxn/2];
vector< vector<int> >G;
vector<int>Gcov;
int ansf[2][maxn*maxn/2];
signed main()
{
ios_base::sync_with_stdio(false);
//freopen("tmp.in","r",stdin);
int Tcase; cin>>Tcase;
while(Tcase--)
{
cin>>n>>m;
{
v1.clear();
vector< vector<int> >_; G.swap(_);
Gcov.clear();
}
v1.push_back(0);
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]==1) v1.push_back(i);
}
v1.push_back(n+1);
for(int i=0,sz=(int)v1.size();i+1<sz;i++)
{
int x=v1[i],y=v1[i+1];
int len= y-1-x;
if(len>0)
{
int flag=0;
for(int j=x+1;j<y;j++) if(a[j]==2) flag=1;
int u= len*(len+1)/2;
// for(int j=x;j<=y;j++) for(int c=0;c<=u;c++)
// f[j][c]=0;
f[x][0]=1;
for(int l=x;l<y;l++) for(int c=0;c<=u;c++) if(f[l][c])
{
int &temp= f[l][c];
for(int r=l+1;r<=y;r++) if(a[r]==2 || r==y)
{
int rl= r-l-1;
int rc= rl*(rl+1)/2;
if(c+rc<=u) dec(f[r][c+rc],temp);
}
temp=0;
}
vector<int>g(u+1);
for(int c=0;c<=u;c++) if(f[y][c])
{
int &temp=f[y][c];
dec(g[c],f[y][c]);
temp=0;
}
G.emplace_back(g);
Gcov.emplace_back(flag);
/* {
cerr<<"[ "<<x<<" , "<<y<<" ]:";
for(int c=0;c<=u;c++) cerr<<g[c]<<" \n"[c==u];
}*/
}
}
for(int c=0;c<=n*(n+1)/2;c++) ansf[0][c]=ansf[1][c]=0;
int now=0;
ansf[now][0]=1; int ansn=0;
for(int gi=0,sz=(int)G.size();gi<sz;gi++)
{
auto &g=G[gi];
int flag=Gcov[gi];
int gn=g.size();
now=!now;
for(int ic=0;ic<=ansn;ic++) if(ansf[!now][ic])
{
int &temp=ansf[!now][ic];
// if(flag) dec(ansf[now][ic],temp);
for(int jc=0;jc<gn;jc++) if(g[jc])
{
add(ansf[now][ic+jc],(ll)temp*g[jc]%mod);
}
temp=0;
}
ansn+= gn-1;
}
/* {
cerr<<"ansf: ";
for(int c=0;c<=n*(n+1)/2;c++)
cerr<<ansf[now][c]<<" \n"[c==n*(n+1)/2];
}*/
int ans=0;
for(int c=0;c<=n*(n+1)/2;c++)
add(ans,(ll)ansf[now][c]*pw(c,m)%mod);
cout<<ans<<'\n';
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3560kb
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: 3ms
memory: 3816kb
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: 155ms
memory: 5396kb
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: 596ms
memory: 5400kb
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: 162ms
memory: 5400kb
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