QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#692918#9115. Contour Multiplicationicpc_zhzx034#TL 215ms807768kbC++143.4kb2024-10-31 15:13:092024-10-31 15:13:12

Judging History

你现在查看的是最新测评结果

  • [2024-10-31 15:13:12]
  • 评测
  • 测评结果:TL
  • 用时:215ms
  • 内存:807768kb
  • [2024-10-31 15:13:09]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define fi first
#define se second
#define mk make_pair
#define eb emplace_back
#define rep(i,l,r) for(int i=(l); i<=(r); ++i)
#define rep_(i,l,r) for(int i=(l); i>=(r); --i)
typedef long long lr;
typedef double db;
typedef pair<int,int> pii;
typedef vector<int> vi;
constexpr int mod1=998244353,mod2=1e9+7;
constexpr db pi=3.141592653589793,eps=1e-9;
constexpr int inf32=0x3f3f3f3f,Inf32=0xc0c0c0c0;
constexpr lr inf64=0x3f3f3f3f3f3f3f3f,Inf64=0xc0c0c0c0c0c0c0c0;
template<typename T>il T Max(T x,T y) { return (x>y)? x:y; }
template<typename T>il T Min(T x,T y) { return (x<y)? x:y; }
template<typename T>il T gcd(T x,T y) { return (!y)? x:gcd(y,x%y); }
template<typename T>il T Abs(T x) { return (x>0)? x:(-x); }
template<typename T>il T Rnd(T l,T r,mt19937_64 &eng)
{
	uniform_int_distribution<T> uid(l,r);
	return uid(eng);
}
mt19937_64 eng(chrono::high_resolution_clock::now().time_since_epoch().count());
constexpr int N=1<<18;
struct bp
{
	int num,mul;
	bp() {}
	bp(int Num,int Mul) { num=Num,mul=Mul; }
};
vector<bp> v[N<<1][19],w[N<<1][19][2];
int n,m,k,a[N];
il void Build(int k,int l,int r,int dep)
{
	if(k>1)
		rep(i,0,dep)
		{
			int sz0=w[k][i][0].size(),sz1=w[k][i][1].size();
			int lnum=-1,lmul=-1,c0=0,c1=0;
			while(c0<sz0&&c1<sz1)
			{
				bp cur0=w[k][i][0][c0],cur1=w[k][i][1][c1];
				if(cur0.num<=cur1.num)
				{
					if(lnum==cur0.num)
						lmul=(lr)lmul*cur0.mul%m;
					else
					{
						if(lnum!=-1&&lmul!=-1)
							v[k][i].eb((bp){lnum,lmul});
						lnum=cur0.num,lmul=cur0.mul;
					}
					++c0;
				}
				else
				{
					if(lnum==cur1.num)
						lmul=(lr)lmul*cur1.mul%m;
					else
					{
						if(lnum!=-1&&lmul!=-1)
							v[k][i].eb((bp){lnum,lmul});
						lnum=cur1.num,lmul=cur1.mul;
					}
					++c1;
				}
			}
			while(c0<sz0)
			{
				bp cur0=w[k][i][0][c0];
				if(lnum==cur0.num)
					lmul=(lr)lmul*cur0.mul%m;
				else
				{
					if(lnum!=-1&&lmul!=-1)
						v[k][i].eb((bp){lnum,lmul});
					lnum=cur0.num,lmul=cur0.mul;
				}
				++c0;
			}
			while(c1<sz1)
			{
				bp cur1=w[k][i][1][c1];
				if(lnum==cur1.num)
					lmul=(lr)lmul*cur1.mul%m;
				else
				{
					if(lnum!=-1&&lmul!=-1)
						v[k][i].eb((bp){lnum,lmul});
					lnum=cur1.num,lmul=cur1.mul;
				}
				++c1;
			}
			if(lnum!=-1&&lmul!=-1)
				v[k][i].eb((bp){lnum,lmul});
		}
	if(l==r)
	{
		a[l]=1;
		for(bp i:v[k][0])
			a[l]=(lr)a[l]*i.mul%m;
		return;
	}
	rep(i,0,dep)
		for(bp j:v[k][i])
		{
			if(!(j.num&(1<<(dep-1))))
			{
				if(i<dep)
					w[k<<1][i][0].eb(j);
				if(i)
					w[k<<1|1][i-1][1].eb(j);
			}
			else
			{
				if(i)
					w[k<<1][i-1][1].eb((bp){j.num^(1<<(dep-1)),j.mul});
				if(i<dep)
					w[k<<1|1][i][0].eb((bp){j.num^(1<<(dep-1)),j.mul});
			}
		}
	int mid=(l+r)>>1;
	Build(k<<1,l,mid,dep-1),Build(k<<1|1,mid+1,r,dep-1);
}
il void Solve()
{
	cin>>n>>m>>k;
	rep(i,1,k)
	{
		int x,y,z; cin>>x>>y>>z;
		v[1][y].eb((bp){x,z});
	}
	Build(1,0,(1<<n)-1,n);
	rep(i,0,(1<<n)-1)
		cout<<a[i]<<' ';
	cout<<'\n';
}
int main()
{
#ifdef LOCAL
	string fpre="test",isuf="in",osuf="out";
	assert(freopen((fpre+"."+isuf).c_str(),"r",stdin));
	assert(freopen((fpre+"."+osuf).c_str(),"w",stdout));
#endif
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int T=1;
	while(T--)
		Solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 81ms
memory: 704888kb

input:

3 100 2
0 2 4
3 0 25

output:

1 1 1 0 1 4 4 1 

result:

ok 8 tokens

Test #2:

score: 0
Accepted
time: 86ms
memory: 704356kb

input:

4 998244353 7
0 2 4
3 0 25
9 4 37
4 1 16
6 3 8
1 4 68
13 3 97

output:

1552 8 1 9700 1 64 229696 1 8 4 388 8 64 8 68 1 

result:

ok 16 tokens

Test #3:

score: 0
Accepted
time: 93ms
memory: 704120kb

input:

1 2 1
0 1 696782227

output:

1 1 

result:

ok 2 tokens

Test #4:

score: 0
Accepted
time: 215ms
memory: 807768kb

input:

5 461799503 500000
26 2 741819583
24 4 16805970
5 2 192769861
5 4 365614234
31 0 680795402
23 5 256636931
24 4 150277578
3 1 912506287
27 5 785022824
1 4 645930009
8 2 715559837
3 4 166807726
22 2 584850050
23 1 481241174
7 0 947410124
0 4 588117991
13 5 882053755
16 5 430265734
29 5 324612363
9 4 8...

output:

0 0 45928586 0 134497770 0 206758057 394352068 0 244291949 0 209807785 0 285761102 402778530 0 0 0 61435341 287059619 347978730 135518317 363576818 0 0 0 0 0 0 0 0 349412261 

result:

ok 32 tokens

Test #5:

score: -100
Time Limit Exceeded

input:

13 471577301 500000
6468 6 306578522
8113 3 479854366
720 5 444779113
8132 12 228254993
6354 13 64735677
6877 9 421810792
541 9 278526040
3090 0 986913987
5352 8 16271033
3263 5 929162219
3483 8 459160836
5355 12 867871503
3035 9 877478088
4090 10 88145277
468 6 252659128
4500 6 628030207
455 5 2083...

output:


result: