求助卡常
查看原帖
求助卡常
676569
WoodReal12楼主2024/7/17 10:38
#include <iostream>
#include <cstring>
#define x first 
#define y second
#define ll long long
#define pii pair<ll,ll>
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
using namespace std;
template <typename T>
inline void read(T &f){
	f=1;
	T x=0;
	char ch=gc();
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			f=-1;
		ch=gc();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=gc();
	}
	f*=x;
}
template <typename T>
inline void print(T x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>9)
		print(x/10);
	putchar(x%10+'0');
}
ll T;
ll n;
ll map[25];
ll ans=10000000000;
void srh(ll k){
	if(k>=ans)
		return ;
	ll len=0;
	//shunzi
	//single shunzi
	for(ll i=3;i<=14;i++){
		if(map[i]==0)
			len=0;
		else{
			len++;
			if(len>=5){
				for(ll j=i;j>=i-len+1;j--)
					map[j]--;
				srh(k+1);
				for(ll j=i;j>=i-len+1;j--)
					map[j]++;
			}
		}
	}
	//double shunzi
	len=0;
	for(ll i=3;i<=14;i++){
		if(map[i]<2)
			len=0;
		else{
			len++;
			if(len>=3){
				for(ll j=i;j>=i-len+1;j--)
					map[j]-=2;
				srh(k+1);
				for(ll j=i;j>=i-len+1;j--)
					map[j]+=2;
			}
		}
	}
	//trible shunzi
	len=0;
	for(ll i=3;i<=14;i++){
		if(map[i]<=2)
			len=0;
		else{
			len++;
			if(len>=2){
				for(ll j=i;j>=i-len+1;j--)
					map[j]-=3;
				srh(k+1);
				for(ll j=i;j>=i-len+1;j--)
					map[j]+=3;
			}
		}
	}
	//dai
	//3dai2 or 3dai1
	for(ll i=2;i<=14;i++){
		if(map[i]==3){
			map[i]-=3;
			for(ll j=2;j<=15;j++){//dai1
				if(map[j]>0&&i!=j){
					map[j]--;
					srh(k+1);
					map[j]++;
				}
			}
			for(ll j=2;j<=14;j++){//dai2
				if(map[j]>1&&i!=j){
					map[j]-=2;
					srh(k+1);
					map[j]+=2;
				}
			}
			map[i]+=3;
		}
	}
	//4dai2 (3daix is also ok)
	for(ll i=2;i<=14;i++){
		if(map[i]>=4){
			//3daix
			map[i]-=3;
			for(ll j=2;j<=15;j++){//dai1
				if(map[j]>0&&i!=j){
					map[j]--;
					srh(k+1);
					map[j]++;
				}
			}
			for(ll j=2;j<=14;j++){//dai2
				if(map[j]>1&&i!=j){
					map[j]-=2;
					srh(k+1);
					map[j]+=2;
				}
			}
			map[i]+=3;
			//4dai2
			map[i]-=4;
			for(ll j=2;j<=15;j++){//dai2 single
				if(map[j]>=1&&i!=j){
					map[j]--;
					for(ll kk=2;kk<=15;kk++){
						if(map[kk]>=1){
							map[kk]--;
							srh(k+1);
							map[kk]++;
						}
					}
					map[j]++;
				}
			}
			for(ll j=2;j<=14;j++){//dai2 double
				if(map[j]>=2&&i!=j){
					map[j]-=2;
					for(ll kk=2;kk<=14;kk++){
						if(map[kk]>=2){
							map[kk]-=2;
							srh(k+1);
							map[kk]+=2;
						}
					}
					map[j]+=2;
				}
			}
			map[i]+=4;
		}
	}
	for(ll i=2;i<=15;i++)
		if(map[i]>0)
			k++;
	ans=min(ans,k);
}
int main(){
	read(T),read(n);
	while(T--){
		ans=100000000;
		pii pai[1005];
		memset(map,0,sizeof map);
		for(ll i=1;i<=n;i++){
			read(pai[i].x),read(pai[i].y);
			if(pai[i].x==1)
				map[14]++;
			else if(pai[i].x==0&&pai[i].y==1)
				map[15]++;
			else if(pai[i].x==0&&pai[i].y==2)
				map[15]++;
			else
				map[pai[i].x]++;
		}
		srh(0);
		print(ans);
		cout<<endl;
	}
	return 0;
}

TLE88pts,on #27 #29 #39 #40 #43 #44

2024/7/17 10:38
加载中...