Educational Codeforces Round 70 (Rated for Div. 2)



A. You Are Given Two Binary Strings…(思维 + 规律)

原题链接:http://codeforces.com/contest/1202/problem/A


题意: 给两个二进制串 x,y,要求一个 k ,能使得 sk = f(x) + g(y) * 2^k 的二进制结果反转后字典序最小。

思路: 2^k 即是在 y 串的后面添上 k 个0,也就是左移 k 位。因为要求计算后的数字反过来的字典序最小,所以只需要尽量让最后几位变成0。先找到 y 串最后一个 1 所在的位置,再找到 x 串与 y 串右对齐后,在 x 串中,与 y 串最后一个 1 相对应的位置从左往右第一个 1 的位置,这两个 1 之间的距离就是 k 。


Code(C++):

#include <iostream>
using namespace std;
int main(){
    int t;  cin>>t;
    while(t--){
        string s1,s2;
        cin>>s1>>s2;
        int p1,p2;
        int len1=s1.length(),len2=s2.length();
        for(int i=len2-1;i>=0;i--){
            if(s2[i]=='1'){
                p2=i;
                break;
            }
        }
        for(int i=len1-len2+p2;i>=0;i--){
            if(s1[i]=='1'){
                p1=i;
                break;
            }
        }
        cout<<(len1-p1)-(len2-p2)<<endl;
    }
    return 0;
}


D. Print a 1337-string…(数学)

原题链接: http://codeforces.com/contest/1202/problem/D


题意: 构造一串只由 ‘1’,‘3’,‘7’ 组成的字符串,使其 ‘1337’ 子序列(不用连续)数量为 n 。

思路: 构造 ‘13337773333337’ 类型的字符串,使 C(2, m) + k = n。
其中 k 为由 7 构成的1337子序列的个数,也就是中间 ‘7’ 的数量,C(2, m) 为由 3 组成的1337子序列的个数,也就是中间 ‘3’ 的数量。


Code(C++):

#include <iostream>
using namespace std;
int main(){
    int t;  cin>>t;
    while(t--){
        int n;  cin>>n;
        cout<<133;
        int x=1;
        while(x*(x-1)/2<=n) //先确定由3组成的1337子序列的个数
            x++;
        x--;
        for(int i=1;i<=n-x*(x-1)/2;i++) //再确定由7构成的1337子序列的个数
            cout<<7;
        for(int i=1;i<=x-2;i++) //一开始已经输出两个3了
            cout<<3;
        cout<<7<<endl;
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"educational codeforces round 103 (rated for div. 2)"是一个Codeforces平台上的教育性比赛,专为2级选手设计评级。以下是有关该比赛的回答。 "educational codeforces round 103 (rated for div. 2)"是一场Codeforces平台上的教育性比赛。Codeforces是一个为程序员提供竞赛和评级的在线平台。这场比赛是专为2级选手设计的,这意味着它适合那些在算法和数据结构方面已经积累了一定经验的选手参与。 与其他Codeforces比赛一样,这场比赛将由多个问题组成,选手需要根据给定的问题描述和测试用例,编写程序来解决这些问题。比赛的时限通常有两到三个小时,选手需要在规定的时间内提交他们的解答。他们的程序将在Codeforces的在线评测系统上运行,并根据程序的正确性和效率进行评分。 该比赛被称为"educational",意味着比赛的目的是教育性的,而不是针对专业的竞争性。这种教育性比赛为选手提供了一个学习和提高他们编程技能的机会。即使选手没有在比赛中获得很高的排名,他们也可以从其他选手的解决方案中学习,并通过参与讨论获得更多的知识。 参加"educational codeforces round 103 (rated for div. 2)"对于2级选手来说是很有意义的。他们可以通过解决难度适中的问题来测试和巩固他们的算法和编程技巧。另外,这种比赛对于提高解决问题能力,锻炼思维和提高团队合作能力也是非常有帮助的。 总的来说,"educational codeforces round 103 (rated for div. 2)"是一场为2级选手设计的教育性比赛,旨在提高他们的编程技能和算法能力。参与这样的比赛可以为选手提供学习和进步的机会,同时也促进了编程社区的交流与合作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值