zoukankan      html  css  js  c++  java
  • 我是不是有点胖了

    ===========19.8.26===============

    qwq.昨晚打了 codeforces 真的是惨不忍睹

    本来下午做了kick start 有点点信心了

    结果1交不上题 2手抖写错 3B一直wa 心态有点炸 还掉分

    contest/1208/problem/B

    题目是  一个区间,让你中间删掉一块使得剩下的都不重复。

    我写的是加长一倍然后求,wa了之后一个半小时都没有跳出来。

    其实呢,加长一倍可以解决这样的问题:对于 1 2 2 2 3 3 4   组成了1 2 2 2 3 [3 4 | 1 2 ]2 2 3 3 4 完美的首位相接了

    但是写法有问题 必须要首位相接才符合情况,题目给的意思和导向的意思都有一点点误导性。

    如果组成 1 1 2 3 4 5  1 1 (单组数据, 还没相接)

    实际上这个是不符合标准的。因为没法通过删掉一段来达到每个都不同。

    如果重点着眼于不重复的1 2 3 4 5 ,实际上只能从中间删掉的话,最后的答案是删掉7个,因为必须保证首尾。

    不知道说什么,总之简单的首尾相连,有这个小弊端。。。 会越过首尾考虑,所以谨慎加长。还不如写个暴力。。

    卡壳了我也不知改怎么办。。。-。-。跳不出思维框架 实际上就像那次校赛 百聊无赖的情况下 。。。。。

    可能还真是题意读错了。。。。。。。 

    看nimphy的代码:(这个set思想挺好的)

    #include<bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    const int maxn=400010;
    int L[maxn],R[maxn],a[maxn],b[maxn],tot,ans;
    int vis[maxn],N;
    int main()
    {
        int A,B,T;
        scanf("%d",&N); ans=N-1;
        rep(i,1,N) scanf("%d",&a[i]),a[i+N]=a[i],b[i]=a[i];
        sort(b+1,b+N+1); tot=unique(b+1,b+N+1)-(b+1);
        rep(i,1,N+N) a[i]=lower_bound(b+1,b+tot+1,a[i])-b;
        rep(i,1,N) {
            int j=i; vis[a[j]]=i;
            while(j+1<=i+N-1&&vis[a[j+1]]!=i){
                j++; vis[a[j]]=i;
            }
            if(i==1||j>=N) ans=min(ans,N-(j-i+1));
        }
        printf("%d
    ",ans);
        return 0;
    }
     
    View Code
  • 相关阅读:
    2.6
    zuoye
    练习1
    练习
    练习
    4
    3
    2
    1
    1.3
  • 原文地址:https://www.cnblogs.com/lx2331/p/11411618.html
Copyright © 2011-2022 走看看