Submission #71498

# Submission time Handle Problem Language Result Execution time Memory
71498 2018-08-24T23:14:36 Z RezwanArefin01 Linear Garden (IOI08_linear_garden) C++17
100 / 100
38 ms 10572 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> ii; 

const int N = 1e6 + 10; 

int f[N], n, M; 
char s[N]; 

int main(int argc, char const *argv[]) {
	scanf("%d %d", &n, &M); 
	scanf(" %s", s);
	int len = strlen(s); 

	f[0] = 1;
	for(int i = 1; i < N; i++) 
		f[i] = f[i - 1] * 2ll % M;

	int idx = 1, bal = 0, mn = 0, mx = 0; 

	#define add(x, y) {x += y; if(x >= M) x -= M;}
	#define sub(x, y) {x -= y; if(x < 0) x += M;}

	for(int i = 0; i < len; i++) {
		if(s[i] == 'L') {
			mx = max(mx, ++bal);
		} else {
			int bal2 = bal + 1; 
			int mn2 = min(mn, bal2);
			int mx2 = max(mx, bal2); 
			int rem = n - i - 1; 
			mn = min(mn, --bal);

			if(mx2 - mn2 > 2) continue; 

			if(mx2 - mn2 == 2) {
				if(mn2 < bal2 && bal2 < mx2){
					add(idx, f[rem + 1 >> 1]); 
				} else add(idx, f[rem >> 1]); 
			} else {
				add(idx, f[rem >> 1]);
				add(idx, f[rem + 1 >> 1]);
				sub(idx, 1); 
			}
		}
	}
	printf("%d\n", idx);
}

Compilation message

linear_garden.cpp: In function 'int main(int, const char**)':
linear_garden.cpp:40:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
      add(idx, f[rem + 1 >> 1]); 
                 ~~~~^~~
linear_garden.cpp:23:26: note: in definition of macro 'add'
  #define add(x, y) {x += y; if(x >= M) x -= M;}
                          ^
linear_garden.cpp:44:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     add(idx, f[rem + 1 >> 1]);
                ~~~~^~~
linear_garden.cpp:23:26: note: in definition of macro 'add'
  #define add(x, y) {x += y; if(x >= M) x -= M;}
                          ^
linear_garden.cpp:13:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &M); 
  ~~~~~^~~~~~~~~~~~~~~~~
linear_garden.cpp:14:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf(" %s", s);
  ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 27 ms 4216 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 4328 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 25 ms 4416 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 4432 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 4564 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 4564 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 4564 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 28 ms 4612 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 4636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 25 ms 4636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 25 ms 4636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 4636 KB Output is correct
2 Correct 25 ms 4672 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 4676 KB Output is correct
2 Correct 24 ms 4676 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 27 ms 4676 KB Output is correct
2 Correct 26 ms 4676 KB Output is correct
3 Correct 26 ms 4676 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 4764 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 25 ms 4764 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 4824 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 25 ms 4888 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 28 ms 5540 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 28 ms 5936 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 6604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 31 ms 7360 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 38 ms 8608 KB Output is correct
2 Correct 33 ms 9680 KB Output is correct
3 Correct 36 ms 10572 KB Output is correct