zoukankan      html  css  js  c++  java
  • Codeforces Round #634 (Div. 3) E —Three Blocks Palindrome 思维

    补题
    参考:https://blog.csdn.net/weixin_45750972/article/details/105523046

    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int N = 210, M = 2e5+10;
    //a[j,i]
    //在前i个数字中,数字j出现在了多少次
    int a[N][M];
    void solve()
    {
    	//存每个数字 出现的位置
    	vector<int>p[210];
    	int n;
    	int x;
    	cin >> n;
    	for(int i = 1; i <= n; i++)
    	{
    		cin >> x;
    		for(int j = 1; j <= 200; j++)
    			a[j][i] = a[j][i-1] + (x == j);
    		p[x].push_back(i);
    	}
    	int ans = 0;
    	//枚举每个数字 
    	for(int k = 1; k <= 200; k++)
    	{
    		//只取一个相同的 
    		ans = max(ans, (int)p[k].size()); 
    		//把当前数字分到左右两边 
    		for(int i = 1; i <= (p[k].size() / 2); i++)
    		{
    			//从左边数,数字k出现的第i次的位置
    			//从右边数,数字k出现的第i次的位置 
    			int l = p[k][i-1] + 1, r = p[k][p[k].size() - i] - 1;
    			//找这中间出现次数最多的数字的次数 
    			for(int j = 1; j <= 200; j++)
    			{
    				int x = a[j][r] - a[j][l-1];
    				ans = max(ans, i*2 + x);
    			}
    		}
    	}
    	cout << ans << endl;
    }
    int main()
    {
    	int t;
    	cin >> t;
    	while(t --)
    		solve();
    	return 0;
    }
    
  • 相关阅读:
    Alpha冲刺Day5
    Alpha冲刺Day4
    Alpha冲刺Day3
    团队作业——随堂小测
    Alpha冲刺Day2
    Alpha冲刺Day1
    团队项目需求分析
    结对项目第二次作业
    Linux中exec命令相关
    .lib和.dll文件
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12712339.html
Copyright © 2011-2022 走看看