AT_arc156_a 题解
LiJinLin_AFO · · 题解
AT_arc156_a 题解
有一点点难度
正文开始
首先,显而易见,当
那么
我们可以用一个数组
-
特判。当只有两个
1 时,要判断这两个1 下标的距离是否大于等于2 。如果是,输出1 ,否则过程不能实现,输出-1 。 -
其余情况。设有
tp 个1 ,因为tp \ge 2 且tp 为偶数,所以在a 数组中,下标1 对应下标3 ,下标2 对应下标4 ,以此类推,都可以被消去。这怎么证明呢?假设这种情况极其不利,上来就是三个1 ,假设a 数组中a_1 = 1 且a_2 = 2 且a_3 = 3 ,即使a_1 和a_2 之间只差了1 ,而a_1 和a_3 在最坏的情况下也相差2 ,其余情况同理。所以,这种情况存在,输出\displaystyle \frac{tp}{2} 。
上代码:
#include<iostream>
#include<string>
using namespace std;
int a[200005];//存储下标
int main(){
int t;
cin>>t;
while(t--){
int n,tp=0;
cin>>n;
for(int i=1;i<=n;i++){
char c;
cin>>c;
if(c=='1') a[++tp]=i;
}//输入并且存储1的下标
if(tp&1){
cout<<"-1\n";
continue;
}//tp为奇数
if(tp==2&&a[2]-a[1]<2){
cout<<"-1\n";
continue;
}//情况1
printf("%d\n",tp>>1);//情况2
}
return 0;
}
注:请勿抄袭!