103882024-04-01 18:35:29111Az ékszerész játékacpp17Futási hiba 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2140 KiB
2Elfogadva3ms2492 KiB
subtask215/15
3Elfogadva3ms2508 KiB
4Elfogadva3ms2716 KiB
5Elfogadva3ms2952 KiB
6Elfogadva3ms2932 KiB
subtask30/45
7Futási hiba3ms3848 KiB
8Futási hiba3ms4628 KiB
9Futási hiba4ms7104 KiB
10Futási hiba4ms9532 KiB
11Futási hiba4ms9516 KiB
subtask40/40
12Futási hiba14ms25288 KiB
13Futási hiba57ms87396 KiB
14Futási hiba207ms193468 KiB
15Futási hiba184ms197404 KiB
16Futási hiba200ms199960 KiB
17Futási hiba167ms201444 KiB
18Futási hiba162ms202564 KiB
19Futási hiba159ms203072 KiB
20Futási hiba324ms192328 KiB
21Futási hiba326ms192400 KiB
22Futási hiba323ms192568 KiB
23Futási hiba277ms193448 KiB
24Futási hiba244ms192632 KiB