zoukankan      html  css  js  c++  java
  • C. Bear and Colors

    C. Bear and Colors
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Bear Limak has n colored balls, arranged in one long row. Balls are numbered 1 through n, from left to right. There are n possible colors, also numbered 1 through n. The i-th ball has color ti.

    For a fixed interval (set of consecutive elements) of balls we can define a dominant color. It's a color occurring the biggest number of times in the interval. In case of a tie between some colors, the one with the smallest number (index) is chosen as dominant.

    There are non-empty intervals in total. For each color, your task is to count the number of intervals in which this color is dominant.

    Input

    The first line of the input contains a single integer n (1 ≤ n ≤ 5000) — the number of balls.

    The second line contains n integers t1, t2, ..., tn (1 ≤ ti ≤ n) where ti is the color of the i-th ball.

    Output

    Print n integers. The i-th of them should be equal to the number of intervals where i is a dominant color.

    Examples
    Input
    4
    1 2 1 2
    Output
    7 3 0 0 
    Input
    3
    1 1 1
    Output
    6 0 0 
    Note

    In the first sample, color 2 is dominant in three intervals:

    • An interval [2, 2] contains one ball. This ball's color is 2 so it's clearly a dominant color.
    • An interval [4, 4] contains one ball, with color 2 again.
    • An interval [2, 4] contains two balls of color 2 and one ball of color 1.

    There are 7 more intervals and color 1 is dominant in all of them.

     模拟每个区间,通过if(cnt[a[j]]>cnt[a[best]]||(cnt[a[j]] == cnt[a[best]]&&a[j]<a[best]))  best = j来转移

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 using namespace std;
     6 const int maxn = 5005;
     7 int a[maxn],cnt[maxn],ans[maxn];
     8 void solve(){
     9     int n;
    10     scanf("%d",&n);
    11     for(int i = 1; i<=n; i++) scanf("%d",&a[i]);
    12     for(int i = 1; i<=n; i++){
    13        // ans[a[i]]++;
    14         int best = i;
    15         memset(cnt,0,sizeof(cnt));
    16       // for(int j = i; j<=n; j++) cnt[a[j]] = 0;
    17         for(int j = i; j<=n; j++)
    18         {
    19             cnt[a[j]]++;
    20             if(cnt[a[j]]>cnt[a[best]]||(cnt[a[j]] == cnt[a[best]]&&a[j]<a[best]))  best = j;
    21                 ans[a[best]]++;
    22         }
    23     }
    24         for(int i = 1; i<n; i++)
    25         {
    26             printf("%d ",ans[i]);
    27         }
    28         printf("%d",ans[n]);
    29 
    30 }
    31 int main()
    32 {
    33     solve();
    34     return 0;
    35 }
  • 相关阅读:
    redis---01
    mysql优化-----索引覆盖
    mysql优化-------Myisam与innodb引擎,索引文件的区别
    mysql优化-----多列索引的左前缀规则
    mysql---列的选取原则
    boogo08---中间件
    goroutine pool,WaitGroup,chan 示例
    Android开发 |常见的内存泄漏问题及解决办法
    Android中FragmentPagerAdapter对Fragment的缓存(二)
    Android中FragmentPagerAdapter对Fragment的缓存(一)
  • 原文地址:https://www.cnblogs.com/littlepear/p/5477479.html
Copyright © 2011-2022 走看看