結果
| 問題 | 
                            No.435 占い(Extra)
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2016-10-18 01:26:22 | 
| 言語 | C++14  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                MLE
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 839 bytes | 
| コンパイル時間 | 781 ms | 
| コンパイル使用メモリ | 60,384 KB | 
| 実行使用メモリ | 96,748 KB | 
| 最終ジャッジ日時 | 2024-10-08 12:05:27 | 
| 合計ジャッジ時間 | 7,886 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge3 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | MLE * 4 | 
| other | MLE * 32 | 
ソースコード
#include <vector>
#include <tuple>
#include <algorithm>
#include <cstdio>
using namespace std;
vector<int> I={-1,1,5,-1,7,2,-1,4,8};
vector<char> Fk={1};
vector<int> Fz={0};
pair<int,int> z(int n){
	int r=0;
	for(;n%3==0;n/=3)r++;
	return {n,r};
}
int comb(int n,int k){
	char k0=Fk[n],k1=Fk[k],k2=Fk[n-k];
	short z0=Fz[n],z1=Fz[k],z2=Fz[n-k];
	int z=z0-z1-z2,r=(int)k0*I[k1]*I[k2]%9;
	return z==0 ? r : z==1 ? r*3%9 : 0;
}
int main(){
	for(int i=1;i<=10000000;i++){
		char k0=Fk[i-1];
		short z0=Fz[i-1];
		int z1,k1;
		tie(k1,z1)=z(i);
		Fk.push_back(k0*k1%9);
		Fz.push_back(z0+z1);
	}
	int T,n,x,a,b,m,r;
	for(scanf("%d",&T);T--;){
		scanf("%d%d%d%d%d",&n,&x,&a,&b,&m);
		bool f=true;
		r=0;
		for(int i=0;i<n;i++){
			int c=x%10;
			r=(r+c*comb(n-1,i))%9;
			if(c)f=false;
			x=((x^a)+b)%m;
		}
		printf("%d\n",r!=0||f ? r : 9);
	}
}