codeforces 673c[补]

本文回顾了一个简单的编程竞赛题目,作者通过实战经历反思了自己的解题思路,并分享了从复杂算法到简单暴力解法的心路历程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BNUZ比赛训练【补】

感觉这道题没写出来。。简直怀疑当天晚上智商是不是-100000。超级暴力大水题。

题目:http://codeforces.com/problemset/problem/673/C
题目大意:
有n个数,可以构成n * (n - 1) / 2个区间,然后让你求1-n这每个数所占有的区间个数。
一个区间,被数量最大的数所占有,如果数量都是等大的话,那就被那个数的值最小的数占有

然后开始不知道哪里脑抽的开始敲。每次看每一位,每一位的前面和后面都扫一次,然后看那个值可以占有的区间。。然后敲完样例过完就死wa在3上了,然后。。心态崩溃,不想敲,赛后几分钟。。依旧照着这个思路想然后。。又想到了组合数学。。往前扫跟往后扫。。还要再排列组合一下。。我的天,越想脑子越炸。。

最终。。回去洗澡的时候又想。不是把区间枚举出来就好了。。然后每次统计的时候记录一下该区间每一个数的数量,然后再用一个mark标记一下当前数量的最小值是多少,然后每次让那个最小值的答案+1就好了。

我曹。我好菜啊。今天早上来到实验室。花了2分钟。。把代码全部重写了一次。1A。。。感觉我昨晚到底经历了什么。。。可能是被C题的排列组合带坏了。。orz

附上不知道为什么脑子抽完回来2分钟敲完的代码。。

/*
@rescoues: codeforces 673C
@date: 2017-3-10
@author: QuanQqqqq
@algorithm: brute force
*/
#include <bits/stdc++.h>

#define MAXN 5005
#define INF 0x3f3f3f
using namespace std;

int num[MAXN],total[MAXN],ans[MAXN],mark[MAXN];

int main(){
    int n,mint,maxt;
    while(~scanf("%d",&n)){
        memset(ans,0,sizeof(ans));
        for(int i = 0;i < n;i++){
            scanf("%d",&num[i]);
        }
        int maxt;
        for(int i = 0;i < n;i++){
            memset(total,0,sizeof(total));
            memset(mark,INF,sizeof(mark));
            maxt = 0;
            for(int j = i;j < n;j++){
                total[num[j]]++;
                mark[total[num[j]]] = min(mark[total[num[j]]],num[j]);
                maxt = max(total[num[j]],maxt);
                ans[mark[maxt]]++;
            }
        }
        for(int i = 1;i <= n;i++){
            if(i != 1){
                printf(" ");
            }
            printf("%d",ans[i]);
        }
        printf("\n");
    }
}

所以说。。我需要解释一下为什么我先掏出了线段树板后,两分钟又删掉了吗。。因为他是区间啊。区间找最大数量的最小值。。但是。再想想他在造区间的时候。时间复杂度已经O(n^2)了。。
于是。。脑子再次一抽的,删掉之后,敲了个前后缀数组。。。想在最短时间内计出最大数量的最小值。。但是有个毛病。就是中间的区间记录不了。。所以感觉脑子有毒。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值