zoukankan      html  css  js  c++  java
  • 洛谷P1360 [USACO07MAR]黄金阵容均衡题解

    题目

    不得不说这个题非常毒瘤。

    简化题意

    这个题的暴力还是非常好想的,完全可以过(50\%)的数据。但是(100\%)就很难想了。

    因为数据很大,所以我们需要用(O(sqrt n))的时间求出每个时间的前面第一个跟它满足均衡区间的时间。

    此时我们会很快速的想到(Hash)(Map),他们的时间复杂度是小于(O(sqrt n)的)所以满足要求,因此一般看到寻找相同得值的时候,最好还是想想怎么优化吧

    (Code)

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <map>
    #include <vector>
    using namespace std;
    int n, m, a, ans;
    map <vector <int>, int>dp;//表示每个数组所对应的第一次出现的天数。 
    signed main()
    {		
        scanf("%d%d", &n, &m);
        vector <int> sum(m + 3);//sum[j]表示j这个数的能力值和1这个数的能力值差值。 
        dp[sum] = 0;
        for (int i = 1; i <= n; i++)
        {
            scanf("%d", &a);
            for (int j = 1; j <= m; j++)	
            	if (a & (1 << (j - 1))) 
            		sum[j]++;
            if (a % 2 == 1)//如果该能力提升数字增加了一这个数,那所有sum值都减少1。 
            	for (int j = 1; j <= m; j++)//这里用来保证状态有可能会有重复的,	
            		sum[j]--;
           for (int i = 1; i <= m; i++)	
            	printf("%d ", sum[i]);
        	if (dp.count(sum)) 
    			ans = max(ans, i - dp[sum]); 
    //			printf("%d %d
    ", i, dp[sum]);               
    		else dp[sum] = i;
        }
        printf("%d", ans);
    }	
    /*
    7 3
    7
    6
    7
    2
    5
    4
    2
    */
    
  • 相关阅读:
    URL
    VI,CI,UI
    ubuntu优化使用
    Django入门之自定义页面
    python3 连接SQLserver
    Python3 捕捉异常
    python3 异常处理
    Django入门
    较大型站立会议(交付前两天)--张永组-2014-04-15
    站立会议-2014-04-14
  • 原文地址:https://www.cnblogs.com/liuwenyao/p/10245413.html
Copyright © 2011-2022 走看看