• Educational Codeforces Round 25 A,B,C,D


    A:链接:http://codeforces.com/contest/825/problem/A

    解题思路:

    一开始以为是个进制转换后面发现是我想多了,就是统计有多少个1然后碰到0输出就行,没看清题意。。

    实现代码:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int m,i,ans=0;
        string s;
        cin>>m;
        cin>>s;
        for(i=0;i<m;i++){
            if(s[i]=='1')
                ans++;
            if(s[i]=='0'||i==m-1){
                cout<<ans;
                ans=0;}
        }
        if(s[m-1]=='0')
            cout<<"0";
        cout<<endl;
        return 0;
    }

    B.Five-In-a-Row

    链接:http://codeforces.com/contest/825/problem/B

    解题思路:

    就是五子棋,问你能否在空白处填充一个x使其成五子,把字符转换为数字,如果要只差一步成五子,只能是四个‘x’和一个‘.’分别赋值,然后暴力遍历就可以了;

    实现代码:

    #include<bits/stdc++.h>
    using namespace std;
    char mp[12][12];
    int id[12][12];
    int main()
    {
        int i,j,k,ans1,ans2,ans3,ans4,ans,ans5;
        memset(id,0,sizeof(id));
        for(i=1;i<=10;i++){
            for(j=1;j<=10;j++){
                cin>>mp[i][j];
                if(mp[i][j]=='X')
                    id[i][j] = 1;
                if(mp[i][j]=='O')
                    id[i][j] = -1;
                if(mp[i][j]=='.')
                    id[i][j] = 0;
            }
        }
        for(i=1;i<=10;i++){
            for(j=1;j<=10;j++){
                if(id[i][j]==1||id[i][j]==0){
                    ans1 = 0;ans2=0;ans3=0;ans4=0,ans5=0;
                    for(k=0;k<5;k++){
                        if(j<=6)
                        ans1+=id[i][j+k];
                        if(i<=6)
                        ans2+=id[i+k][j];
                        if(j<=6&&i<=6)
                        ans3+=id[i+k][j+k];
                        if(i>=5&&j>=5)
                        ans4+=id[i-k][j-k];
                        if(i>=5&&j<=6)
                        ans5+=id[i-k][j+k];
                    }
                    ans = max(ans1,max(ans2,max(ans3,max(ans4,ans5))));
                    //cout<<ans<<endl;
                    if(ans==4){
                        cout<<"YES"<<endl;
                        return 0;
                    }
                }
            }
        }
        cout<<"NO"<<endl;
        return 0;
    }

    C:链接:http://codeforces.com/contest/825/problem/C

    解题思路:

    题目意思有些难懂,要求解决困难,已经解决了k难度的问题,如果待解决的问题ai小于k*2的话可以直接解决,反之需要先达到ai/2,也就是将k不断翻倍直到k*2>=ai.才能解决该问题。而此时已经解决的最大难度为max(k,ai).不断推就行了。看懂题了就很简单了。

    实现代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n,k,i,maxx = -99999999,a[1009],ans=0;
        cin>>n>>k;
        for(i=0;i<n;i++){
            cin>>a[i];
        }
        sort(a,a+n);
       for(i=0;i<n;i++){
            cout<<k<<" "<<a[i]<<endl;
        while(k*2<a[i]){
            k*=2;
            ans++;
        }
        k = max(a[i],k);
       }
       cout<<ans<<endl;
        return 0;
    }

    D.Suitable Replacement

    链接:http://codeforces.com/contest/825/problem/D

    解题思路:

    题目要通过改变?号来求出最大适合性的字符串,那么可以先将'?'的下标存进vector数组里,然后用map记录下确定的值;要使两个字符串最匹配,直接遍历第二个字符串如果其中有和第一个字符串相同的字符,map数组减一下,如果没有相同的,为使匹配度最大直接将'?'改成当前字符就行了。

    实现代码:

    #include<bits/stdc++.h>
    using namespace std;
    map<char,int>mp;
    vector<int>v;
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        string s1,s2;
        int i;
        cin>>s1;
        cin>>s2;
        for(i=0;i<s1.size();i++){
            if(s1[i]=='?')
            v.push_back(i);
            else
            mp[s1[i]]++;
        }
        while(!v.empty()){
            for(i=0;i<s2.size();i++){
                if(mp[s2[i]])
                    mp[s2[i]]--;
                else{
                    s1[v.back()] = s2[i];
                    //cout<<s2[i]<<endl;
                    v.pop_back();
                    if(v.empty())
                        break;
                }
            }
        }
        cout<<s1<<endl;
        return 0;
    }

    ps: D还在等判题,突然被室友拉去打了把lol,打完感觉自己忘了什么,然后没多想直接写题解。。贴代码。。欣赏了一下,打开cf发现re了,发现应该是忘了加个break操作访问越界了,加完过了那组数据然后疯狂wa一组大的数据过不去,心态爆炸,找了一个小时的错误,最后发现把vector数组的数据定义错了,明明是int型,偏偏打成了char型,就这样还过了6个样例,是真的骚,不过最骚的还是自己脑子抽了题写错了还写解题思路写的贼起劲,我果然是个脑残。。。。

  • 相关阅读:
    网址收集
    高德地图根据经纬度转换成地址JS代码demo
    mybatis处理查询map列表属性为null的问题,而导致查询map无该key对象
    java输出流实现文件下载
    java后台生成zip打包文件
    java代码判断图片文件格式, 不是根据文件后缀来判断。
    model对象之setter方法使用,解决去除空格和将数字转成字符串展示方法
    使用mysql触发器脚本,解决流水数据的添加。
    spring测试父类,使用junit-4.4.jar,spring-test.jar
    Eclipse对svn操作切换账号或更换svn地址方法
  • 原文地址:https://www.cnblogs.com/kls123/p/7193833.html
Copyright © 2020-2023  润新知