提出 #18011616


ソースコード 拡げる

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
const int N = 205;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
using namespace std;

int n, m, f[N], vis[N], p[N], c[N][N], fac[N], inv[N], ans;
char s[N];

template < typename T >
inline T read()
{
	T x = 0, w = 1; char c = getchar();
	while(c < '0' || c > '9') { if(c == '-') w = -1; c = getchar(); }
	while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return x * w;
}

int fpow(int x, int y)
{
	int res = 1;
	for( ; y; y >>= 1, x = 1ll * x * x % mod)
		if(y & 1) res = 1ll * res * x % mod;
	return res;
}

bool check(vector<int> res)
{
	queue<int> q;
	for(int i = 0; i <= m; i++) f[i] = vis[i] = p[i] = 0;
	for(int pos = 0, i = 1; i <= m; i++)
	{
		if(s[i] == 'b')
		{
			if(q.size()) f[i] = res[q.front()] - 2, p[q.front()] = 1, vis[i] = 1, q.pop();
		}
		else
			if(pos < res.size())
			{
				if(res[pos] > 1) q.push(pos);
				else p[pos] = 1;
				vis[i] = 1, pos++;
			}
	}
	for(int i = 0; i < res.size(); i++) if(!p[i]) return 0;
	for(int k = 0, i = m; i >= 1; i--)
		if(vis[i])
		{
			if(f[i])
			{
				if(k < f[i]) return 0;
				k -= f[i];
			}
		}
		else k++;
	return 1;
}

void dfs(int u, int l, int r, vector<int> res)
{
	if(!u)
	{
/*		for(auto v : res) printf("%d ", v);
		puts("");
*/		if(!check(res)) return;
/*		for(auto v : res) printf("%d ", v);
		puts("");
*/		int x = 1ll * c[n - l + r - 1][r - 1] * fac[res.size()] % mod, y = 0, z;
		while(res.size())
		{
			y = 0, z = res[res.size() - 1];
			while(res.size() && res[res.size() - 1] == z) y++, res.pop_back();
			x = 1ll * x * inv[y] % mod;
		}
		ans = (ans + x) % mod;
		return;
	}
	while(1)
	{
		dfs(u - 1, l, r, res);
		r += 2 * u, l += (l != 0) + (u == 1 ? 1 : 2 * u - 3);
		if(l > n) return;
		res.push_back(u);
	}
}

int main()
{
#ifndef ONLINE_JUDGE
	freopen("cpp.in", "r", stdin);
#endif
	n = read <int> (), m = read <int> (), scanf("%s", s + 1);
	for(int i = 0; i <= 200; i++)
		for(int j = 0; j <= i; j++) c[i][j] = (!j ? 1 : (c[i - 1][j - 1] + c[i - 1][j]) % mod);
	for(int i = (fac[0] = 1); i <= 200; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
	inv[200] = fpow(fac[200], mod - 2);
	for(int i = 199; i >= 0; i--) inv[i] = 1ll * inv[i + 1] * (i + 1) % mod;
	vector<int> res;
	dfs((n + 3) >> 1, 0, 1, res), printf("%d\n", ans);
	return 0; 
}

提出情報

提出日時
問題 F - ColoringBalls
ユーザ WhiteCmile
言語 C++ (GCC 9.2.1)
得点 1100
コード長 2465 Byte
結果 AC
実行時間 203 ms
メモリ 3972 KiB

コンパイルエラー

./Main.cpp: In function ‘bool check(std::vector<int>)’:
./Main.cpp:43:11: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   43 |    if(pos < res.size())
      |       ~~~~^~~~~~~~~~~~
./Main.cpp:50:19: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   50 |  for(int i = 0; i < res.size(); i++) if(!p[i]) return 0;
      |                 ~~^~~~~~~~~~~~
./Main.cpp: In function ‘int main()’:
./Main.cpp:97:45: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   97 |  n = read <int> (), m = read <int> (), scanf("%s", s + 1);
      |                                        ~~~~~^~~~~~~~~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 1100 / 1100
結果
AC × 4
AC × 112
セット名 テストケース
Sample 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt, 1_026.txt, 1_027.txt, 1_028.txt, 1_029.txt, 1_030.txt, 1_031.txt, 1_032.txt, 1_033.txt, 1_034.txt, 1_035.txt, 1_036.txt, 1_037.txt, 1_038.txt, 1_039.txt, 1_040.txt, 1_041.txt, 1_042.txt, 1_043.txt, 1_044.txt, 1_045.txt, 1_046.txt, 1_047.txt, 1_048.txt, 1_049.txt, 1_050.txt, 1_051.txt, 1_052.txt, 1_053.txt, 1_054.txt, 1_055.txt, 1_056.txt, 1_057.txt, 1_058.txt, 1_059.txt, 1_060.txt, 1_061.txt, 1_062.txt, 1_063.txt, 1_064.txt, 1_065.txt, 1_066.txt, 1_067.txt, 1_068.txt, 1_069.txt, 1_070.txt, 1_071.txt, 1_072.txt, 1_073.txt, 1_074.txt, 1_075.txt, 1_076.txt, 1_077.txt, 1_078.txt, 1_079.txt, 1_080.txt, 1_081.txt, 1_082.txt, 1_083.txt, 1_084.txt, 1_085.txt, 1_086.txt, 1_087.txt, 1_088.txt, 1_089.txt, 1_090.txt, 1_091.txt, 1_092.txt, 1_093.txt, 1_094.txt, 1_095.txt, 1_096.txt, 1_097.txt, 1_098.txt, 1_099.txt, 1_100.txt, 1_101.txt, 1_102.txt, 1_103.txt, 1_104.txt, 1_105.txt, 1_106.txt, 1_107.txt, 1_108.txt, 1_109.txt, 1_110.txt, 1_111.txt
ケース名 結果 実行時間 メモリ
0_000.txt AC 9 ms 3916 KiB
0_001.txt AC 2 ms 3780 KiB
0_002.txt AC 2 ms 3920 KiB
0_003.txt AC 193 ms 3968 KiB
1_004.txt AC 2 ms 3844 KiB
1_005.txt AC 6 ms 3864 KiB
1_006.txt AC 4 ms 3808 KiB
1_007.txt AC 2 ms 3844 KiB
1_008.txt AC 4 ms 3864 KiB
1_009.txt AC 3 ms 3844 KiB
1_010.txt AC 4 ms 3900 KiB
1_011.txt AC 2 ms 3800 KiB
1_012.txt AC 2 ms 3916 KiB
1_013.txt AC 2 ms 3808 KiB
1_014.txt AC 5 ms 3964 KiB
1_015.txt AC 2 ms 3960 KiB
1_016.txt AC 4 ms 3840 KiB
1_017.txt AC 2 ms 3776 KiB
1_018.txt AC 2 ms 3916 KiB
1_019.txt AC 3 ms 3844 KiB
1_020.txt AC 2 ms 3776 KiB
1_021.txt AC 3 ms 3828 KiB
1_022.txt AC 3 ms 3848 KiB
1_023.txt AC 3 ms 3844 KiB
1_024.txt AC 2 ms 3960 KiB
1_025.txt AC 2 ms 3920 KiB
1_026.txt AC 2 ms 3852 KiB
1_027.txt AC 2 ms 3848 KiB
1_028.txt AC 2 ms 3900 KiB
1_029.txt AC 3 ms 3804 KiB
1_030.txt AC 2 ms 3804 KiB
1_031.txt AC 6 ms 3804 KiB
1_032.txt AC 4 ms 3864 KiB
1_033.txt AC 3 ms 3808 KiB
1_034.txt AC 3 ms 3864 KiB
1_035.txt AC 3 ms 3848 KiB
1_036.txt AC 4 ms 3920 KiB
1_037.txt AC 3 ms 3868 KiB
1_038.txt AC 3 ms 3920 KiB
1_039.txt AC 3 ms 3808 KiB
1_040.txt AC 3 ms 3852 KiB
1_041.txt AC 5 ms 3852 KiB
1_042.txt AC 5 ms 3848 KiB
1_043.txt AC 6 ms 3848 KiB
1_044.txt AC 4 ms 3908 KiB
1_045.txt AC 5 ms 3844 KiB
1_046.txt AC 4 ms 3852 KiB
1_047.txt AC 6 ms 3804 KiB
1_048.txt AC 5 ms 3940 KiB
1_049.txt AC 4 ms 3960 KiB
1_050.txt AC 5 ms 3916 KiB
1_051.txt AC 4 ms 3920 KiB
1_052.txt AC 5 ms 3920 KiB
1_053.txt AC 6 ms 3920 KiB
1_054.txt AC 6 ms 3784 KiB
1_055.txt AC 5 ms 3852 KiB
1_056.txt AC 5 ms 3784 KiB
1_057.txt AC 4 ms 3852 KiB
1_058.txt AC 15 ms 3856 KiB
1_059.txt AC 11 ms 3972 KiB
1_060.txt AC 14 ms 3968 KiB
1_061.txt AC 18 ms 3924 KiB
1_062.txt AC 24 ms 3872 KiB
1_063.txt AC 12 ms 3808 KiB
1_064.txt AC 12 ms 3924 KiB
1_065.txt AC 14 ms 3964 KiB
1_066.txt AC 11 ms 3856 KiB
1_067.txt AC 20 ms 3872 KiB
1_068.txt AC 22 ms 3792 KiB
1_069.txt AC 16 ms 3816 KiB
1_070.txt AC 18 ms 3856 KiB
1_071.txt AC 20 ms 3924 KiB
1_072.txt AC 21 ms 3780 KiB
1_073.txt AC 22 ms 3856 KiB
1_074.txt AC 19 ms 3856 KiB
1_075.txt AC 16 ms 3780 KiB
1_076.txt AC 32 ms 3784 KiB
1_077.txt AC 33 ms 3852 KiB
1_078.txt AC 23 ms 3924 KiB
1_079.txt AC 27 ms 3852 KiB
1_080.txt AC 21 ms 3868 KiB
1_081.txt AC 29 ms 3856 KiB
1_082.txt AC 34 ms 3852 KiB
1_083.txt AC 28 ms 3852 KiB
1_084.txt AC 20 ms 3792 KiB
1_085.txt AC 50 ms 3788 KiB
1_086.txt AC 51 ms 3860 KiB
1_087.txt AC 52 ms 3860 KiB
1_088.txt AC 50 ms 3924 KiB
1_089.txt AC 52 ms 3968 KiB
1_090.txt AC 49 ms 3860 KiB
1_091.txt AC 52 ms 3856 KiB
1_092.txt AC 51 ms 3812 KiB
1_093.txt AC 47 ms 3856 KiB
1_094.txt AC 123 ms 3928 KiB
1_095.txt AC 111 ms 3876 KiB
1_096.txt AC 92 ms 3928 KiB
1_097.txt AC 87 ms 3856 KiB
1_098.txt AC 106 ms 3792 KiB
1_099.txt AC 117 ms 3852 KiB
1_100.txt AC 123 ms 3852 KiB
1_101.txt AC 112 ms 3856 KiB
1_102.txt AC 91 ms 3816 KiB
1_103.txt AC 190 ms 3924 KiB
1_104.txt AC 203 ms 3856 KiB
1_105.txt AC 126 ms 3856 KiB
1_106.txt AC 125 ms 3792 KiB
1_107.txt AC 169 ms 3812 KiB
1_108.txt AC 187 ms 3872 KiB
1_109.txt AC 190 ms 3856 KiB
1_110.txt AC 188 ms 3856 KiB
1_111.txt AC 122 ms 3784 KiB