#include<bits/stdc++.h>
using namespace std;
class Node{
public:
char data;
Node*next;
};
void push(Node**head_ref, char data){
Node*new_node = new Node();
new_node->data = data;
new_node->next = NULL;
Node*ptr;
if((*head_ref) == NULL)
*head_ref = new_node;
else{
ptr = *head_ref;
while(ptr->next != NULL)
ptr = ptr->next;
ptr->next = new_node;
}
}
Node*findConnection(Node*head){
Node*curr = head;
while(curr != NULL){
if((curr->data == '0') && (curr->next->data == '1'))
return curr->next;
else
curr = curr->next;
}
}
void printList(Node*head){
while(head != NULL){
cout << head->data << " ";
head = head->next;
}
}
int main()
{
string str;
int t, a, b;
cin >> t;
for(int i = 0; i < t; i++)
{
cin >> a >> b;
cin >> str;
int y = 0;
Node*head = NULL;
int n = str.length();
for(int i = 0; i < n; i++){
push(&head, str[i]);
}
Node*temp = findConnection(head);
while(temp->next != NULL){
int x = 0;
while(temp->next->data != '1'){
x = x+1;
temp = temp->next;
}
if(x != 0)
{
int res = (x * b);
if(res < a)
y = y + b;
else
y = y + a;
}
temp = temp->next;
}
cout << (y + a) << endl;
}
}
问题来了
圆形多米诺骨牌
多米诺骨牌是一系列使用游戏瓷砖玩的瓷砖游戏,通常称为多米诺骨牌。每个多米诺骨牌都是一块矩形瓷砖,一条线将其面分成两个方形端。在多米诺骨牌排列中,每块瓷砖都垂直放置,一排排在另一块后面,这样如果推动一块瓷砖,它们后面对齐的瓷砖也会随之而来。在游戏中,敲击瓷砖会导致整个布置掉落。你决定玩这个游戏,这样你的排列是圆形的,一个在另一个后面,即最后一个瓷砖后面是第一个瓷砖。
布置好圆形多米诺骨牌后,您只需轻按一下即可放下所有东西。不幸的是,Mac(你邻居讨厌的孩子)跑向你的安排并摧毁了它。一些以前站立的多米诺牌现在不见了。现在,如果您点击其中一个瓷砖,则没有必要所有瓷砖都会一个接一个地落成一个完整的圆圈,因为有些瓷砖丢失了。你固执,你想放弃所有剩余的瓷砖。 Mac 将不得不为此付出代价。你在他面前做了一个不可避免的交易:
Mac 将不得不支付卢比。点击单个磁贴。 Mac将不得不支付卢比。将瓷砖放在缺少的地方(空白处)。 帮助 Mac 制定一种方式,让 Mac 支付最低费用并设法丢弃剩余的瓷砖。 给定一个字符串,标记为“1”,其中有瓷砖,而“0”则表示没有瓷砖。帮他省钱。
输入格式
第一行包含一个正整数(1 <=t<= 10^5)——测试用例的数量 测试用例如下: 和空间分开 1 和 0 的字符串
约束
1<=t<=10^5
0<=a,b<=1000
所有测试用例的字符串长度总和不超过 10^5 .
输出格式
一个整数,它是每个测试用例的最低成本。
样本输入 0
3
5 4
1111000101011
1 1
1010101
2 8
1111000101011
样本输出 0
13
3
6
它适用于示例案例。但是当我针对测试用例进行测试时显示分段错误 提前致谢