zoukankan      html  css  js  c++  java
  • Codeforces Round #619 (Div. 2) A

    ai等于ci时 ci和bi交换 bi等于ci时 ci和ai交换

    ci要么和ai交换 要么和bi交换 不能不换


     

    #include<bits/stdc++.h>
    #define ll  long long
    using namespace std;
    const int N=1e2+5;
    char a[N],b[N],c[N];
    int main(){
        int T;
        ios::sync_with_stdio(false);cin.tie(0);
        cin>>T;
        while(T--){
            cin>>a>>b>>c;
            int n=strlen(a),flag=0;
            for(int i=0;i<n;i++)
            /* if(!(a[i]==b[i]||a[i]==c[i]||b[i]==c[i])){
                 flag=1;
                 break;
             }*/ //ci要么和ai交换 要么和bi交换 不能不换
              {
             //    if(a[i]==b[i]&&b[i]==c[i])continue;这种情况已经包括在下面的判断中了 
                  if(a[i]==c[i]||b[i]==c[i])continue;
                 flag=1;
                 break;
             }
            if(flag)cout<<"NO"<<endl;
             else cout<<"YES"<<endl;
        }
        return 0;
    }

     std

    #include <bits/stdc++.h>
    using namespace std;
    #define oo 1000000000
    #define mod 998244353
    const int N = 500000;
    string a , b , c;
    
    void solve(){
        cin >> a >> b >> c;
        for(int i = 0 ;i < (int)a.size();i++){
            if(c[i] != a[i] && c[i] != b[i]){
                puts("NO");
                return;
            }
        }
        puts("YES");
        return;
    }
    
    int main(){
        int t;
        cin >> t;
        while(t--){
            solve();
        }
        return 0;
    }

    被样例迷惑了好久,k取了和ai=-1相邻的非消失数去重后的平均数

    后来了手造样例 5 6 7 100  显然最大值和最小值的平均数比所有数的平均数更优

    当时应该缕清问题即最小化k到这些相邻的非消失数的距离的最大值   显然可以结合数轴 首先k一定在最小值和最大值之间

    其次对于在k左边的数 k到他们的距离小于等于k到最小值的距离 对于在k右边的数 k到他们的距离小于等于k到最大值的距离

    现在问题变为最小化max{|k-a|,|k-b|} 显然 $k=frac{a+b}{2}$  由于a≤k≤b,|k-a|+|k-b|=b-a为定值 其中一个小了 另一个就大了 所以尽可能使他们相等

    因为b+a可能为奇数,又k为整数 $frac{a+b}{2}$小数部分为0.5 此时|k-a|和|k-b|必不可能相等 k舍弃小数部分或整数部分进1 都能使 |k-a|和|k-b|相差1

    综上比赛时的代码特判全消失的情况 vector存下未消失的数 unique去重 k k±1中取最优的 又1ai109 0k10 将k与1e9和0比较使其在范围内都显得没有必要

    赛时

    #include<bits/stdc++.h>
    #define int  long long
    using namespace std;
    //const int N=e+5;
    const int N=1e5+5;
    int a[N]; 
    signed main(){
        int T;
        ios::sync_with_stdio(false);cin.tie(0);
        cin>>T;
        while(T--){
            int n;
            cin>>n;
            for(int i=1;i<=n;i++)cin>>a[i];
            int m=0;
            int flag=1;
            for(int i=1;i<=n;i++){
                if(a[i]!=-1){flag=0;break;        }
            }
            if(flag){
                cout<<0<<' '<<0<<endl;
                continue;
            }
            /*if(n==2){
                int num=0;
                for(int i=1;i<=n;i++)if(a[i]==-1)num++;
                if(num==1){
                    cout<<0<<' '<<0<<endl;
                    continue;        }
            }*/ 
            for(int i=2;i<=n;i++){
                if(a[i-1]!=-1&&a[i]!=-1)m=max(m,abs(a[i]-a[i-1]));
            }
            vector<int>b;
            int sum=0,tot=0;
            for(int i=1;i<=n;i++)
              if(a[i]==-1){
                  if(i-1>=1&&a[i-1]!=-1)b.push_back(a[i-1]),tot++;
                  if(i+1<=n&&a[i+1]!=-1)b.push_back(a[i+1]),tot++;
              }
            //for(int i=0;i<b.size();i++)cout<<b[i]<<endl;
            sort(b.begin(),b.end());
            tot=unique(b.begin(),b.end())-b.begin();
            //cout<<tot<<endl;
            /*for(int i=0;i<tot;i++)
             sum+=b[i];*/ 
            
             int k=min((b[0]+b[tot-1])/2,1ll*1000000000);
             int k1=min(k,1ll*1000000000);
             int k2=max(1ll*0,k-1);
             int k3=min(1ll*1000000000,k+1);
             int m1=m,m2=m,m3=m;
            for(int i=0;i<tot;i++)
             m1=max(m1,abs(b[i]-k1)),m2=max(m2,abs(b[i]-k2)),m3=max(m3,abs(b[i]-k3));
             if(m1<=m2&&m1<=m3) cout<<m1<<' '<<k1<<endl;
             else if(m2<=m1&&m2<=m3) cout<<m2<<' '<<k2<<endl;
              else if(m3<=m2&&m3<=m2) cout<<m3<<' '<<k3<<endl;
        }
        return 0;
    }

     赛后

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+5;
    int a[N];
    int main(){
        int T;
        ios::sync_with_stdio(false);cin.tie(0);
        cin>>T;
        while(T--){
            int n,ma=0,mi=1e9,ans=0;//ma=-1e9;
            cin>>n;
            for(int i=1;i<=n;i++)cin>>a[i];
            for(int i=1;i<n;i++){//i i+1两项中有一个消失的数 故i<n
            if(a[i]==-1&&a[i+1]!=-1)ma=max(ma,a[i+1]),mi=min(mi,a[i+1]);
            if(a[i]!=-1&&a[i+1]==-1)ma=max(ma,a[i]),mi=min(mi,a[i]);
            //if(a[i]!=-1&&a[i+1]!=-1)ans=max(ans,abs(a[i]-a[i+1]);
    } // cout<<mi<<' '<<ma<<endl; int k=(ma+mi)/2; for(int i=1;i<=n;i++)//得先把消失的数变为k i-1 i两项比较得i>1 { if(a[i]==-1)a[i]=k; if(i>1)ans=max(ans,abs(a[i]-a[i-1])); } cout<<ans<<' '<<k<<endl; } return 0; }

    std1

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <queue>
    #include <set>
    using namespace std;
    #define int long long 
    const int maxn = 200005,mod=1000000007;
    int ans[maxn],a[maxn];
    signed main(){
    
        int T;
        cin>>T;
        while(T--){
            int n;
            cin>>n;
            for(int i=1;i<=n;i++){
                cin>>a[i];
                ans[i]=0;
            }
            int cnt=0,res=0;
            for(int i=1;i<n;i++){
                if(a[i]==-1&&a[i+1]!=-1) ans[++cnt]=a[i+1];
                else if(a[i]!=-1&&a[i+1]==-1) ans[++cnt]=a[i];
                else if(a[i]!=-1&&a[i+1]!=-1) res=max(res,abs(a[i+1]-a[i]));
            }
            sort(ans+1,ans+1+cnt);
            int res2,res3;
            if(cnt==0) res2=0;
            else res2=(ans[cnt]-ans[1])/2;
            if((ans[cnt]-ans[1])%2==1) res2++;//a+b为奇数时,|k-a|和|k-b|不相等 较小的为res2 较大的为res2+1 又得取max 故res++
    
            cout<<max(res,res2)<<" "<<res2+ans[1]<<endl;//(a+b)/2=a+(b-a)/2 这样还能避免a+b溢出int
        }
    
        return 0;
    }

    std2

    #include <bits/stdc++.h>
    using namespace std;
    #define oo 1000000010
    #define mod 1000000007
    const int N = 300010;
    int n , arr[N] ; 
    
    void solve(){
        int mn = oo , mx = -oo;
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&arr[i]);
        }
        for(int i = 0;i<n;i++){
            if(i > 0 && arr[i] == -1 && arr[i - 1] != -1)
                mn = min(mn , arr[i - 1]) , mx = max(mx , arr[i - 1]);
            if(i < n - 1 && arr[i] == - 1 && arr[i + 1] != -1)
                mn = min(mn , arr[i + 1]) , mx = max(mx , arr[i + 1]);
        }
        int res = (mx + mn) / 2;
        int ans = 0;
        for(int i=0;i<n;i++){
            if(arr[i] == -1)
                arr[i] = res;
            if(i)
                ans = max(ans,abs(arr[i] - arr[i - 1]));
        }
        printf("%d %d
    ",ans,res);
    }
    
    
    int main(){
        int t;
        cin >> t;
        while(t--){
            solve();
        }
        return 0;
    }
  • 相关阅读:
    Linux编译安装中configure、make和make install各自的作用
    转载的 Linux下chkconfig命令详解
    MYSQL主从不同步延迟原理分析及解决方案(摘自http://www.jb51.net/article/41545.htm)
    mysql主从延迟(摘自http://www.linuxidc.com/Linux/2012-02/53995.htm)
    http://ninghao.net/video/1554不错的学习网址
    javascript 内置对象和方法
    javascript 函数
    javascript 基础
    css z-index
    css 透明度
  • 原文地址:https://www.cnblogs.com/wyh447154317/p/12307136.html
Copyright © 2011-2022 走看看