結果
| 問題 |
No.147 試験監督(2)
|
| コンテスト | |
| ユーザー |
kuuso1
|
| 提出日時 | 2015-02-09 00:22:09 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,228 bytes |
| コンパイル時間 | 2,514 ms |
| コンパイル使用メモリ | 108,800 KB |
| 実行使用メモリ | 37,504 KB |
| 最終ジャッジ日時 | 2024-06-23 09:00:49 |
| 合計ジャッジ時間 | 8,962 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | TLE * 1 -- * 3 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
using System.Collections;
using System.Collections.Generic;
using System.Numerics;
using BI=System.Numerics.BigInteger;
class TEST{
static void Main(){
Sol mySol =new Sol();
mySol.Solve();
}
}
class Sol{
public void Solve(){
Mat[] Fib=new Mat[80];
Fib[0]=new Mat(1,0,0,1);
Fib[1]=new Mat(1,1,1,0);
for(int i=2;i<80;i++)Fib[i]=Fib[i-1]*Fib[i-1];
long Ans=1;
for(int i=0;i<N;i++){
long val=1;
if(C[i]==1)val=2;
if(C[i]==2)val=3;
if(C[i]>2){
long t=C[i]-2;
Mat E=new Mat(1,0,0,1);
//Console.WriteLine(E.a+" "+E.b+" "+E.c+" "+E.d);
for(int ii=1;ii<61;ii++){
if(((t>>(ii-1))&1)>0){
E=E*Fib[ii];
//Console.WriteLine(E.a+" "+E.b+" "+E.c+" "+E.d);
}
}
val=(E.a*3+E.b*2)%mod;
}
//Console.WriteLine(val);
long tot=1;
long[] xx=new long[800];
xx[0]=1;
xx[1]=val;
for(int ii=2;ii<800;ii++){
xx[ii]=(xx[ii-1]*xx[ii-1])%mod;
}
for(int ii=1;ii<800;ii++){
if((D[i]>>(ii-1))%2==1){
tot*=xx[ii];
tot%=mod;
}
}
Ans*=tot;
Ans%=mod;
}
Console.WriteLine(Ans);
}
class Mat{
public long a,b,c,d;
public Mat(long aa,long bb,long cc,long dd){
a=aa;b=bb;c=cc;d=dd;
}
public static Mat operator*(Mat x,Mat y){
return new Mat( ((x.a*y.a)%mod+(x.b*y.c)%mod)%mod,
((x.a*y.b)%mod+(x.b*y.d)%mod)%mod,
((x.c*y.a)%mod+(x.d*y.c)%mod)%mod,
((x.c*y.b)%mod+(x.d*y.d)%mod)%mod );
}
}
static long mod=(long)(1e9+7);
int N;
long[] C;
BI[] D;
public Sol(){
N=ri();
C=new long[N];
D=new BI[N];
for(int i=0;i<N;i++){
var d=rsa();
C[i]=long.Parse(d[0]);
D[i]=BI.Parse(d[1]);
}
}
static String rs(){return Console.ReadLine();}
static int ri(){return int.Parse(Console.ReadLine());}
static long rl(){return long.Parse(Console.ReadLine());}
static double rd(){return double.Parse(Console.ReadLine());}
static String[] rsa(){return Console.ReadLine().Split(' ');}
static int[] ria(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>int.Parse(e));}
static long[] rla(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>long.Parse(e));}
static double[] rda(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>double.Parse(e));}
}
kuuso1