求助站外Master of GCD HDU6273 谢谢dalao们 rp++
查看原帖
求助站外Master of GCD HDU6273 谢谢dalao们 rp++
674793
luoguhandongheng楼主2023/5/2 23:36

题目在这 一直TLE 但我用的是正解的思路 算的复杂度应该也没有TLE 希望大佬帮帮蒟蒻

#include <iostream>
#include <algorithm>
#include <string.h>
#include <cmath>
#define int long long
const int mod=998244353; 
int t,book[100005][5],d[100005][5];
using namespace std;
int pow(int x,int y,int mod){
	if(y==0)	return 1ll;
	if(y==1)	return x;
	int tmp=pow(x,y/2,mod);
	if(y & 1)	return tmp*tmp*x%mod;
	else return tmp*tmp%mod;
}
signed main(){
	ios::sync_with_stdio(false);
	cin>>t;
	while(t--){
		int n,m;
		cin>>n>>m; 
		for(int i=0;i<=n;++i){
			book[i][2]=book[i][3]=d[i][2]=d[i][3]=0;
		}
		while(m--){
			int x,y,z;
			cin>>x>>y>>z;
			d[x][z]++;
			d[y+1][z]--;
		}
		int minn1=999999999,minn2=999999999; 
		for(int i=1;i<=n;++i){
			book[i][2]=d[i-1][2]+book[i-1][2];
			book[i][3]=d[i-1][3]+book[i-1][3];
			minn1=min(minn1,book[i][2]);
			minn2=min(minn2,book[i][3]);
		} 
		cout<<pow(2,minn1,mod)*pow(3,minn2,mod)<<endl;
	} 
	return 0;
}
2023/5/2 23:36
加载中...