题目: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. 线性布局LinearLayout和相对布局RelativeLayout 之间的比较

    LinearLayout和RelativeLayout之间: 共有属性:java代码中通过btn1关联次控件android:id="@+id/btn1" 控件宽度android:l ...

  2. c语言学习之基础知识点介绍(二):格式化控制符和变量的补充

    上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...

  3. GCD的一点理解

    大家都知道GCD 有两种队列:一种是串行队列,一种是并发队列.什么是串行队列?串行队列就是队列中的代码块一个一个按顺序执行,每当上一个代码块执行结束后下一个代码块才会执行.打个比方,如果队列是一些首尾 ...

  4. 生产者与消费者(一)---wait与notify

    生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品.解决生产者/消费者问题的方法可分为两类: (1)采用某种机 ...

  5. 24种设计模式--装饰模式【Decorator Pattern】

    装饰模式在中国使用的那实在是多,中国的文化是中庸文化,说话或做事情都不能太直接,需要有技巧的,比如说话吧,你要批评一个人,你不能一上来就说你这个做的不对,那个做的不对,你要先肯定他的成绩,表扬一下优点 ...

  6. 自定义流程gooflow.08 demo在线演示

    一.功能简介 gooflow功能清单1.自定义流程绘制2.自定义属性添加3.支持3种步骤类型 普通审批步骤 自动决策步骤 手动决策步骤 4.决策方式(支持js决策,sql语句决策) 5.审批人员参与方 ...

  7. JavaScript H5 Canvas

    Canvas 由于浏览器对HTML5标准支持不一致,所以,通常在<canvas>内部添加一些说明性HTML代码,如果浏览器支持Canvas,它将忽略<canvas>内部的HTM ...

  8. ExecuteNonQuery()返回值

    查询某个表中是否有数据的时候,我用了ExecuteNonQuery(),并通过判断值是否大于0来判断数据的存在与否.结果与我所设想的很不一致,调试时才发现,其执行后返回的结果是-1,对此我很是不理解, ...

  9. 对于volatile的理解

    哎.要学的东西太多,时间太少.一周的工作下来要总结的东西太多,还处理不完,越积越多.大周末的好想出去玩啊.... 得嘞,废话止于此. 无聊时候乱看网页发现了volatile的一篇文章,以前曾经对vol ...

  10. 手动实现 NSTabViewController 的 Rect Transition 及 Propagate Title-b

    不知为何 我在 OS X 10.11.5 及 Xcode 7.3 的 Storyboard 中设置 Tab View Controller 的 Transition 属性时,Tab View Cont ...