【题解】CF1788A 题解
CF1788A 题解
思路分析
简单前缀和的题。
直接乘会爆。
观察到数组由 和 组成,而题目要求乘起来。由于 不影响乘积的结果,于是乘积结果看 的个数即可。
但是直接统计又会爆掉。注意到题面的乘积是连续的,于是可以开个前缀和数组 , 记录数组中前 个数中含有多少个 。
之后遍历 到 (第一项和最后一项显然不满足要求)。若 ,输出并退出程序。若全部遍历完程序仍未退出,则代表未找到,输出 。
关键代码
void solve()
{
int n;
cin >> n;
memset(a, 0x0, sizeof(a)); //多测不清空,爆零两行泪
for(int i = 1;i <= n;i++)
{
cin >> a[i];
if(a[i] == 2) sum[i] = sum[i - 1] + 1; //如果是二,统计
else sum[i] = sum[i - 1];
}
for(int i = 2;i < n;i++)
{
if(sum[i] == sum[n] - sum[i]) //如果符合要求
{
cout << i << endl; //输出并退出程序
return;
}
}
cout << -1 << endl; //找不到,输出 -1
}

浙公网安备 33010602011771号