Submission #106721


Source Code Expand

#include <iostream>
#include <cstdio>
#include <iomanip>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <bitset>
#include <stack>
#include <utility>
#include <numeric>
#include <algorithm>
#include <functional>
#include <cctype>
#include <complex>
#include <string>
#include <sstream>
#include <cassert>
using namespace std;
 
//common
using i32=int;using i64=long long;using ll =i64;
#define BR "\n"
 
#define ALL(c) c.begin(),c.end()
#define REP(i,n) for(int i=0;i<(n);++i)
#define EACH(it,list) for(auto it = list.begin(); it != list.end(); ++it)
#define IN(l,v,r) ((l)<=(v) && (v)<(r))
 
//config
//#define MODE_DEBUG
//#define INF 1<<30
//#define EPS 1e-8
//const ll MOD =100000007;
 
//Mat
//template <typename T> using Mat = vector<vector<T>>;//H*W M*N
//template <typename T> using Mat3 = vector<Mat<T>>;
 
#define H(Map) Map.size()
#define W(Map) Map[0].size()
 
//debug
#ifdef MODE_DEBUG
#define  DUMP(x)  cerr << #x << " = "<< (x) <<endl
#define DEBUG(x) DUMP(x) << " (L" << __LINE__ << ")" << " " << __FILE__
#define CHECK(exp,act)  if(exp!=act){DUMP(exp);DEBUG(act);}
#define STOP(e)  CHECK(e);if(!(e)) exit(1);
#else
#define DUMP(x)
#define DEBUG(x)
#define CHECK(exp,act)
#define STOP(e)
#endif
 
 
//debug
template<class T> inline string toString(const vector<T>& x) {
	stringstream ss;
	REP(i,x.size()){
		if(i!=0)ss<<" ";
		ss<< x[i];
		//DUMP(v);
	}
	return ss.str();
}
template<class T> inline string toString(const vector<vector<T>>& map) {
	string res;stringstream ss;
	REP(i,map.size()){
		if(i!=0)ss<<BR;
		ss<< toString(map[i]);
	}
	return ss.str();
}
template<class K,class V>  string toString(map<K,V>& x) {
	string res;stringstream ss;
	for(auto& p:x)ss << p.first<<":" << p.second<<" ";
	return ss.str();
}
 
template<typename T,typename V> inline T mod(T v,V MOD){
	return v;
	//return (v%MOD+MOD)%MOD;
}

 
namespace Recursion{
	using V=double;

	const ll MOD=10000007;

	//O(m^2*log(n))
	// a[0]=ss[0],...,a[m-1]=ss[m-1]
	//a[n+m]=ms[0]*a[n]+...+ms[m-1]*a[n+m-1]+C
	// nth(n,初項,係数, 定数係数)
	V getnth(ll n,const vector<V> ss, const vector<V> ms,V C=0){
		const int K = ms.size(),M = K * 2 - 1;
		
		vector<bool> binary;
		for(int m=n;m!=0;m/=2)binary.push_back(m % 2==1);
		reverse(binary.begin(), binary.end());

		vector<V> as(M+1, 0),next(M+1, 0);
		as[0] =1;V Cs = 0;
		for(int i=0;i<(int)binary.size();i++){
			fill(ALL(next),0);
			{
				// *2
				// A_2n=ΣΣf_a*f_b*A_(a+b)=Σnext(a+b)*A_(a+b)
				// 係数
				V sum = 1,add = 0;
				for(int a=0;a<K;a++){
					for(int b=0;b<K;b++){
						next[a+b] = mod(next[a+b] + as[a] * as[b],MOD);
					}
					sum =mod(sum + as[a],MOD);
				}
				REP(i,M)as[i] = next[i];

				// M-1 ... K 
				for(int j=M-1;j>=K;j--){
					for(int k=1;k<=K;k++)as[j-k] = mod(as[j-k] + ms[K-k] * as[j] ,MOD) ;
					add = mod(add + as[j],MOD);
					as[j] = 0;
				}
				Cs = mod(Cs * sum+add, MOD);
			}
			if(binary[i]){
				DUMP(i);
				// A_(n+1)=Σf_a*A_(a+1)
				// +1
				vector<V> next(M+1, 0);
				for(int i=0;i<K;i++)next[i+1] = as[i];
				REP(i,M+1)as[i] = next[i];
			
				// K
				for(int k=1;k<=K;k++)as[K-k] = mod(as[K-k] + ms[K-k] * as[K],MOD);
				Cs = mod(Cs + as[K],MOD);

				DUMP(i);
				as[K] = 0;
			}
		}
		V res = 0;
		for(int i=0;i<K;i++)res =mod(res + as[i] * ss[i],MOD);
		res = mod(res + Cs * C ,MOD);DUMP(Cs);
		return res;
	}

}
using namespace Recursion;

int main(){

	double p,q,r;cin >> p >> q >> r;
	int N,K,M;cin >> N>> K >> M;
	vector<double> ss(N*K,0),ms(N*K,0);

	// (p+q+r)*a_i=r*a(i-NK)+p*a(i-N)+q*a_(i-1)+1
	//
	//a_(i+NK)=r/(r+p+q)*a(i)+p/(r+p+q)*a(i+NK-N)+q/(r+p+q)*a_(i+NK-1)+1/(p+q+r)
	ms[0]+=r/(r+p+q);ms[N*K-N]+=p/(r+p+q);ms[N*K-1]+=q/(r+p+q);

	//   as[NK-1]=0;as[NK]=?
	//   as[0]=0;as[1]=?
	cout << getnth(N*M+N*K-1, ss, ms,1/(p+q+r))<<endl;
	return 0;
}

Submission Info

Submission Time
Task B - Cans of Toys
User shimomire
Language C++11 (GCC 4.8.1)
Score 0
Code Size 3975 Byte
Status WA
Exec Time 248 ms
Memory 944 KB

Judge Result

Set Name all
Score / Max Score 0 / 100
Status
AC × 26
WA × 23
Set Name Test Cases
all 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 4, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 5, 6, 7, 8, 9
Case Name Status Exec Time Memory
1 AC 22 ms 680 KB
10 AC 21 ms 812 KB
11 AC 21 ms 812 KB
12 AC 21 ms 936 KB
13 AC 55 ms 928 KB
14 WA 29 ms 800 KB
15 WA 21 ms 804 KB
16 AC 23 ms 808 KB
17 WA 45 ms 932 KB
18 WA 169 ms 800 KB
19 WA 28 ms 800 KB
2 AC 21 ms 800 KB
20 WA 24 ms 936 KB
21 WA 23 ms 800 KB
22 WA 32 ms 768 KB
23 AC 21 ms 936 KB
24 WA 21 ms 804 KB
25 WA 21 ms 932 KB
26 WA 20 ms 800 KB
27 WA 102 ms 944 KB
28 AC 23 ms 756 KB
29 AC 21 ms 920 KB
3 AC 21 ms 928 KB
30 AC 21 ms 928 KB
31 AC 102 ms 808 KB
32 WA 21 ms 804 KB
33 WA 22 ms 804 KB
34 AC 21 ms 804 KB
35 WA 247 ms 932 KB
36 WA 21 ms 924 KB
37 WA 22 ms 808 KB
38 AC 21 ms 808 KB
39 WA 248 ms 804 KB
4 AC 21 ms 796 KB
40 AC 111 ms 768 KB
41 AC 167 ms 808 KB
42 AC 100 ms 808 KB
43 WA 129 ms 924 KB
44 WA 104 ms 804 KB
45 WA 42 ms 932 KB
46 AC 150 ms 800 KB
47 WA 112 ms 932 KB
48 AC 111 ms 856 KB
49 AC 56 ms 932 KB
5 AC 102 ms 924 KB
6 AC 21 ms 804 KB
7 AC 22 ms 808 KB
8 WA 20 ms 800 KB
9 AC 21 ms 932 KB