diff --git a/contests/Cadernaveis/URI1130.cpp b/contests/Cadernaveis/URI1130.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1d02342ecca8b13debb22aa02f106eccd7c1f586 --- /dev/null +++ b/contests/Cadernaveis/URI1130.cpp @@ -0,0 +1,79 @@ +#include <bits/stdc++.h> + +#define MAX 10101 +#define EPS 1e-6 +#define MOD 1000000007 +#define inf 0x3f3f3f3f +#define llinf 0x3f3f3f3f3f3f3f3f + +#define fi first +#define se second +#define pb push_back +#define ende '\n' + +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +#define mset(x, y) memset(&x, (y), sizeof(x)) + +using namespace std; + +using ll = long long; +using ii = pair<int,int>; + +int dp[MAX]; +//int foi[MAX]; + +int solve(int n) { + if (n < 5) + return 0; + if (dp[n] != -1) + return dp[n]; + + vector<int> foi(MAX, 0); + for (int j = 2; j < n - 2; ++j) + foi[solve(j) ^ solve(n - 1 - j)] = 1; + + for (int j = 0; j < MAX; ++j) + if (!foi[j]) { + dp[n] = j; + break; + } + + return dp[n]; +} + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + int n; + mset(dp, -1); + while (cin >> n && n) { + string s; cin >> s; + + bool done = false; + for (int i = 1; i < n; ++i) + if (s[i] == 'X' && s[i-1] == 'X') done = true; + for (int i = 2; i < n; ++i) + if (s[i] == 'X' && s[i-2] == 'X') done = true; + + if (done) { + cout << 'S' << ende; + continue; + } + + int ans = 0; + int last = -3; + for (int i = 0; i < n; ++i) { + if (s[i] == 'X') { + ans ^= solve(i-last-1); + last = i; + } + } + + ans ^= solve(n-last+1); + cout << (ans ? 'S' : 'N') << endl; + } + + return 0; +} diff --git a/contests/SBC16/a.out b/contests/SBC16/a.out deleted file mode 100755 index 71cabd06f9608efa44779b2b5837c4fbe534a032..0000000000000000000000000000000000000000 Binary files a/contests/SBC16/a.out and /dev/null differ