题目:http://www.luogu.org/problem/show?pid=2267

题解:这题略吊。

看了之后发现不能用组合数学直接得出公式,然后如果直接暴力也不知道如何去排除两个颜色序列相同的情况。

然后去膜拜题解

---------------------------------------------------------------------------------------------------

令f[i]表示结尾 i 必选的DIY方法的种数。所有珠子颜色不一样的话:f[i] = f[0] + f[1] + ... + f[i-1]

对于颜色不同的话,假设珠子i颜色为c,颜色c在i之前出现的位置为j,那么在式子:f[i] = f[0] + f[1] + ... + f[i-1] 中,我们多算了f[0] + f[1] + ... + f[j-1]。

所以对于此时的f[i] = f[j] + ... +f[i-1],最后 ans = sum(f[i] , 1 <= i <= n)。

----------------------------------------------------------------------------------------------------

说到这里应该就很明显了,搞个前缀和就行了。

这种与颜色序列有关的题貌似记录一下该颜色上一次出现的位置是个不错的想法?@HH的项链 @采花

代码:

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<algorithm>
#include<queue>
#define for0(i,n) for(int i=0;i<=n;i++)
#define for1(i,n) for(int i=1;i<=n;i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,y,x) for(int i=(y);i>=(x);i--)
#define maxn 500000+100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m,tot,f[maxn],g[maxn],a[maxn],b[maxn],c[maxn],pre[maxn],head[maxn];
inline bool cmp(int x,int y){return a[x]<a[y];}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();m=read();
for1(i,n)a[i]=read(),c[i]=i;
sort(c+,c+n+,cmp);
for1(i,n)
{
if(i==||a[c[i]]!=a[c[i-]])tot++;
b[c[i]]=tot;
}
for1(i,n)
{
pre[i]=head[b[i]];head[b[i]]=i;
}
g[]=f[]=;
for1(i,n)
{
f[i]=g[i-];if(pre[i])f[i]=(f[i]-g[pre[i]-]+m)%m;
g[i]=(g[i-]+f[i])%m;
}
printf("%d\n",g[n]-);
return ;
}

luoguP2267 琪琪的项链的更多相关文章

  1. 我的2013 Q.E.D

    "旧历的年底毕竟最像年底,村镇上不必说,就在天空中也显出将到新年的气象来.灰白色的沉重的晚云中间时时发出闪光,接着一声钝响,是送灶的爆竹:近处燃放的可就更强烈了,震耳的大音还没有息,空气里已 ...

  2. Movies

    码头风云欲望号街车 不可思议的收缩人 The Incredible Shrinking Man (1957) 风之谷 西域威龙 对话 天地无限 现代启示录 黑暗之心 Hearts of Darknes ...

  3. 电够动力足——认识主板上的CPU供电模块

    CPU供电模块有啥用 CPU供电模块从字面上理解,就是专给CPU供电的一个电子元器件组合.因为CPU工作时就跟发动机一样,油(电)提供得稳不稳定.品质高不高就是CPU供电模块干的事情.反过来说,如果C ...

  4. poj 3067 Japan(线段树?,神奇卡时代码,暂未完)

    题目 //暴力的,没什么算法的,被琪琪视为傻逼的代码: //照者学长的神奇幸运卡时代码,虽然能AC,但是中途wa,tle了那么多次,啥也不想说了 //学长威武,能想出sum必须要是—— __int64 ...

  5. [Swust OJ 465]--吴奶奶买鱼(0-1背包+dfs)

    题目链接:http://acm.swust.edu.cn/problem/465/ 还有一道题只是描述不一样,方法一模一样(http://acm.swust.edu.cn/problem/644/) ...

  6. Note_JavaWeb_MyBatis3

    Jar包 mybatis-3.2.8.jar junit4.4.jar log4j-1.2.17.jar 常用类 Resources SqlSession SqlSessionFactory SqlS ...

  7. JavaScript Array 对象方法 以及 如何区分javascript中的toString()、toLocaleString()、valueOf()方法

    1.concat() 2.join() 3.pop() 4.push() 5.reverse() 6.shift() 7.unshift() 8.slice() 9.sort() 10.splice( ...

  8. 根据HTML5的新方法 drag & drop 方法实现表格拖拽实例

    上一次学习了html5的drag和drop方法,传送门  就自己写了个例子加深自己对drag和drop的理解.不过一开始不是很简单,遇到了不少问题.还好网络万能的,什么都能查到,总算完成了. 说明和详 ...

  9. ng-change事件中如何获取$event和如何在子元素事件中阻止调用父级元素事件(阻止事件冒泡)

    闲聊: 今天小颖要实现一个当改变了select内容后弹出一个弹框,并且点击select父元素使得弹框消失,这就得用到阻止事件的冒泡了:$event.stopPropagation(),然而小颖发现,在 ...

随机推荐

  1. json 是什么

    怎么学习一个知识? 首先要提出几个问题,目前认为json是个什么,json是谁创造的,为什么而出现的,但是目前仅有很长时间之前别人直接告诉我的,json用来存数据的,对于使用也忘记的差不多了,所以现在 ...

  2. angularJs 使用中遇到的问题小结【一:关于传参】

    我请教个问题 :我在界面传了一个参数<a ng-click="deleteOrder({{orderOrder}})" class="btn warning-btn ...

  3. Handler 原理分析和使用之HandlerThread

    前面已经提到过Handler的原理以及Handler的三种用法.这里做一个非常简单的一个总结: Handler 是跨线程的Message处理.负责把Message推送到MessageQueue和处理. ...

  4. js基础知识之_函数

    javascript函数 函数概念 将完成某一特定功能的代码集合起来,可以重复使用 白话函数理解-函数就是一个工厂,帮大家实现某一个功能 优点 -时程序更加简洁 -逻辑更有条例 -调用方便 -维护更加 ...

  5. SQL性能优化没有那么神秘

    经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做.很早的时候我在网上看到一位高手写的博客,介绍了SQL优化的问题,从这些内容来看,优化并不都是一 ...

  6. SQL求差集

    数据库环境:SQL SERVER 2008R2 Sql Server有提供求集合差集的函数——EXCEPT.先看看EXCEPT的用法, { <query_specification> | ...

  7. Delphi Excel

    用delphi写excel文件 2007-03-18 21:12 1.引用:      Excel2000, OleServer,Comobj, StdCtrls 2.声明变量:     ExcelA ...

  8. LINQ 101——约束、投影、排序

    什么是LINQ:LINQ 是一组 .NET Framework 扩展模块集合,内含语言集成查询.集合以及转换操作.它使用查询的本机语言语法来扩展 C# 和 Visual Basic,并提供利用这些功能 ...

  9. ios专题 - 多线程非GCD(1)

    iOS多线程初体验是本文要介绍的内容,iPhone中的线程应用并不是无节制的,官方给出的资料显示iPhone OS下的主线程的堆栈大小是1M,第二个线程开始都是512KB.并且该值不能通过编译器开关或 ...

  10. javascript之事件详解2

    1.事件对象: 在触发DOM事件的时候都会产生一个对象. 2.事件对象event: (1).type:获取事件类型 (2).target:获取事件目标 (3).stopPropagation():阻止 ...