zoukankan      html  css  js  c++  java
  • Codeforces 940D

    题意略。

    这道题目在比赛的时候怎么想也没想明白,后来看了别人的题解才顿悟,可以说很辣鸡了。

    只有b[i - 1],b[i - 2],b[i - 3],b[i - 4]相等的时候才能对答案产生限制,否则全部都会成为第三种情况。

    那么现在就有00000,00001,11110,11111这4种情况了。

    1.00000可知这种状态来源于第三种情况,那么说明第二种状况的第一个条件是错的。

    2.00001可知这种状态来源于第二种情况,那么说明第二种状况的两个条件都是对的。

    3.11110可知这种状态来源于第一种情况,那么说明第一种情况的两个条件都是对的。

    4.11111可知这种状况来源于第三种情况,那么说明第一种情况的第一个条件是错的。

    详见代码:

    #include<bits/stdc++.h>
    #define maxn 100010
    #define INF 1e9
    using namespace std;
    
    char b[maxn];
    int a[maxn];
    int l,r,n;
    
    int getmax(int l,int r){
        int ret = -INF;
        for(int i = l;i <= r;++i){
            ret = max(a[i],ret);
        }
        return ret;
    }
    int getmin(int l,int r){
        int ret = INF;
        for(int i = l;i <= r;++i) ret = min(ret,a[i]);
        return ret;
    }
    
    int main(){
        scanf("%d",&n);
        for(int i = 1;i <= n;++i) scanf("%d",&a[i]);
        scanf("%s",b + 1);
        l = -INF,r = INF;
        for(int i = 5;i <= n;++i){
            if(b[i - 1] == '0' && b[i - 2] == '0' && b[i - 3] == '0' && 
            b[i - 4] == '0'){
                int maxx = getmax(i - 4,i);
                if(b[i] == '0') l = min(l,maxx);
                else l = max(l,maxx + 1);
            }
            else if(b[i - 1] == '1' && b[i - 2] == '1' && b[i - 3] == '1' && 
            b[i - 4] == '1'){
                int minn = getmin(i - 4,i);
                if(b[i] == '0') r = min(r,minn - 1);
                else r = max(r,minn);
            }
        }
        printf("%d %d
    ",l,r);
        return 0;
    }
  • 相关阅读:
    JSON对象和字符串之间的相互转换
    Loadrunner 运行场景时:missing newline in XXX.dat 错误解决
    linux grep详解
    Object 保存到文件中
    'libxml/tree.h' file not found
    具有相同值的不同字符串常量在内存中是分开存储的
    为右键添加快速进入CMD的选项,Win7更简单
    iOS KVO & KVC
    南阳数乌龟——递归超时
    LibSVM笔记系列(3)——初学移植libsvm的C/C++版本
  • 原文地址:https://www.cnblogs.com/tiberius/p/8472845.html
Copyright © 2011-2022 走看看