結果
| 問題 |
No.608 God's Maze
|
| コンテスト | |
| ユーザー |
pin
|
| 提出日時 | 2017-12-08 16:46:06 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,747 bytes |
| コンパイル時間 | 826 ms |
| コンパイル使用メモリ | 84,272 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-29 19:36:09 |
| 合計ジャッジ時間 | 2,835 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 41 WA * 24 |
ソースコード
#include <iostream>
#include <iomanip>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <queue>
#include <functional>
#include <map>
#include <vector>
#include <string>
using namespace std;
typedef long long ll;
int n;
int S[100005], T[100005];
string s;
int main(void){
cin >> n >> s;
S[0] = S[s.size() + 1] = 0;
for (int i = 1; i <= s.size(); i++){
T[i] = 0;
if (s[i - 1] == '.') S[i] = 0;
else S[i] = 1;
}
int start[2] = { n, n };
for (int i = 1; i <= n; i++){
if (T[i] == S[i]) continue;
start[0] = i;
break;
}
for (int i = s.size(); i >= n; i--){
if (T[i] == S[i]) continue;
start[1] = i;
break;
}
int id;
if (n - start[0] < start[1] - n) id = start[0];
else id = start[1];
ll ans = 0;
for (int i = id; i < n; i++){
T[i] = (T[i] + 1) % 2;
ans++;
}
for (int i = id; i > n; i--){
T[i] = (T[i] + 1) % 2;
ans++;
}
if (id < n){
while (T[start[1]] != S[start[1]]){
if (T[id] == S[id]){
T[id + 1] = (T[id + 1] + 1) % 2;
ans++;
id++;
continue;
}
T[id + 1] = (T[id + 1] + 1) % 2;
T[id] = (T[id] + 1) % 2;
ans += 2;
id++;
}
}
else{
while (T[start[0]] != S[start[0]]){
if (T[id] == S[id]){
T[id - 1] = (T[id - 1] + 1) % 2;
ans++;
id--;
continue;
}
T[id - 1] = (T[id - 1] + 1) % 2;
T[id] = (T[id] + 1) % 2;
ans += 2;
}
}
cout << ans << endl;
}
pin