3972: 你猜猜我是啥题 =.=
题目:
有一个01串,相邻两个不相同的字符可以相消。比如这样01,10。 我们可以用魔法把0改为1,需要代价a。将1改为0代价为b。 问是否能将01串消为空,如果可以,输出最小的代价是多少?不行请输出-1。 输入 第一行为1个t。随后t行每行一个01串,和a,b。串的长度小于等于1000, t<=200,0<a,b<1012 输出 输出最小代价。 样例输入 1 101011 2 3 样例输出 3
12345678910111213141516代码:
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<string> #include<fstream> using namespace std; typedef long long ll; const ll N = 1010; char ss[N]; int main() { ll t, a, b; scanf("%lld", &t); // ofstream in; // in.open("ans.txt"); while(t--) { scanf("%s%lld%lld", ss, &a, &b); //1 0 ll num0 = 0; ll num1 = 0; ll len = strlen(ss); for(ll i=0; i<len; ++i) { if(ss[i] == '0') { num0++; } else { num1++; } } if(num1 == num0) { printf("0n"); // in << 0 << endl; continue; } if(num0>num1 && (num0-num1)%2 == 0) { printf("%lldn", a*(num0-num1)/2); // in << a*(num0-num1)/2 << endl; continue; } if(num1>num0 && (num1-num0)%2 == 0) { printf("%lldn", b*(num1-num0)/2); // in << b*(num1-num0)/2 << endl; continue; } printf("-1n"); // in << -1 << endl; } // in.close(); return 0; }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748