标签:City Saving int scanf CodeForces tot while 埋雷 引爆
2片雷区要么引爆2次,要么埋雷连起来引爆一次,所以如果埋雷连起来的花费比引爆一次的花费少就埋雷。
#include<iostream>
#include<algorithm>
using namespace std;
int t;
int a, b;
char s[100010];
vector<int> d; //tot表示的区域的长度
int main()
{
scanf("%d", &t);
while(t--)
{
while(!d.empty()) d.pop_back();
scanf("%d %d", &a, &b);
scanf(" %s", s);
//计算2段有雷区域之间的距离
int i = 0, tmp = 0, tot = 0, res = 0; //tot:2段有地雷区域的中间那段区域的个数
while(s[i] == '0') i++;
if(s[i] == 0)
{
cout << 0 << endl;
continue;
}
for(; s[i] != 0; i++)
{
if(s[i] == '0') tmp++;
else if(s[i] == '1' && tmp != 0)
{
d.push_back(tmp);
tmp = 0;
tot++;
}
}
//
sort(d.begin(), d.end());
i = 0;
while(i < d.size())
{
if(d[i]*b < a)
{
tot--;
res += d[i]*b;
}
else break;
i++;
}
res += (tot+1)*a;
cout << res << endl;
}
return 0;
}
标签:City,Saving,int,scanf,CodeForces,tot,while,埋雷,引爆 来源: https://www.cnblogs.com/hucorz/p/14346583.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。