81分TLE???
查看原帖
81分TLE???
342303
ABCD101楼主2022/11/22 17:22
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ull unsigned ll
#define llu ull
#define db double
#define fl float
#define us unsiged
#define fi first
#define se second
#define mp(a,b) make_pair(a,b)
#define pb(a) push_back(a)
#define pbp(a,b) pb(mp(a,b))

#define int_inf 0x3f3f3f3f
#define INT_INF INT_MAX
#define UINT_INF UINT_MAX
#define LL_INF LLONG_MAX
#define ULL_INF ULONG_LONG_MAX
#define Const const int
#define pi pair<int,int>  

#define fin(name) freopen(name,"r",stdin)
#define fout(name) freopen(name,"w",stdout)
#define read() fastRead()
#define print(a) fastPrint(a)
inline int fastRead(){
    char chr=getchar();
    int absData=0, isLowerThanZero=1;
    while(chr<'0'||chr>'9'){
        if(chr=='-') isLowerThanZero=-1;
        chr=getchar();
    }
    while(chr>='0'&&chr<='9')
        absData=(absData<<1)+(absData<<3)+(chr^48),
        chr=getchar();
    return absData*isLowerThanZero;
}
long long readll(){
	char c = getchar();
	long long x = 0, f = 1;
	for (; c < '0' || c > '9'; c = getchar())
		if (c == '-') f = -1;
	for (; c >= '0' && c <= '9'; c = getchar())
		x = (x << 1) + (x << 3) + (c ^ 48);
	return x * f;
}
inline void fastPrint(int number){
   if(number<0) putchar('-'), number=-number;
   if(number>9) fastPrint(number/10);
   putchar(number%10+'0');
}


/*****-------------------------------------*****/
Const N = 300;
int n, num[N][N], mch[N*N], vis[N*N];
double ans=0;
int ddd[4][2]={1,2,2,1,2,-1,1,-2};
bool mp[N][N];
vector<int> g[N*N];
inline bool dfs(int x, int y){
	if(vis[x]==y) return false;
	vis[x]=y;
	for(auto i : g[x])
		if(mch[i]==0 || dfs(mch[i], y)){
			mch[i] = x;
			return true;	
		}
	return false;
}
int main(){
	n=read(), ans=0;
	int m=read();
	while(m--){
		int tmp1=read(), tmp2=read();
		mp[tmp1][tmp2]=1;
	}
	for(int i=1, tot=0;i<=n;i++) 
		for(int j=1;j<=n;j++){
			num[i][j]=++tot, ans+=!mp[i][j];
			if(mp[i][j]) continue;
			for(int k=0;k<4;k++) 
				if(i>ddd[k][0] && j>ddd[k][1] && (j-ddd[k][1]<=n)
				&& !mp[i-ddd[k][0]][j-ddd[k][1]])
					g[num[i][j]].pb(num[i-ddd[k][0]][j-ddd[k][1]]),
					g[num[i-ddd[k][0]][j-ddd[k][1]]].pb(num[i][j]);
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++) ans-=dfs(num[i][j],1)/2.0,
			memset(vis, 0, sizeof vis);
	cout<<ans<<endl;
	return 0;
}














         















///////////////////

其中一个点本地测5秒

2022/11/22 17:22
加载中...