103892024-04-01 18:35:51111Az ékszerész játékacpp17Wrong answer 15/100612ms203256 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)){
									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
3Accepted3ms2792 KiB
4Accepted3ms2724 KiB
5Accepted3ms2968 KiB
6Accepted3ms3060 KiB
subtask30/45
7Wrong answer3ms3764 KiB
8Wrong answer3ms4444 KiB
9Wrong answer4ms7040 KiB
10Wrong answer6ms9792 KiB
11Wrong answer6ms9828 KiB
subtask40/40
12Wrong answer25ms25504 KiB
13Wrong answer120ms87780 KiB
14Wrong answer500ms193636 KiB
15Wrong answer462ms197344 KiB
16Wrong answer433ms199712 KiB
17Wrong answer411ms201032 KiB
18Wrong answer426ms202360 KiB
19Wrong answer416ms203256 KiB
20Wrong answer612ms192876 KiB
21Wrong answer540ms193004 KiB
22Wrong answer544ms192884 KiB
23Wrong answer513ms194008 KiB
24Wrong answer513ms193384 KiB