Submission #106720


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);
				DUMP(toString(as));
				for(int i=0;i<K;i++)next[i+1] = as[i];
				REP(i,M+1)as[i] = next[i];
			
				DUMP(toString(as));
				// 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);

	//a_i=r/(r+p+q)*a(i-NK)+p/(r+p+q)*a(i-N)+q/(r+p+q)*a_(i-1)+1/(p+q+r)
	//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 4041 Byte
Status WA
Exec Time 328 ms
Memory 936 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 800 KB
10 AC 23 ms 808 KB
11 AC 27 ms 800 KB
12 AC 23 ms 804 KB
13 AC 65 ms 800 KB
14 WA 41 ms 932 KB
15 WA 22 ms 808 KB
16 AC 26 ms 804 KB
17 WA 61 ms 928 KB
18 WA 241 ms 932 KB
19 WA 46 ms 804 KB
2 AC 21 ms 808 KB
20 WA 30 ms 808 KB
21 WA 30 ms 920 KB
22 WA 31 ms 796 KB
23 AC 25 ms 804 KB
24 WA 21 ms 800 KB
25 WA 22 ms 932 KB
26 WA 21 ms 924 KB
27 WA 133 ms 928 KB
28 AC 21 ms 932 KB
29 AC 22 ms 932 KB
3 AC 21 ms 808 KB
30 AC 23 ms 804 KB
31 AC 132 ms 936 KB
32 WA 22 ms 796 KB
33 WA 23 ms 812 KB
34 AC 23 ms 800 KB
35 WA 328 ms 936 KB
36 WA 22 ms 932 KB
37 WA 24 ms 804 KB
38 AC 24 ms 800 KB
39 WA 321 ms 932 KB
4 AC 21 ms 812 KB
40 AC 163 ms 928 KB
41 AC 226 ms 936 KB
42 AC 135 ms 808 KB
43 WA 195 ms 936 KB
44 WA 154 ms 932 KB
45 WA 69 ms 928 KB
46 AC 203 ms 868 KB
47 WA 142 ms 936 KB
48 AC 166 ms 936 KB
49 AC 88 ms 928 KB
5 AC 132 ms 868 KB
6 AC 22 ms 680 KB
7 AC 22 ms 800 KB
8 WA 22 ms 804 KB
9 AC 22 ms 736 KB