本文主要是介绍Codeforces Round 935 (Div. 3)------>C. Left and Right Houses,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一,思路:直接从左到右枚举即可,用两个变量来维护左边的0的个数,右边1的个数。这题可能你会把四舍五入看成向上取整导致错误。
二,代码:
#include <iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;void Solved() {int n;cin>>n;string str;cin>>str;vector<int> res;//统计全部的1和0的个数int sum0=0,sum1=0;for(int i=0;i<n;i++){if(str[i]=='0') sum0++;if(str[i]=='1') sum1++;}//特判1号房屋前面的情况,记得要化为小数处理和四舍五入double t1=n*1.0/2;if(sum1>=round(t1)) res.push_back(0);sum0=0;for(int i=0;i<n;i++){//左边零的个数if(str[i]=='0') sum0++;
//右边一的个数if(str[i]=='1') sum1--;double t2=(i+1)*1.0/2,t3=(n-(i+1))*1.0/2;if(sum0>=round(t2)&&sum1>=round(t3)) res.push_back(i+1);}int idx=-1;double mi=1e9;//找距离中间村庄最近的房屋是在哪里for(int i=0;i<res.size();i++){double t=n*1.0/2;if(abs(t-res[i])<mi){idx=res[i];mi=abs(t-res[i]);}}cout<<idx<<endl;}int main()
{int t;cin>>t;//t=1;while(t--) {Solved();}return 0;
}
这篇关于Codeforces Round 935 (Div. 3)------>C. Left and Right Houses的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!