Atcoder S M T B Programming Contest 2019 E Colorful Hats 2 组合数学

以为这场会很简单...害,只是我以为而已,榜一15分钟AK??太强了吧。。

 

首先看一下题意: 

给你一组序列,这组序列Ai表示 在位置i之前有多少个 和Ai的颜色相同,问有多少种组合方法。

 

题目思路:

暴力找到了规律...原来是组合数学...

首先可以推出 几个性质 

1.每个数最多出现三次,因为只有三种颜色。

2.每个数x的状态必须要与数x-1的颜色相同。

所以说:

0 1

这个样例就是 :因为 0可能会出现3种颜色,那么随之而来的1跟随三种颜色3*1

0 0 1

这个样例:0 0 会有6种选择,而1可以选择与其任何一种颜色相同,所以3 * 2 *2

当前这个数x只与在这之前x-1出现了多少次有关系

0 0 1 2

1*3*2*2*1

因为2的颜色只能1出现过的颜色...这个好懂叭。

然后发现这样还不对...

具体是:0 0 1 1

1 * 3 * 2 *2 *1 最后一个就是 *1 了 因为,前面出现过一个1了,这个颜色就减少了一种选择,因为这个1与前面哪个1颜色相同的话,这个1就不可能是1,应该是2....

所以就可以得到答案,假设当前数为x:

ans*=(在此之前(x-1)出现的次数)- (在此之前 x 出现的次数 )

此时 问题也来了 需要特判一下0

0第一次出现有3种选择

0第二次出现有2种选择

所以再接一遍for:

AC

#pragma GCC optimize(2)
#include<bits/stdc++.h>
typedef long long ll;
const int maxn=1e6+5;
const ll mod=1000000007;
using namespace std;
ll n,m;
ll num[maxn];
ll pos[maxn];//记录num[i] 出现的次数
ll dp[maxn];
int main()
{
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
        scanf("%lld",&num[i]);
    ll ans=1;
    ll zero=3;
    for(int i=1;i<=n;i++)
    {
        if(num[i]==0)
        {
            ans*=zero;
            zero--;
        }
        else
            ans=(ans%mod*(pos[num[i]-1]-pos[num[i]])%mod)%mod;
        pos[num[i]]++;
    }
    printf("%lld\n",ans%mod);
    return 0;
}

/**

**/

 

全部评论

相关推荐

书海为家:实习是成为大厂正式员工很好的敲门砖,看您的简历中有一段实习经历,挺好的。我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己实习时做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 面试被问到不会的问题,你怎么应对? #
141次浏览 2人参与
# 参加完秋招的机械人,还参加春招吗? #
119774次浏览 755人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
17844次浏览 266人参与
# 你觉得大几开始实习最合适? #
134次浏览 2人参与
# 拼多多工作体验 #
52271次浏览 332人参与
# 通信硬件知识分享 #
48071次浏览 537人参与
# 厦门银行科技岗值不值得投 #
9422次浏览 223人参与
# 找AI工作可以去哪些公司? #
15136次浏览 633人参与
# 说说你知道的学历厂 #
390889次浏览 1379人参与
# 从事AI岗需要掌握哪些技术栈? #
13373次浏览 719人参与
# 你做过最难的笔试是哪家公司 #
44658次浏览 636人参与
# 金三银四,你的春招进行到哪个阶段了? #
24138次浏览 295人参与
# 想给25届机械人的秋招建议 #
47667次浏览 251人参与
# AI面会问哪些问题? #
34077次浏览 953人参与
# 中国电信笔试 #
32981次浏览 303人参与
# 我心目中的理想工作是这样的 #
100810次浏览 907人参与
# 携程笔试 #
139510次浏览 839人参与
# 这些公司卡简历很严格 #
94900次浏览 415人参与
# 拼多多集团-PDD笔试 #
37526次浏览 358人参与
# 一人说一个提前实习的好处 #
118425次浏览 711人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
342687次浏览 2190人参与
# 实习越久越好,还是多多益善? #
91478次浏览 359人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务