103882024-04-01 18:35:29111Az ékszerész játékacpp17Runtime error 15/100326ms203072 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

#define NM 1002

int N,x[NM*NM],g[NM*NM][4],s[NM*NM],v[NM*NM],w[NM*NM],p[NM*NM],t[NM*NM],r[NM*NM],ti[NM*NM],to[NM*NM],ta;

void dfs(int i){
	s[i]=1;
	w[i]=i;
	ti[i]=ta++;
	for(int j:g[i]){
		if(x[j]!=x[i]){
			continue;
		}
		if(j==p[i]){
			continue;
		}
		if(v[j]){
			if(v[j]<v[w[i]]){
				w[i]=j;
			}
			continue;
		}
		v[j]=v[i]+1;
		p[j]=i;
		t[j]=t[i];
		dfs(j);
		s[i]+=s[j];
		if(v[w[j]]<v[w[i]]){
			w[i]=w[j];
		}
	}
	to[i]=ta++;
}

int des(int i,int j){
	return ti[i]<=ti[j]&&to[i]>=to[j];
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;
	cin>>N;
	for(int i=1;i<=N;i++){
		for(int j=1;j<=N;j++){
			cin>>x[i*NM+j];
		}
	}
	for(int i=1;i<=N;i++){
		for(int j=1;j<=N;j++){
			g[i*NM+j][0]=i*NM+j-1;
			g[i*NM+j][1]=i*NM+j+1;
			g[i*NM+j][2]=(i-1)*NM+j;
			g[i*NM+j][3]=(i+1)*NM+j;
		}
	}
	int o=0;
	for(int i=1;i<=N;i++){
		for(int j=1;j<=N;j++){
			int y=i*NM+j;
			if(v[y]){
				continue;
			}
			o++;
			v[y]=1;
			t[y]=o;
			r[o]=y;
			dfs(y);
		}
	}
	for(int d=0;d<2;d++){
		for(int i=1;i+(d==1)<=N;i++){
			for(int j=1;j+(d==0)<=N;j++){
				int y1=i*NM+j;
				int y2=(i+(d==1))*NM+j+(d==0);
				if(t[y1]==t[y2]){
					cout<<0<<' ';
					continue;
				}
				int c[2]{1,1};
				for(int i=0;i<2;i++){
					for(int z:g[y2]){
						if(z==y1){
							continue;
						}
						if(x[z]!=x[y1]){
							continue;
						}
						if(t[z]==t[y1]&&w[y1]==y1){
							int k=-1;
							for(int kk:g[y1]){
								if(des(kk,z)){
									if(k!=-1)exit(1);
									k=kk;
								}
							}
							c[i]+=k==-1?s[r[t[z]]]-s[y1]:s[k];
						}
						else{
							c[i]+=s[r[t[z]]];
							for(int zz:g[y2]){
								if(zz>z&&z!=y1&&t[zz]==t[z]){
									c[i]-=s[r[t[z]]];
									break;
								}
							}
						}
					}
					swap(y1,y2);
				}
				cout<<c[0]*c[1]<<' ';
			}
			cout<<'\n';
		}
	}
	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms2140 KiB
2Accepted3ms2492 KiB
subtask215/15
3Accepted3ms2508 KiB
4Accepted3ms2716 KiB
5Accepted3ms2952 KiB
6Accepted3ms2932 KiB
subtask30/45
7Runtime error3ms3848 KiB
8Runtime error3ms4628 KiB
9Runtime error4ms7104 KiB
10Runtime error4ms9532 KiB
11Runtime error4ms9516 KiB
subtask40/40
12Runtime error14ms25288 KiB
13Runtime error57ms87396 KiB
14Runtime error207ms193468 KiB
15Runtime error184ms197404 KiB
16Runtime error200ms199960 KiB
17Runtime error167ms201444 KiB
18Runtime error162ms202564 KiB
19Runtime error159ms203072 KiB
20Runtime error324ms192328 KiB
21Runtime error326ms192400 KiB
22Runtime error323ms192568 KiB
23Runtime error277ms193448 KiB
24Runtime error244ms192632 KiB