cf1208B B. Uniqueness(1500)

傷城~ 2024-04-18 14:23 196阅读 0赞

该题要逆向思维, 不看删除的, 要看保留的。
讲解

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 2e3+50;
  4. const int inf = 0x3f3f3f3f;
  5. int a[maxn];
  6. map<int, int>p;
  7. set<int>book2;
  8. int main()
  9. {
  10. ios_base::sync_with_stdio(false);
  11. int n;
  12. cin>>n;
  13. for(int i = 1;i <= n;i++)
  14. {
  15. cin>>a[i];
  16. }
  17. int ans = inf;// 初始化答案
  18. int l = 1;
  19. p.clear();
  20. book2.clear();
  21. ans = 333333;
  22. while(l <= n)
  23. {
  24. if(p[a[l]])
  25. {
  26. break;
  27. }
  28. else p[a[l]] = l;
  29. l++;
  30. }
  31. l--;//左面保留部分的上限
  32. ans = n-l;
  33. int r = n;
  34. while(r >= 1)
  35. {
  36. if(book2.count(a[r]))// 如果该数在右半边出现过,且肯定没在左半边出现过
  37. {
  38. ans = min(ans, r-l);//取小 结束
  39. break;
  40. }
  41. else book2.insert(a[r]);// 否则标记一下该数
  42. if(p[a[r]] && l >= p[a[r]])// 如果左右出现重复的, 去掉左面的
  43. {
  44. ans = min(ans, r-l);
  45. l = p[a[r]] -1;
  46. }
  47. r--;
  48. }
  49. cout<<ans;
  50. return 0;
  51. }

发表评论

表情:
评论列表 (有 0 条评论,196人围观)

还没有评论,来说两句吧...

相关阅读

    相关 CF1208C

    CF1208C > 这场杜老师大战tourist的比赛怎么这么多人类智慧题。。。 题意: > 构造一个 $ n \\times n $ 的矩阵,使得该矩阵...

    相关 CF1207B

    CF1207B-Square Filling 题意: > 两个矩阵a,b,已知矩阵b,每次能修改b矩阵中相邻的四个格(b为空矩阵),使b变为a 解法: ...

    相关 CF1208D

    CF1208D 题意; > 给你一个数组,要求支持单点修改和单点查询 解法: > 直接线段树搞一搞就没了。 CODE: includ...

    相关 CodeForces1208A&B

    CodeForces1208A 不得不承认,这题猛地一看吓到我了,吓得我直接看了\\(B\\)题,要不是\\(B\\)也吓到我了我就直接做\\(B\\)了. 打打表,找