QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#335515 | #7733. Cool, It’s Yesterday Four Times More | ucup-team1055# | TL | 366ms | 5644kb | C++20 | 3.7kb | 2024-02-23 15:20:21 | 2024-02-23 15:20:21 |
Judging History
answer
#include <bits/stdc++.h>
#define rep(i,s,n) for(int i = int(s); i < int(n); i++)
#define rrep(i,s,n) for(int i = int(n) - 1; i >= int(s); i--)
#define all(v) (v).begin(), (v).end()
using ll = long long;
using ull = unsigned long long;
using ld = long double;
bool chmin(auto &a, auto b) {
if(a <= b) return false;
a = b;
return true;
}
bool chmax(auto &a, auto b) {
if(a >= b) return false;
a = b;
return true;
}
using namespace std;
typedef bitset<1010000> B;
void solve(){
int n, m; cin >> n >> m;
vector c(n + 2, vector<char>(m + 2, 'O'));
rep(i,0,n)rep(j,0,m)cin>>c[i + 1][j + 1];
n += 2;
m += 2;
vector tansaku(n, vector<bool>(m));
vector belong(n, vector<int>(m, - 1));
vector<int> siz;
vector<B> memo;
int cnt = 0;
int all_cnt = 0;
auto valid = [&](int i, int j) -> bool {
return c[i][j] == '.';
};
rep(si,0,n){
rep(sj,0,m){
if(valid(si,sj) && !tansaku[si][sj]){
tansaku[si][sj] = 1;
vector<pair<int,int>> mada;
vector<pair<int,int>> mita;
int tmp_siz = 0;
mada.push_back(pair(si,sj));
while(!mada.empty()){
auto [i, j] = mada.back();
mada.pop_back();
tmp_siz++;
mita.push_back(pair(i, j));
for (auto[x,y]:{
pair(i+1,j),pair(i-1,j),pair(i,j+1),pair(i,j-1)
}){
if(valid(x,y) && !tansaku[x][y]){
tansaku[x][y] = 1;
mada.push_back(pair(x, y));
}
}
}
all_cnt++;
if (tmp_siz > 1){
B tmp;
for (auto[i,j]: mita){
tmp[i*m+j] = 1;
belong[i][j] = cnt;
}
memo.emplace_back(tmp);
siz.push_back(tmp_siz);
cnt++;
}
}
}
}
// CORNER CASE
if (cnt == 0){
if (all_cnt == 0){
cout << 0 << '\n';
}else if(all_cnt == 1){
cout << 1 << '\n';
}else{
cout << 0 << '\n';
}
return;
}
int ans = 0;
rep(i,0,n){
rep(j,0,m){
if (belong[i][j] == -1) continue;
int a = belong[i][j];
bool mode = 1;
rep(x,0,n){
rep(y,0,m){
if (x == i && y == j) continue;
if (belong[x][y] == -1) continue;
if (belong[i][j] == belong[x][y]) continue;
int idou = (x * m + y) - (i * m + j);
int b = belong[x][y];
if (idou >= 0){
if ((memo[b]|(memo[a]<<idou))==memo[b]){
mode = 0;
break;
}
}else{
if ((memo[b]|(memo[a]>>(-idou)))==memo[b]){
mode = 0;
break;
}
}
}
if (!mode){
break;
}
}
if (mode){
ans++;
}
}
}
cout << ans << '\n';
}
int main() {
std::cin.tie(nullptr);
std::ios::sync_with_stdio(false);
int t; cin >> t;
while(t--) solve();
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 4184kb
input:
4 2 5 .OO.. O..O. 1 3 O.O 1 3 .O. 2 3 OOO OOO
output:
3 1 0 0
result:
ok 4 lines
Test #2:
score: 0
Accepted
time: 14ms
memory: 4740kb
input:
200 2 4 OOO. OO.. 2 3 OOO .O. 3 3 O.O OOO OO. 4 1 . . O O 1 2 .O 1 1 . 2 5 .OO.. .O.O. 2 1 O O 1 1 O 1 3 .OO 5 1 O O . O . 5 2 O. .. O. .O .. 5 3 ... ... .OO ..O OOO 3 5 ..O.O .O.O. .OO.O 5 2 .O OO O. O. .. 2 1 O O 3 5 .O.OO O...O ..OO. 1 5 ..... 5 1 O . O . . 5 3 OOO OO. .OO OO. O.O 2 1 O . 5 2 O. ...
output:
3 0 0 2 1 1 3 0 0 1 0 7 9 4 4 0 6 5 2 0 1 6 4 5 2 0 0 5 3 3 1 4 1 0 7 5 2 3 7 3 0 6 2 2 2 0 4 6 6 3 3 2 3 5 2 1 0 3 3 4 4 2 2 0 7 6 4 8 5 3 2 5 2 1 2 1 4 0 0 2 5 1 4 6 6 1 6 2 2 3 4 5 2 1 0 1 9 3 4 11 0 3 2 1 0 0 4 3 1 4 3 8 3 0 3 6 2 5 1 3 3 4 0 2 11 2 2 4 0 4 4 6 2 1 2 3 0 5 0 16 4 3 2 6 0 8 3 3 1...
result:
ok 200 lines
Test #3:
score: 0
Accepted
time: 366ms
memory: 5644kb
input:
50 10 9 OOOO.O... O...O.OOO .....O... ..OO..O.O ...O..O.O ..OOO..O. ..OOO...O .OO.O..OO .O.O.OO.. .O..O.O.O 10 10 .O.OOO.OO. ...OOOOOOO ...O.O..O. .O.O..O... .O.O.OO..O ..OO.O..OO O....O..OO OO...OOOOO OO.OO.O..O .O.O.OOOOO 10 8 O..OOO.O O.OOOO.. O..OO.OO OO..OO.. .OOO..O. .OO.OO.O OOO..OO. ..O..OO....
output:
31 40 13 25 40 37 27 29 20 26 25 29 21 29 21 31 32 31 33 34 25 31 18 25 41 28 20 45 20 29 18 21 27 28 35 13 20 17 32 29 28 23 23 23 24 18 28 17 35 24
result:
ok 50 lines
Test #4:
score: -100
Time Limit Exceeded
input:
5 1 1000 ....O..OO..O..O..OO...OOO.OOOO.O...O....OOOOO.....OO..OOOO.O..O....OOOO..OO..OOOO......O.O.O..O..OO.OO.OO.O....O.O.O.O.O.OO..O.O.OO..O..OO..O.OOO...O...O.O.O..O....O.OO...O..O...O.OOO..OO.O..O.OO.O.O..OOOO..O.OO.O.O....O.OO.......OOOO....O.O.O.O..OOO.O.OO.OOO..O...O.O.O.O.OO.O.OOOO...O.OO.....