5 条题解
-
1
虽然只有一种味道,但真的很 鲜~
葵花籽味
#include <iostream> #include <vector> #include <string> using namespace std; inline bool in(int x, int y, int n, int m) { return x >= 0 && x < n && y >= 0 && y < m; } inline bool good(const vector<string>& g, int x, int y, int n, int m) { const int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; for (int i = 0; i < 4; i++) { int nx = x + d[i][0], ny = y + d[i][1]; if (in(nx, ny, n, m) && g[nx][ny] == '#') return false; } return true; } inline bool goodAfter(const vector<string>& g, int x, int y, int cx, int cy, int n, int m) { const int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; for (int i = 0; i < 4; i++) { int nx = x + d[i][0], ny = y + d[i][1]; if ((nx == cx && ny == cy) || !in(nx, ny, n, m)) continue; if (g[nx][ny] == '#') return false; } return true; } int main() { int n, m; cin >> n >> m; vector<string> g(n); for (int i = 0; i < n; i++) cin >> g[i]; int orig = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (g[i][j] == '.' && good(g, i, j, n, m)) orig++; int maxAdd = 0; const int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (g[i][j] == '#') { int add = 0; if (goodAfter(g, i, j, i, j, n, m)) add++; for (int k = 0; k < 4; k++) { int x = i + d[k][0], y = j + d[k][1]; if (in(x, y, n, m) && g[x][y] == '.') { if (!good(g, x, y, n, m) && goodAfter(g, x, y, i, j, n, m)) add++; } } maxAdd = max(maxAdd, add); } } } cout << orig + maxAdd << endl; return 0; } -
0
#include <bits/stdc++.h> #define LL long long using namespace std; const int N = 1010; int n, m; char g[N][N]; int dx[4] = {-1, 1, 0, 0}; int dy[4] = {0, 0, -1, 1}; bool f(int x, int y) { if (g[x][y] != '.') return false; for (int i = 0; i < 4; i++) { int nx = x + dx[i], ny = y + dy[i]; if (nx < 1 || nx > n || ny < 1 || ny > m) continue; if (g[nx][ny] == '#') return false; } return true; } int add(int x0, int y0) { if (g[x0][y0] != '#') return 0; int res = 0; bool self_ok = true; for (int i = 0; i < 4; i++) { int nx = x0 + dx[i], ny = y0 + dy[i]; if (nx < 1 || nx > n || ny < 1 || ny > m) continue; if (g[nx][ny] == '#') { self_ok = false; break; } } if (self_ok) res++; for (int i = 0; i < 4; i++) { int nx = x0 + dx[i], ny = y0 + dy[i]; if (nx < 1 || nx > n || ny < 1 || ny > m) continue; if (g[nx][ny] != '.') continue; bool origin_bad = false; for (int j = 0; j < 4; j++) { int nnx = nx + dx[j], nny = ny + dy[j]; if (nnx < 1 || nnx > n || nny < 1 || nny > m) continue; if (g[nnx][nny] == '#' && (nnx != x0 || nny != y0)) { origin_bad = true; break; } } if (!origin_bad && !f(nx, ny)) { res++; } } return res; } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { string s; cin >> s; for (int j = 1; j <= m; j++) { g[i][j] = s[j-1]; } } int base = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (f(i, j)) base++; } } int max_add = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (g[i][j] == '#') { max_add = max(max_add, add(i, j)); } } } cout << base + max_add << endl; return 0; } //:) //114514 -
0
#include <iostream> #include <vector> #include <string> using namespace std; inline bool in(int x, int y, int n, int m) { return x >= 0 && x < n && y >= 0 && y < m; } inline bool good(const vector<string>& g, int x, int y, int n, int m) { const int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; for (int i = 0; i < 4; i++) { int nx = x + d[i][0], ny = y + d[i][1]; if (in(nx, ny, n, m) && g[nx][ny] == '#') return false; } return true; } inline bool goodAfter(const vector<string>& g, int x, int y, int cx, int cy, int n, int m) { const int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; for (int i = 0; i < 4; i++) { int nx = x + d[i][0], ny = y + d[i][1]; if ((nx == cx && ny == cy) || !in(nx, ny, n, m)) continue; if (g[nx][ny] == '#') return false; } return true; } int main() { int n, m; cin >> n >> m; vector<string> g(n); for (int i = 0; i < n; i++) cin >> g[i]; int orig = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (g[i][j] == '.' && good(g, i, j, n, m)) orig++; int maxAdd = 0; const int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (g[i][j] == '#') { int add = 0; if (goodAfter(g, i, j, i, j, n, m)) add++; for (int k = 0; k < 4; k++) { int x = i + d[k][0], y = j + d[k][1]; if (in(x, y, n, m) && g[x][y] == '.') { if (!good(g, x, y, n, m) && goodAfter(g, x, y, i, j, n, m)) add++; } } maxAdd = max(maxAdd, add); } } } cout << orig + maxAdd << endl; return 0; } -
0
#include <iostream> #include <vector> #include <string> using namespace std; inline bool in(int x, int y, int n, int m) { return x >= 0 && x < n && y >= 0 && y < m; } inline bool good(const vector<string>& g, int x, int y, int n, int m) { const int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; for (int i = 0; i < 4; i++) { int nx = x + d[i][0], ny = y + d[i][1]; if (in(nx, ny, n, m) && g[nx][ny] == '#') return false; } return true; } inline bool goodAfter(const vector<string>& g, int x, int y, int cx, int cy, int n, int m) { const int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; for (int i = 0; i < 4; i++) { int nx = x + d[i][0], ny = y + d[i][1]; if ((nx == cx && ny == cy) || !in(nx, ny, n, m)) continue; if (g[nx][ny] == '#') return false; } return true; } int main() { int n, m; cin >> n >> m; vector<string> g(n); for (int i = 0; i < n; i++) cin >> g[i]; int orig = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (g[i][j] == '.' && good(g, i, j, n, m)) orig++; int maxAdd = 0; const int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (g[i][j] == '#') { int add = 0; if (goodAfter(g, i, j, i, j, n, m)) add++; for (int k = 0; k < 4; k++) { int x = i + d[k][0], y = j + d[k][1]; if (in(x, y, n, m) && g[x][y] == '.') { if (!good(g, x, y, n, m) && goodAfter(g, x, y, i, j, n, m)) add++; } } maxAdd = max(maxAdd, add); } } } cout << orig + maxAdd << endl; return 0; } -
0
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e3+10; const int INF=0x3f3f3f3f; inline int read(){ll x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;} ll n,m,cnt,dx[4]={1,-1,0,0},dy[4]={0,0,-1,1},sum,ans; char a[N][N]; bool check(ll x,ll y){ for(int i=0;i<4;i++){ ll xx=x+dx[i],yy=y+dy[i]; if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]=='#'){ return 0; } } return 1; } int main(){ //freopen(".in","r",stdin); //freopen(".out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]=='.'&&check(i,j)){ cnt++; } else if(a[i][j]=='#'){ a[i][j]='.'; sum=0; if(check(i,j)){ sum++; } for(int k=0;k<4;k++){ ll xx=i+dx[k],yy=j+dy[k]; if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]=='.'&&check(xx,yy)){ sum++; } } a[i][j]='#'; } ans=max(ans,sum); } } cout<<ans+cnt; }
- 1
信息
- ID
- 3314
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 121
- 已通过
- 23
- 上传者