当前位置:编程学习 > C/C++ >>

CF 255C

比赛的时候一开始把这题读错题了,错了两次才发现,然后想了一会,题目要求的那个数列,其实就是第一种情况,全部相等的数,第二种情况两个不同的数 相互出现,
第一种情况好解决,关键是求第二种情况。对于第二种情况只要枚举 n个数中任意两个数所组成的最大可能长度即可。那么就把相同的数的下标(i)分别保存在一个vector里面。然后枚举即可。比赛中最后5分钟提交。。因为某处是k-1写成了K。。跪了= =!! 
 
 
 
[cpp] 
#include <cmath>  
#include <ctime>  
#include <iostream>  
#include <string>  
#include <vector>  
#include <cstdio>  
#include <cstdlib>  
#include <cstring>  
#include <queue>  
#include <map>  
#include <set>  
#include <algorithm>  
#include <cctype>  
#include <stack>  
#include <deque>  
using namespace std;  
typedef long long LL;  
#define eps 10e-9  
#define inf 0x3f3f3f3f  
const int maxn = 5000;  
int b[maxn],a[maxn],c[maxn];  
vector<int > v[maxn];  
int hash[1000100];  
int main(){  
    int n;  int len=0;  
    scanf("%d",&n);  
    for(int i=1;i<=n;i++){  
          scanf("%d",&b[i]);  
          if(!hash[ b[i] ]){  
             v[ ++len].push_back(i);  
             hash[ b[i] ]=len;  
          }  
          else{  
             int cur = hash[ b[i] ];  
             v[cur].push_back(i);  
          }  
    }  
     if(n==1){  
       printf("1\n");  
       return 0;  
    }  
    int ans=0;  
    for(int i=1;i<=len;i++){  
       if(v[i].size()>ans) ans=v[i].size();  
    }   www.zzzyk.com
    for(int i=1;i<=len;i++){  
        for(int j=i+1;j<=len;j++){  
            int k=0, l=0; int temp=1;  
            while(l<v[i].size()&&k<v[j].size()){  
                if(v[j][k]>v[i][l]){  
                   temp++;  
                   l++; k++; if(l==v[i].size()) break;  
                   if(v[i][l]>v[j][k-1]) temp++;  
                   else{  
                       while(v[i][l]<v[j][k-1]&&l<v[i].size()){  
                            l++;  
                       }  
                       if(l<v[i].size())  
                       temp++;  
                   }  
                }  
                else{  
                   k++;  
                }  
            }  
            if(temp>ans) ans=temp;  
        }  
    }  
  
  
    printf("%d\n",ans);  
    return 0;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,