ICPC2019 선양사이버대회 K.Guanguan's Happy water(고스소원+역원+매트릭스 쾌속멱)
제목 링크
https://nanti.jisuanke.com/t/41411
사고의 방향
뭐랄까, 이 문제는 먼저 모형선형 방정식 그룹을 풀고 행렬의 빠른 멱으로 수열 전 n항과 n항을 계산하는 것이다.템플릿 문제와 가깝지만 160여 줄의 코드도 있는데 쓰기가 번거롭고 디버깅도 간단하지 않다고 생각합니다.여기서 더 이상 말하지 말고 이 문제를 고스 소원의 본보기로 삼아 기록해 보자.
코드
#include
#define ll long long
using namespace std;
const ll maxn=80;
const ll mod=1e9+7;
typedef ll Mat[maxn][maxn];
ll p[maxn],f[maxn*2],sum[maxn*2],n,k;
Mat A;
void read(ll &x)
{
ll f=1;x=0;char s=getchar();
while(s'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
x*=f;
}
//
//
void solve(){
memset(A,0,sizeof(A));
ll cur=k+1;
//cout<>=1;
}
return ret;
}
ll inv(ll v,ll modd){
return pow_mod(v%modd,modd-2,modd);
}
void gauss_elimin(){
for(ll i=0;i=0;i--){
for(ll j=i+1;j>=1;
}
return ans;
}
//
ll work(){
ll i,j;
for(i=1;i<=len;i++)
e.mt[i][i]=1;
memset(a.mt,0,sizeof(a.mt));
for(i=1;i<=len;i++){
if(i==1){
a.mt[1][1]=1;
for(j=2;j<=len;j++){
a.mt[1][j]=p[j-2];
}
continue;
}
if(i==2){
for(j=2;j<=len;j++){
a.mt[2][j]=p[j-2];
}
continue;
}
a.mt[i][j-1]=1;
}
matt al=pow(a,n-2*k);
ll xx[maxn],x[maxn],ans=0;
for(i=1;i<=k;i++)xx[i]=f[k+i];xx[k+1]=sum[2*k];
for(i=1;i<=len;i++)x[len-i+1]=xx[i];
for(i=1;i<=len;i++){
ans+=al.mt[1][i]*x[i];
ans%=mod;
}
return ans;
}
int main(){
ll cas;
read(cas);
while(cas--){
read(k);read(n);len=k+1;
for(ll i=1;i<=2*k;i++)read(f[i]);
memset(sum,0,sizeof(sum));
for(ll i=1;i<=2*k;i++){
sum[i]=sum[i-1]+f[i];
sum[i]%=mod;
}
if(n<=2*k){
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HDU 5608] functionProblem Description There is a function f(x),which is defined on the natural numbers set N,satisfies the following eqaut...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.