QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#616230 | #9448. Product Matrix | ucup-team3586# | TL | 11ms | 167388kb | C++23 | 2.7kb | 2024-10-05 23:44:24 | 2024-10-05 23:44:24 |
Judging History
answer
//Author: Kevin
#include<bits/stdc++.h>
//#pragma GCC optimize("O2")
using namespace std;
#define ll long long
#define ull ll
#define pb emplace_back
#define mp make_pair
#define ALL(x) (x).begin(),(x).end()
#define rALL(x) (x).rbegin(),(x).rend()
#define srt(x) sort(ALL(x))
#define rev(x) reverse(ALL(x))
#define rsrt(x) sort(rALL(x))
#define sz(x) (int)(x.size())
#define inf 0x3f3f3f3f
#define pii pair<int,int>
#define lb(v,x) (int)(lower_bound(ALL(v),x)-v.begin())
#define ub(v,x) (int)(upper_bound(ALL(v),x)-v.begin())
#define uni(v) v.resize(unique(ALL(v))-v.begin())
#define longer __int128_t
void die(string S){puts(S.c_str());exit(0);}
const ull mod=1e9+7;
int n,m;
ull A[6][6],B[6][6];
int Lim[500500];
ull Val[6][6][1001000],nVal[6][6][1001000];
ull pw2[2001000];
void solve(int m,int Lim)
{
if(!m)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int x=0;x<Lim;x++)
Val[i][j][x]=(i==j);
return ;
}
solve(m/2,Lim+m/2);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
memset(nVal[i][j],0,sizeof(ull)*Lim);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
for(int x=0;x<Lim;x++)
nVal[i][k][x]=(nVal[i][k][x]+Val[i][j][x]*Val[j][k][x+m/2])%mod;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
memcpy(Val[i][j],nVal[i][j],sizeof(ull)*Lim);
if(m&1)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
memset(nVal[i][j],0,sizeof(ull)*Lim);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
for(int x=0;x<Lim;x++)
nVal[i][k][x]=(nVal[i][k][x]+(A[j][k]*pw2[x+m-1]+B[j][k])%mod*Val[i][j][x])%mod;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
memcpy(Val[i][j],nVal[i][j],sizeof(ull)*Lim);
}
}
ll tot[500500],tmp[500500];
ll ksm(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1) ans=ans*a%mod;
b>>=1;
a=a*a%mod;
}
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>A[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>B[i][j];
pw2[0]=1;
for(int i=1;i<2001000;i++)
pw2[i]=pw2[i-1]*2%mod;
solve(m,m+1);
for(int i=0;i<=m;i++)
{
memset(tmp,0,sizeof(ll)*(m+1));
tmp[0]=1;
for(int j=0;j<=m;j++)
if(i!=j)
{
for(int k=m;k;k--)
tmp[k]=tmp[k-1];
tmp[0]=0;
ll val=(mod-pw2[j])%mod;
for(int k=1;k<=m;k++)
tmp[k-1]=(tmp[k-1]+tmp[k]*val)%mod;
}
ll val2=1;
for(int j=0;j<=m;j++)
if(i!=j)
val2=val2*(pw2[i]-pw2[j]+mod)%mod;
val2=ksm(val2,mod-2);
for(int j=0;j<=m;j++)
tot[j]=(tot[j]+tmp[j]*val2%mod*Val[0][0][i])%mod;
}
for(int j=0;j<=m;j++)
cout<<tot[j]<<'\n';
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 36284kb
input:
2 2 1 2 3 4 2 0 1 2
output:
4 8 14
result:
ok 3 number(s): "4 8 14"
Test #2:
score: 0
Accepted
time: 8ms
memory: 83536kb
input:
4 10 520471651 866160932 848899741 650346545 756377215 402412491 920748640 255249004 371442152 93295238 350011159 679848583 528399020 957465601 22001245 407745834 363922864 418156995 324388560 611306817 671914474 323815171 638034305 796072406 765823638 254662378 175686978 123364350 786531344 3967179...
output:
890467395 623743197 432365684 555543126 145580696 550546744 959254454 836036617 945090197 106843161 866547396
result:
ok 11 numbers
Test #3:
score: 0
Accepted
time: 4ms
memory: 167356kb
input:
6 23 101670804 457970042 521121852 851881468 298366530 271962368 881900040 161849089 409608300 527884448 898980182 538728808 624037110 955334452 644656371 684645088 612630196 365375437 135489465 838789241 374389562 238291227 977400760 496900790 921432977 606711088 740916866 405856539 822796504 19906...
output:
18827363 93291123 549166310 727345493 212460686 835043567 382235992 234331494 126083178 340949995 361327462 549134620 481914498 34075195 89718312 945811332 898724999 944812555 123616792 779724718 995912550 188150326 361531843 801483934
result:
ok 24 numbers
Test #4:
score: 0
Accepted
time: 7ms
memory: 24092kb
input:
1 1 850150743 201109093
output:
201109093 850150743
result:
ok 2 number(s): "201109093 850150743"
Test #5:
score: 0
Accepted
time: 8ms
memory: 36380kb
input:
2 1 838417478 568611358 348881562 259739663 684020320 849564252 7622864 342206654
output:
684020320 838417478
result:
ok 2 number(s): "684020320 838417478"
Test #6:
score: 0
Accepted
time: 8ms
memory: 56824kb
input:
3 1 662626648 989629820 447555531 504352706 537983436 981463385 633227491 799236931 264904138 510263941 30128899 644015027 642994715 674480107 494744466 113567281 686079810 29940910
output:
510263941 662626648
result:
ok 2 number(s): "510263941 662626648"
Test #7:
score: 0
Accepted
time: 4ms
memory: 85488kb
input:
4 1 698286849 108948691 370848972 861145616 308345962 492551526 837788523 735191312 813226172 232618279 121444192 64535733 172831199 302337428 438860400 394173985 968865126 421436111 675658174 967155308 675554219 293733850 793671127 135966551 267239055 24766491 712336945 25719396 621692331 201339445...
output:
968865126 698286849
result:
ok 2 number(s): "968865126 698286849"
Test #8:
score: 0
Accepted
time: 9ms
memory: 122372kb
input:
5 1 346030494 348813388 950014436 351718810 389309705 819298156 278971731 721089919 34315191 136072724 977938439 445268765 725373786 92574089 40828378 81532232 217673244 195836050 397811725 905085770 76139672 852963918 237501084 582369241 723129091 510859036 368205749 459903015 796344358 178557942 9...
output:
510859036 346030494
result:
ok 2 number(s): "510859036 346030494"
Test #9:
score: 0
Accepted
time: 11ms
memory: 167388kb
input:
6 1 269535050 794196606 377757516 516758696 739552010 15300040 523493270 110895534 879184568 693817999 162914386 60443980 122215232 3304271 774066505 279824412 19713957 620002064 784042807 447807660 446909111 377390001 200803795 138848111 379227514 56112455 336718555 609352443 37005361 252594923 861...
output:
552563198 269535050
result:
ok 2 number(s): "552563198 269535050"
Test #10:
score: -100
Time Limit Exceeded
input:
1 500000 706182264 736952709