CF 1562 C. Rings (思维+模拟)

33 篇文章 0 订阅

链接

题意:

给出你一个01串,让你从中选取两端 [ l 1 , r 1 ] , [ l 2 , r 2 ] [l_1,r_1],[l_2,r_2] [l1,r1],[l2,r2], ( l 1 , r 1 ) (l_1,r_1) (l1,r1)不能同时与 ( l 2 , r 2 ) (l_2,r2) (l2,r2)相等,。要求两个串转化成十进制 f 1 = w ∗ f 2 f1=w*f2 f1=wf2,两个长度大于等于 l e n / 2 len/2 len/2

分析:

首先我们从题意中看出,我们需要找倍数关系,然后我们看0,如果一个数后几位都相等,一个串前面+一个0,那么他俩还相等,如果前几位相等在一个串后面+一个0那么,是2倍的关系。
如果没有0出现,那么我们只需要截取相同长度的1即可,这样他们是相等的。

string str;
void solve()
{
    cin>>n>>str;
    str=" "+str;
    for(int i=n;i>n/2;i--){
    	if(str[i]=='0'){
    		cout<<1<<" "<<i<<" "<<1<<" "<<i-1<<endl;
    		return;
    	}
    }
    for(int i=n/2;i>=1;i--){
    	if(str[i]=='0'){
    		cout<<i<<" "<<n<<" "<<i+1<<" "<<n<<endl;
    		return ;
    	}
    }
    cout<<1<<" "<<n-1<<" "<<2<<" "<<n<<endl;
}   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值