提出 #1022523


ソースコード 拡げる

// think twice code once
// Start:2016-12-12 11:02:48
// End  :
#include <bits/stdc++.h>
using namespace std;

#define rep(i, x, y) for(int i = (x), _ = (y); i <= _; ++ i)
#define per(i, x, y) for(int i = (x), _ = (y); i >= _; -- i)
#define dprintf(...) fprintf(stderr, __VA_ARGS__)
#define disp(x) cout << #x << " = " << x << "; "

typedef long long LL;

template <class T> bool chkmin(T& a, T b) { return a > b ? a = b, true : false; }
template <class T> bool chkmax(T& a, T b) { return a < b ? a = b, true : false; }

template <class T> void read(T& a) {
	char c = getchar(); T f = 1; a = 0;
	for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
	for(; isdigit(c); c = getchar()) a = a * 10 + c - '0';
	a *= f;
}

template <class T> void write(T a) {
	static int stk[60]; 
	int tp = 0;
	if(a < 0) putchar('-'), a = -a;
	do {
		stk[++ tp] = a % 10;
		a /= 10;
	}while(a);
	
	while(tp) putchar(stk[tp--] + '0');
}

const int maxN = 3005, mo = 1e9 + 7;

int dp[maxN][maxN];
int N, M;
int a[maxN], b[maxN];
char s[maxN];

void move1(int l, int r) {
	int tot1 = 0;
	rep(i, l, r) tot1 += a[i];
	rep(i, l, l + tot1 - 1) a[i] = 1;
	rep(i, l + tot1, r) a[i] = 0;
}

void move2(int l, int r) {
	int tot0 = 0;
	rep(i, l, r) tot0 += b[i] == 0;
	rep(i, l, l + tot0 - 1) b[i] = 0;
	rep(i, l + tot0, r) b[i] = 1;
}

int main() {
#ifdef Leeson
	freopen("tmp.in", "r", stdin);
	freopen("tmp.out", "w", stdout);
#endif

	read(N); read(M);
	scanf("%s", s + 1);
	rep(i, 1, N) a[i] = b[i] = s[i] - '0';
	rep(i, 1, M) {
		int x, y;
		read(x); read(y);
		move1(x, y);
		move2(x, y);
	}

//	rep(i, 1, N) printf("%d", a[i]); puts("");
//	rep(i, 1, N) printf("%d", b[i]); puts("");

	rep(i, 1, N) a[i] += a[i - 1], b[i] += b[i - 1];

	dp[0][0] = 1;
	rep(i, 1, N) rep(j, b[i], a[i]) {
		dp[i][j] = dp[i - 1][j];
		if(j) dp[i][j] = (dp[i - 1][j] + dp[i - 1][j - 1]) % mo;
	}
	cout << dp[N][a[N]] << endl;

	return 0;
}

提出情報

提出日時
問題 F - シャッフル
ユーザ leeson
言語 C++14 (GCC 5.4.1)
得点 900
コード長 1982 Byte
結果 AC
実行時間 15 ms
メモリ 12544 KiB

コンパイルエラー

./Main.cpp: In function ‘int main()’:
./Main.cpp:64:20: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%s", s + 1);
                    ^

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 900 / 900
結果
AC × 3
AC × 27
セット名 テストケース
Sample subtask0_0.txt, subtask0_1.txt, subtask0_2.txt
All subtask0_0.txt, subtask0_1.txt, subtask0_2.txt, subtask1_0.txt, subtask1_1.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_2.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt
ケース名 結果 実行時間 メモリ
subtask0_0.txt AC 2 ms 256 KiB
subtask0_1.txt AC 3 ms 256 KiB
subtask0_2.txt AC 3 ms 256 KiB
subtask1_0.txt AC 14 ms 12288 KiB
subtask1_1.txt AC 15 ms 12416 KiB
subtask1_10.txt AC 15 ms 12416 KiB
subtask1_11.txt AC 15 ms 12416 KiB
subtask1_12.txt AC 14 ms 12288 KiB
subtask1_13.txt AC 15 ms 12416 KiB
subtask1_14.txt AC 15 ms 12416 KiB
subtask1_15.txt AC 14 ms 12288 KiB
subtask1_16.txt AC 15 ms 12416 KiB
subtask1_17.txt AC 15 ms 12416 KiB
subtask1_18.txt AC 14 ms 12288 KiB
subtask1_19.txt AC 14 ms 12416 KiB
subtask1_2.txt AC 15 ms 12416 KiB
subtask1_20.txt AC 15 ms 12544 KiB
subtask1_21.txt AC 14 ms 12288 KiB
subtask1_22.txt AC 15 ms 12416 KiB
subtask1_23.txt AC 14 ms 12416 KiB
subtask1_3.txt AC 14 ms 12288 KiB
subtask1_4.txt AC 14 ms 12416 KiB
subtask1_5.txt AC 15 ms 12416 KiB
subtask1_6.txt AC 14 ms 12288 KiB
subtask1_7.txt AC 14 ms 12416 KiB
subtask1_8.txt AC 15 ms 12416 KiB
subtask1_9.txt AC 14 ms 12288 KiB