Submission #3466948
Source Code Expand
#include <bits/stdc++.h>
#define For(i, l, r) for(register int i = (l), i##end = (int)(r); i <= i##end; ++i)
#define Fordown(i, r, l) for(register int i = (r), i##end = (int)(l); i >= i##end; --i)
#define Set(a, v) memset(a, v, sizeof(a))
#define Cpy(a, b) memcpy(a, b, sizeof(a))
#define debug(x) cout << #x << ": " << (x) << endl
#define DEBUG(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
template<typename T> inline bool chkmin(T &a, T b) { return b < a ? a = b, 1 : 0; }
template<typename T> inline bool chkmax(T &a, T b) { return b > a ? a = b, 1 : 0; }
inline int read() {
int x(0), sgn(1); char ch(getchar());
for (; !isdigit(ch); ch = getchar()) if (ch == '-') sgn = -1;
for (; isdigit(ch); ch = getchar()) x = (x * 10) + (ch ^ 48);
return x * sgn;
}
void File() {
freopen ("F.in", "r", stdin);
freopen ("F.out", "w", stdout);
}
const int N = 5010, Mod = 1e9 + 7;
int n; char str[N];
inline int fpm(int x, int power) {
int res = 1;
for (; power; power >>= 1, x = 1ll * x * x % Mod)
if (power & 1) res = 1ll * res * x % Mod;
return res;
}
int fac[N], ifac[N], Pow2[N];
void Math_Init(int maxn) {
fac[0] = ifac[0] = Pow2[0] = 1;
For (i, 1, maxn)
fac[i] = 1ll * fac[i - 1] * i % Mod,
Pow2[i] = 2ll * Pow2[i - 1] % Mod;
ifac[maxn] = fpm(fac[maxn], Mod - 2);
Fordown (i, maxn - 1, 1)
ifac[i] = 1ll * ifac[i + 1] * (i + 1) % Mod;
}
inline int Comb(int n, int m) {
if (n < 0 || m < 0 || n < m) return 0;
return 1ll * fac[n] * ifac[m] % Mod * ifac[n - m] % Mod;
}
inline int Calc(int len) {
int res = 0;
For (i, 0, n)
if (i - (n - i) <= len)
res = (res + 1ll * (Comb(n, i) - Comb(n, i - (len + 1))) * Pow2[i]) % Mod;
return (res + Mod) % Mod;
}
int main () {
n = read();
scanf ("%s", str + 1);
Math_Init(n);
int len = strlen(str + 1);
printf ("%lld\n", 1ll * (Calc(len) - Calc(len - 1) + Mod) * fpm(fpm(2, len), Mod - 2) % Mod);
return 0;
}
Submission Info
Submission Time |
|
Task |
F - Unhappy Hacking |
User |
zjp_shadow |
Language |
C++14 (GCC 5.4.1) |
Score |
800 |
Code Size |
1981 Byte |
Status |
AC |
Exec Time |
1 ms |
Memory |
256 KB |
Compile Error
./Main.cpp: In function ‘void File()’:
./Main.cpp:23:30: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
freopen ("F.in", "r", stdin);
^
./Main.cpp:24:32: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
freopen ("F.out", "w", stdout);
^
./Main.cpp: In function ‘int main()’:
./Main.cpp:65:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf ("%s", str + 1);
^
Judge Result
Set Name |
Sample |
Sub1 |
Sub2 |
Score / Max Score |
0 / 0 |
400 / 400 |
400 / 400 |
Status |
|
|
|
Set Name |
Test Cases |
Sample |
0_01, 0_02, 0_03 |
Sub1 |
0_01, 0_02, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17, 1_18, 1_19, 1_20, 1_21, 1_22, 1_23, 1_24 |
Sub2 |
0_01, 0_02, 0_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17, 1_18, 1_19, 1_20, 1_21, 1_22, 1_23, 1_24, 2_25, 2_26, 2_27, 2_28, 2_29, 2_30, 2_31, 2_32, 2_33, 2_34, 2_35, 2_36, 2_37, 2_38, 2_39, 2_40, 2_41, 2_42, 2_43, 2_44 |
Case Name |
Status |
Exec Time |
Memory |
0_01 |
AC |
1 ms |
256 KB |
0_02 |
AC |
1 ms |
256 KB |
0_03 |
AC |
1 ms |
256 KB |
1_04 |
AC |
1 ms |
256 KB |
1_05 |
AC |
1 ms |
256 KB |
1_06 |
AC |
1 ms |
256 KB |
1_07 |
AC |
1 ms |
256 KB |
1_08 |
AC |
1 ms |
256 KB |
1_09 |
AC |
1 ms |
256 KB |
1_10 |
AC |
1 ms |
256 KB |
1_11 |
AC |
1 ms |
256 KB |
1_12 |
AC |
1 ms |
256 KB |
1_13 |
AC |
1 ms |
256 KB |
1_14 |
AC |
1 ms |
256 KB |
1_15 |
AC |
1 ms |
256 KB |
1_16 |
AC |
1 ms |
256 KB |
1_17 |
AC |
1 ms |
256 KB |
1_18 |
AC |
1 ms |
256 KB |
1_19 |
AC |
1 ms |
256 KB |
1_20 |
AC |
1 ms |
256 KB |
1_21 |
AC |
1 ms |
256 KB |
1_22 |
AC |
1 ms |
256 KB |
1_23 |
AC |
1 ms |
256 KB |
1_24 |
AC |
1 ms |
256 KB |
2_25 |
AC |
1 ms |
256 KB |
2_26 |
AC |
1 ms |
256 KB |
2_27 |
AC |
1 ms |
256 KB |
2_28 |
AC |
1 ms |
256 KB |
2_29 |
AC |
1 ms |
256 KB |
2_30 |
AC |
1 ms |
256 KB |
2_31 |
AC |
1 ms |
256 KB |
2_32 |
AC |
1 ms |
256 KB |
2_33 |
AC |
1 ms |
256 KB |
2_34 |
AC |
1 ms |
256 KB |
2_35 |
AC |
1 ms |
256 KB |
2_36 |
AC |
1 ms |
256 KB |
2_37 |
AC |
1 ms |
256 KB |
2_38 |
AC |
1 ms |
256 KB |
2_39 |
AC |
1 ms |
256 KB |
2_40 |
AC |
1 ms |
256 KB |
2_41 |
AC |
1 ms |
256 KB |
2_42 |
AC |
1 ms |
256 KB |
2_43 |
AC |
1 ms |
256 KB |
2_44 |
AC |
1 ms |
256 KB |