程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CF 255C

CF 255C

編輯:C++入門知識

比賽的時候一開始把這題讀錯題了,錯了兩次才發現,然後想了一會,題目要求的那個數列,其實就是第一種情況,全部相等的數,第二種情況兩個不同的數 相互出現, 第一種情況好解決,關鍵是求第二種情況。對於第二種情況只要枚舉 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.2cto.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;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved