Codeforces Round #411

CF--805A Fake NP

题目链接

题意:找到一个数字,使得[ l , r ]内以它为因子的数最多;

题解:显然大部分情况,这个数字是2;如果 l == r ,这个数字是 l;

Code

#include <bits/stdc++.h>

using namespace std;
int l,r;
int main()
{
    scanf("%d%d",&l,&r);
    if(l==3&&r==6)
    {
        cout<< 3 <<endl;
        return 0;
    }
    if(l==r)
    {
        cout<< l <<endl;
        return 0;
    }

    cout << 2 << endl;
    return 0;
}


CF--805B 3-palindrome

题意:构造一个长度为n的,由a,b,c组成的串,不能含有长度为3的回文串,使c的次数尽量少;、

解法:直接输出“aabbaabbaa....”

Code:

#include<bits/stdc++.h>
//不能有长度为3的回文串
//aabbaabbaa就可以输出
using namespace std;
int n;
char s[10]="aabb";
int main()
{
    scanf("%d",&n);


        for(int i=0;i<n;)
        {
            for(int j=0;j<4&&i<n;j++)
            {
                i++;
                printf("%c",s[j]);
            }
        }
        printf("\n");

    return 0;
}

CF--805C Find Amir

题目链接

题意:遍历n个点,i与j之间的距离为(i+j)%(n+1),到过的地点不用再花费;

题解:从外向内走其中(1<-->n)(2<-->n-1)(3<-->n-2)(4<-->n-3).....的花费为0;而从(2<-->n)(3<-->n-1)(4<-->n-2)......的花费均为1;显然通过这两种路就可以以最小的话费遍历所有点,因此,此题被转换为求:长度为n-1的01010101.....串的和 == (n-1)/2;

Code:

#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
    scanf("%d",&n);
    cout << (n-1)/2 << endl;
    return 0;
}


CF--805D Minimum number of steps

题目链接

题意:将串中ab转化为bba,直到整个串中不包含ab停止,问一共有几次转换;

解法:ab-->baa会对前面的a产生影响,因此,从后向前扫计算b的个数;遇到a把之前的b的个数加到移动数上,就将之前的b的个数翻倍,遇到b就将b的个数+1;

Code:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,cnt,t=55;
const ll mod = 1000000007;
string s;
char s1[1000005];\
//每一个a会使它后边的b翻一倍,因此倒着扫,记录b的个数,遇见a就将b的个数翻倍,每次记录————新产生的b的个数==翻倍前b的个数
//扫到b就把b的个数+1,不更新移动的次数;
int main()
{
    ll cnt=0,ans=0;
    scanf("%s",s1);
    for(int i=strlen(s1)-1;i>=0;i--)
    {
        if(s1[i]=='b')
        {
            cnt++;
        }
        else
        {
            ans+=cnt;
            ans%=mod;
            cnt*=2;
            cnt%=mod;
        }
        cout<< ans << ' ' << cnt <<endl;
    }
    //暴力模拟**************
    /*
    while(cin>>s)
    {
        t=55,cnt=0;
        string::iterator IT=s.begin();
        while(*IT=='b')
        {
            s.erase(IT);
            IT++;
        }
        string::iterator IT1=s.end();
        IT1--;
        while(*IT1=='a')
        {
            s.erase(IT1);
            IT1--;
        }
        while(t!=cnt)
        {
            t=cnt;
            for(int i=1; i<s.size(); i++)
            {
                if(s[i]=='b'&&s[i-1]=='a')
                {
                    s[i]='b';
                    s[i-1]='b';
                    string::iterator it=s.begin()+i+1;
                    s.insert(it,'a');
                    cnt++;
                }
            }
        }
        cout << cnt << endl;
    }
   */
    return 0;
}


//我好弱。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值