답안 #250901

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
250901 2020-07-19T11:31:19 Z edisonhello Lollipop (POI11_liz) C++17
100 / 100
401 ms 34620 KB
// #pragma GCC optimize("no-stack-protector")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.2,popcnt,abm,mmx,avx,tune=native")
// #pragma GCC diagnostic ignored "-W"

#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <deque>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <vector>
#include <utility>
#include <functional>
#include <complex>
#include <climits>
#include <random>
#include <thread>

#if __cplusplus >= 201103L
#include <unordered_map>
#include <unordered_set>
#include <tuple>
#endif

// #include<ext/pb_ds/assoc_container.hpp>
// #include<ext/pb_ds/tree_policy.hpp>
// #include<ext/rope>

using namespace std;
// using namespace __gnu_pbds;

#define ll long long
#define ld long double
#define X first
#define Y second
#define pb push_back
#define eb emplace_back
#define pii pair<int, int>
#define vint vector<int>
#define vpii vector<pair<int, int>>
#define SS stringstream
#define PQ priority_queue
#define MS(x, v) memset((x), (v), sizeof(x))
#define RZUNI(x) sort(x.begin(), x.end()), x.resize(unique(x.begin(), x.end()) - x.begin())
#define FLH fflush(stdout)
#define CPPinput ios_base::sync_with_stdio(0), cin.tie(0)
#define FIO(fname) freopen(fname ".in", "r", stdin), freopen(fname ".out", "w", stdout)
#define FIN(fname) freopen(fname, "r", stdin)
#define FOUT(fname) freopen(fname, "w", stdout)

#define tm Ovuvuevuevue
#define y1 Enyetuenwuevue
#define left Ugbemugbem
#define ws Osas
#define dec tetteterette
#define expl explexplexpl
#define data datadetedoto

#define YES cout << "YES" << endl
#define NO cout << "NO" << endl
#define Yes cout << "Yes" << endl
#define No cout << "No" << endl

#ifdef WEAK
#include"/home/edison/Coding/cpp/template/debug.cpp"
#define DEB(...) printf(__VA_ARGS__), fflush(stdout)
#define WHR() printf("%s: Line %d", __PRETTY_FUNCTION__, __LINE__), fflush(stdout)
#define LOG(...) printf("%s: Line %d ", __PRETTY_FUNCTION__, __LINE__), printf(__VA_ARGS__), fflush(stdout)
#define DEBUG 1
#define exit(x) cout << "exit code " << x << endl, exit(0)
#else
#define PDE(...) ;
#define DEB(...) ;
#define WHR() ;
#define LOG(...) ;
#define DEBUG 0
#endif

#define lowbit(x) ((x) & (-(x)))

void JIZZ(string output = ""){ cout << output; exit(0); }

const long double PI = 3.14159265358979323846264338327950288;
const long double eps = 1e-10;
const long long mod = 1e9+7;


int main() {
    CPPinput;
	int n, m; cin >> n >> m;
	string s; cin >> s; s = " " + s;

	vector<int> pre(n + 1, 0);
	for (int i = 1; i <= n; ++i) s[i] = s[i] == 'W' ? 1 : 2;
	for (int i = 1; i <= n; ++i) pre[i] = pre[i - 1] + s[i];
	vector<pair<int, int>> ans(2000010, pair<int, int>(-1, -1));

	bool all2 = true;
	for (int i = 1; i <= n; ++i) if (s[i] == 1) all2 = false;

	if (all2) {
		for (int i = 1; i <= n; ++i) ans[i * 2] = make_pair(1, i);
	} else {
		int l2 = 0, r2 = 0;
		while (s[l2 + 1] == 2) ++l2;
		while (s[n - r2] == 2) ++r2;

		auto Add = [&] (int l, int r) {
			if (l > r) return;
			assert(l >= 1 && r <= n);
			PDE(l, r, pre[r] - pre[l - 1]);
			ans[pre[r] - pre[l - 1]] = make_pair(l, r);
		};

		PDE(l2, r2);
		
		if (l2 > r2) {
			for (int l = 1; l <= n - r2; ++l) Add(l, n - r2), Add(l, n - r2 - 1);
			for (int r = n - r2; r <= n; ++r) Add(1, r);
		} else {
			for (int r = l2; r <= n; ++r) Add(l2 + 1, r), Add(l2 + 2, r);
			for (int l = 1; l <= l2; ++l) Add(l, n);
		}
	}

	while (m--) {
		int x; cin >> x;
		if (ans[x].first == -1) cout << "NIE" << '\n';
		else cout << ans[x].first << ' ' << ans[x].second << '\n';
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 16000 KB Output is correct
2 Correct 9 ms 16000 KB Output is correct
3 Correct 9 ms 16000 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 16000 KB Output is correct
2 Correct 8 ms 16000 KB Output is correct
3 Correct 8 ms 16000 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 16000 KB Output is correct
2 Correct 8 ms 16000 KB Output is correct
3 Correct 14 ms 16128 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 16128 KB Output is correct
2 Correct 12 ms 16128 KB Output is correct
3 Correct 14 ms 16128 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 16384 KB Output is correct
2 Correct 16 ms 16256 KB Output is correct
3 Correct 34 ms 17144 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 17272 KB Output is correct
2 Correct 121 ms 21112 KB Output is correct
3 Correct 61 ms 18552 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 17140 KB Output is correct
2 Correct 35 ms 17012 KB Output is correct
3 Correct 64 ms 18676 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 108 ms 19244 KB Output is correct
2 Correct 99 ms 19700 KB Output is correct
3 Correct 164 ms 21616 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 227 ms 25056 KB Output is correct
2 Correct 205 ms 25156 KB Output is correct
3 Correct 278 ms 26612 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 185 ms 24532 KB Output is correct
2 Correct 238 ms 28364 KB Output is correct
3 Correct 290 ms 27716 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 401 ms 32468 KB Output is correct
2 Correct 355 ms 32600 KB Output is correct
3 Correct 388 ms 30624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 399 ms 34620 KB Output is correct
2 Correct 393 ms 30012 KB Output is correct
3 Correct 337 ms 34492 KB Output is correct