Submission #118695

# Submission time Handle Problem Language Result Execution time Memory
118695 2019-06-19T11:48:44 Z eriksuenderhauf Linear Garden (IOI08_linear_garden) C++11
Compilation error
0 ms 0 KB
//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/rope>
#define mem(a,v) memset((a), (v), sizeof (a))
#define enl printf("\n")
#define case(t) printf("Case #%d: ", (t))
#define ni(n) scanf("%d", &(n))
#define nl(n) scanf("%I64d", &(n))
#define nai(a, n) for (int i = 0; i < (n); i++) ni(a[i])
#define nal(a, n) for (int i = 0; i < (n); i++) nl(a[i])
#define pri(n) printf("%d\n", (n))
#define prl(n) printf("%I64d\n", (n))
#define pii pair<int, int>
#define pil pair<int, long long>
#define pll pair<long long, long long>
#define vii vector<pii>
#define vil vector<pil>
#define vll vector<pll>
#define vi vector<int>
#define vl vector<long long>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef cc_hash_table<int,int,hash<int>> ht;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> oset;
const double pi = acos(-1);
int MOD = 1e9 + 7;
const int INF = 1e9 + 7;
const int MAXN = 1e6 + 5;
const double eps = 1e-9;
char str[MAXN];
int mx[MAXN], mi[MAXN], dp[2][5][5][5];

int main() {
	int n;
	scanf("%d %d", &n, &MOD);
	scanf("%s", str);
	int cur = 0, a = 0, b = 0;
	for (int i = 0; i < n; i++) {
		cur--;
		mx[i] = max(a - cur, 0);
		mi[i] = min(b - cur, 0);
		if (str[i] == 'P')
			cur += 2;
		a = max(a, cur);
		b = min(b, cur);
	}
	int ans = 1;
	dp[0][2][2][2] = 1;
	for (int i = n - 1; i >= 0; i--) {
		if (str[i] == 'P') {
			for (int j = 0; j <= 2; j++)
				for (int k = 2; k <= j + 2; k++)
					for (int l = j; l <= k; l++)
						if (max(k, l + mx[i]) - min(j, l + mi[i]) <= 2)
							ans = (ans + dp[0][j][k][l]) % MOD;
		}
		for (int j = 0; j <= 2; j++)
			for (int k = 2; k <= j + 2; k++)
				for (int l = j; l <= min(3, k); l++)
					dp[1][j][max(k, l + 1)][l + 1] = (dp[1][j][max(k, l + 1)][l + 1] + dp[0][j][k][l]) % MOD;
		for (int j = 0; j <= 2; j++)
			for (int k = 2; k <= j + 2; k++)
				for (int l = max(1, j); l <= k; l++)
					dp[1][min(j, l - 1)][k][l - 1] = (dp[1][min(j, l - 1)][k][l - 1] + dp[0][j][k][l]) % MOD;
		swap(dp[0], dp[1]);
		mem(dp[1]);
	}
	pri(ans);
    return 0;
}

Compilation message

linear_garden.cpp:73:12: error: macro "mem" requires 2 arguments, but only 1 given
   mem(dp[1]);
            ^
linear_garden.cpp: In function 'int main()':
linear_garden.cpp:73:3: error: 'mem' was not declared in this scope
   mem(dp[1]);
   ^~~
linear_garden.cpp:42:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &MOD);
  ~~~~~^~~~~~~~~~~~~~~~~~~
linear_garden.cpp:43:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%s", str);
  ~~~~~^~~~~~~~~~~