zoukankan      html  css  js  c++  java
  • Codeforces 653C Bear and Up-Down【暴力】

    题目链接:

    http://codeforces.com/problemset/problem/653/C

    题意:

    给定序列,偶数位的数字比两边都大,则成为nice,只可以交换两个数字,问有多少种交换方式使得最后的序列为nice。

    分析:

    比赛的时候找规律,找呀找了好久都没看出来。。。。由于只可以交换一次,交换两个数字,所以最多改变的6个数字的关系。那么可以交换成nice的话,原来不满足的肯定很少,直接把这些数字提出来,然后暴力的和序列每个元素交换一下,看看其余不满足的是否变成满足就好啦~~~

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1500005;
    int t[maxn];
    vector<int>v;
    typedef pair<int, int>pii;
    map<pii, int>vis;
    int n;
    bool judge(int b)
    {
       if(b & 1) {
            if(b < n - 1) return t[b - 1] < t[b] && t[b + 1] < t[b];
            else return t[b - 1] < t[b];
       }
        else if(b > 0 && b < n - 1) return t[b - 1] > t[b] && t[b + 1] > t[b];
        else if(b == 0) return t[b + 1] > t[b];
        else return t[b - 1] > t[b];
    }
    int main (void)
    {
        cin>>n;
        for(int i = 0; i < n; i++){
             cin>>t[i];
        }
        for(int i =0; i < n; i += 2){
            if(i == 0 && t[i] >= t[i + 1]){
                v.push_back(i);v.push_back(i + 1);
            }
            if(i == n - 1 && t[i] >= t[ i - 1]){
                v.push_back(i);v.push_back(i - 1);
            }
            else if(i > 0 && i < n - 1){
                if( t[i] >= t[i + 1]){
                    v.push_back(i);v.push_back(i + 1);
                }
                else if(t[i] >= t[i - 1]){
                    v.push_back(i);v.push_back(i - 1);
                }
                else if( t[i] >= t[i + 1] && t[i] >= t[i - 1]){
                    v.push_back(i);v.push_back(i - 1);v.push_back(i + 1);
                }
            }
        }
    
        int cnt = 0;
        if(v.size() > 10){
            cout<<0<<endl;
            return 0;
        }
        for(int i = 0; i < v.size(); i++){
            for(int j = 0; j < n; j++){
                if(t[j] != t[v[i]]){
                    swap(t[j], t[v[i]]);
                    bool ok = true;
                    for(int k = 0; k < v.size(); k++){
                        if(!judge(v[k]))  ok = false;
                    }
                    if(!judge(j)) ok = false;
                    if(ok){
                 //       cout<<t[i]<<' '<<t[j]<<endl;
                        pii p = pii(min(v[i], j),max(v[i],j));
                        if(!vis[p]){vis[p] = 1; cnt++;}
                    }
                    swap(t[v[i]], t[j]);
                }
            }
        }
    
        cout<<cnt<<endl;
        return 0;
    }
    
  • 相关阅读:
    前端登录,这一篇就够了
    JS 之跨域问题汇总
    一篇搞定(Js异步、事件循环与消息队列、微任务与宏任务)
    在vue-cli@3.X中配置代理解决开发环境的跨域问题的同时解决cookie问题--Cookies 解决方案
    多包管理工具lerna
    js中的事件监听(冒泡和捕获)
    js事件监听/鼠标滚轮/行为/冒泡/键盘的兼容性写法
    详解clientHeight、offsetHeight、scrollHeight
    Css背景渐变
    CSS生成内容
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758715.html
Copyright © 2011-2022 走看看