Submission #658847

#TimeUsernameProblemLanguageResultExecution timeMemory
658847ShahradT-Covering (eJOI19_covering)C++17
Compilation error
0 ms0 KiB
#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef long double ld; #define endl '\n' #define pb push_back #define mk make_pair #define sz size() #define F first #define S second #define all(x) x.begin(), x.end() #define kill(x) return cout << x << endl, void(); #define int ll typedef pair <int, int> pii; #pragma GCC optimize ("O3") #pragma GCC optimize ("unroll-loops") #pragma GCC target ("avx2") const int N = 1e6 + 5; const int MOD = 998244353, INF = 2e9, MOD2 = 1e9 + 7, sq = 350; int dx[8] = {0, 1, 0, -1, -1, -1, 1, 1}, dy[8] = {-1, 0, 1, 0, -1, 1, 1, -1}, vis[N]; vector <int> a[N], mrk[N], adj[N]; int ans, mn, few, n, m; bool val (int x, int y) { 	return 0 <= x && x < n && 0 <= y && y < m; } void wef (int x, int y, int q) { 	ans += a[x][y]; 	mrk[x][y] = 0; 	a[x][y] = -INF; 	for (int i = 0; i < 4; i++) 	{ 		if (dx[i] == dx[q]) 			continue; 		if (!val (x + dx[i], y + dy[i])) 		{ 			ans += -INF; 			continue; 		} 		ans += a[x + dx[i]][y + dy[i]]; 		a[x + dx[i]][y + dy[i]] = -INF; 	} } void dfs (int v, int par) { 	vis[v] = 1; 	int x = v / m, y = v % m; 	for (int i = 0; i < 4; i++) 	{ 		if (val (x + dx[i], y + dy[i])) 			mn = min (mn, a[x + dx[i]][y + dy[i]]); 		else 			mn = -INF; 	} 	for (int u : adj[v]) 	{ 		if (u != par && !vis[u]) 			dfs (u, v); 		else if (u != par) 			few++; 	} } void Solve () { 	int k, x, y; 	cin >> n >> m; 	for (int i = 0; i < n; i++) 		for (int j = 0; j < m; j++) 		{ 			cin >> x; 			a[i].pb (x); 			mrk[i].pb (0); 		} 	cin >> k; 	for (int i = 0; i < k; i++) 	{ 		cin >> x >> y; 		mrk[x][y] = 1; 	} 	for (int i = 0; i < n; i++) 		for (int j = 0; j < m; j++) 			for (int q = 0; q < 8; q++) 				if (val (i + dx[q], j + dy[q]) && mrk[i][j] && mrk[i + dx[q]][j + dy[q]]) 				{ 					wef (i, j, q); 					wef (i + dx[q], j + dy[q], (q + 2) % 4 + (q > 3 ? 4 : 0)); 				} 	for (int i = 0; i < n; i++) 		for (int j = 0; j < m; j++) 		{ 			if (!mrk[i][j]) 				continue; 			ans += a[i][j]; 			for (int q = 0; q < 4; q++) 			{ 				if (val (i + dx[q], j + dy[q])) 					ans += a[i + dx[q]][j + dy[q]]; 				else 					ans += -INF; 			} 			if (val (i + 2, j) && mrk[i + 2][j]) 			{ 				int v = i * m + j, u = (i + 2) * m + j; 				ans -= a[i + 1][j]; 				adj[v].pb (u); 				adj[u].pb (v); 			} 			if (val (i, j + 2) && mrk[i][j + 2]) 			{ 				int v = i * m + j, u = i * m + j + 2; 				ans -= a[i][j + 1]; 				adj[v].pb (u); 				adj[u].pb (v); 			} 		} 	for (int i = 0; i < n; i++) 		for (int j = 0; j < m; j++) 		{ 			if (!mrk[i][j]) 				continue; 			int v = i * m + j; 			if (vis[v]) 				continue; 			mn = INF, few = 0; 			dfs (v, -1);few/=2;           			if (few > 1) 				kill ("No"); 			if (few == 0) 				ans -= mn; 		} 	if (ans < 0) 		kill ("No"); 	cout << ans << endl; } int32_t main () { 	ios::sync_with_stdio (0), cin.tie (0), cout.tie (0); 	int tt = 1; //	cin >> tt; 	while (tt--) 		Solve (); }

Compilation message (stderr)

covering.cpp:1:26: warning: extra tokens at end of #include directive
    1 | #include "bits/stdc++.h" using namespace std; typedef long long ll; typedef long double ld; #define endl '\n' #define pb push_back #define mk make_pair #define sz size() #define F first #define S second #define all(x) x.begin(), x.end() #define kill(x) return cout << x << endl, void(); #define int ll typedef pair <int, int> pii; #pragma GCC optimize ("O3") #pragma GCC optimize ("unroll-loops") #pragma GCC target ("avx2") const int N = 1e6 + 5; const int MOD = 998244353, INF = 2e9, MOD2 = 1e9 + 7, sq = 350; int dx[8] = {0, 1, 0, -1, -1, -1, 1, 1}, dy[8] = {-1, 0, 1, 0, -1, 1, 1, -1}, vis[N]; vector <int> a[N], mrk[N], adj[N]; int ans, mn, few, n, m; bool val (int x, int y) {  return 0 <= x && x < n && 0 <= y && y < m; } void wef (int x, int y, int q) {  ans += a[x][y];  mrk[x][y] = 0;  a[x][y] = -INF;  for (int i = 0; i < 4; i++)  {   if (dx[i] == dx[q])    continue;   if (!val (x + dx[i], y + dy[i]))   {    ans += -INF;    continue;   }   ans += a[x + dx[i]][y + dy[i]];   a[x + dx[i]][y + dy[i]] = -INF;  } } void dfs (int v, int par) {  vis[v] = 1;  int x = v / m, y = v % m;  for (int i = 0; i < 4; i++)  {   if (val (x + dx[i], y + dy[i]))    mn = min (mn, a[x + dx[i]][y + dy[i]]);   else    mn = -INF;  }  for (int u : adj[v])  {   if (u != par && !vis[u])    dfs (u, v);   else if (u != par)    few++;  } } void Solve () {  int k, x, y;  cin >> n >> m;  for (int i = 0; i < n; i++)   for (int j = 0; j < m; j++)   {    cin >> x;    a[i].pb (x);    mrk[i].pb (0);   }  cin >> k;  for (int i = 0; i < k; i++)  {   cin >> x >> y;   mrk[x][y] = 1;  }  for (int i = 0; i < n; i++)   for (int j = 0; j < m; j++)    for (int q = 0; q < 8; q++)     if (val (i + dx[q], j + dy[q]) && mrk[i][j] && mrk[i + dx[q]][j + dy[q]])     {      wef (i, j, q);      wef (i + dx[q], j + dy[q], (q + 2) % 4 + (q > 3 ? 4 : 0));     }  for (int i = 0; i < n; i++)   for (int j = 0; j < m; j++)   {    if (!mrk[i][j])     continue;    ans += a[i][j];    for (int q = 0; q < 4; q++)    {     if (val (i + dx[q], j + dy[q]))      ans += a[i + dx[q]][j + dy[q]];     else      ans += -INF;    }    if (val (i + 2, j) && mrk[i + 2][j])    {     int v = i * m + j, u = (i + 2) * m + j;     ans -= a[i + 1][j];     adj[v].pb (u);     adj[u].pb (v);    }    if (val (i, j + 2) && mrk[i][j + 2])    {     int v = i * m + j, u = i * m + j + 2;     ans -= a[i][j + 1];     adj[v].pb (u);     adj[u].pb (v);    }   }  for (int i = 0; i < n; i++)   for (int j = 0; j < m; j++)   {    if (!mrk[i][j])     continue;    int v = i * m + j;    if (vis[v])     continue;    mn = INF, few = 0;    dfs (v, -1);few/=2;              if (few > 1)     kill ("No");    if (few == 0)     ans -= mn;   }  if (ans < 0)   kill ("No");  cout << ans << endl; } int32_t main () {  ios::sync_with_stdio (0), cin.tie (0), cout.tie (0);  int tt = 1; // cin >> tt;  while (tt--)   Solve (); }
      |                          ^~~~~
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
collect2: error: ld returned 1 exit status