提出 #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;
}
提出情報
提出日時
2016-12-12 12:07:55+0900
問題
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
結果
セット名
テストケース
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