摘要:
模拟题就是有坑!!!!见代码注释题意:Alice开了家月饼店,现有2500笔订单,订单包括某小时(2000年1月1日0点算第1个小时的开始)和需要的月饼数量。然后给你前100000小时的信息,包括第i个小时做1个饼的花费cost[i]。然后给你月饼的保质期T(说明订单i只能买[order[i].hour-T , order[i].hour]这个区间生产的饼)和保存1小时的花费S,让你求最小的花费满足所有订单。分析:首先要把订单的时间转化成自2000年1月1日0点开始的第几小时,由于最多100000小时,所以最大到2012年的样子。然后维护一个最小值的单调队列。//#pragma comment 阅读全文
摘要:
模拟题一般要考虑情况的!将走一步可能走出范围或者吃掉红方的一个棋子;将帅直线且中间无子的时候,帅可以直接冲将;卡马脚的时候,马不能往跳那个方向跳。//#pragma comment(linker, "/STACK:102400000")#include#include#include#include#include#include#include#include#include#include#include#include#define tree int o,int l,int r#define lson o=1&&xx=4&&yy< 阅读全文
摘要:
这个题刚看完题,觉得应该很难!但仔细想想还是应该有思路的(虽然确实挺难的)题意:在2012年腾讯编程马拉松比赛中,吉哥解决了一道关于斐波那契的题目,这让他非常高兴,也更加燃起了它对数学特别是斐波那契数的热爱。现在,它又在思考一个关于斐波那契的问题: 假如我们现在已知斐波那契数是1,1,2,3,5,8,13,21,34,55,89... 由于吉哥特别喜欢斐波那契数,它希望每个数中都包含斐波那契数,比如说130,其中包含了13,或者5534包含了55和34,只要数位中含有至少一个斐波那契数就是吉哥想要的数。但是这种数实在太多了,于是它去掉那些仅仅含有小于10的斐波那契数的数,比如说1,仅仅含有.. 阅读全文
摘要:
题意:给n个01字符串,求区间[x , y]中有多少个数写成BCD码后不包含以上01串。分析:先用01字符串建立AC自动机(注意标记危险结点),然后DP。dp[i][s]表示扫描前i位后有多少个数会到达自动机的结点s.注意:1.前导0的问题:不能转化成二进制在数位dp(否则处理不了前导0),安十进制进行数位dp!2.d[u][sub][zero]的sub是从n->0,不是从0->n(sub表示还剩几位) Orz。。。//#pragma comment(linker, "/STACK:102400000")#include#include#include#incl 阅读全文
摘要:
std::bitset是STL的一部分,准确地说,std::bitset是一个模板类,它的模板参数不是类型,而整形的数值(这一特性是ISO C++2003的新特性),有了它我们可以像使用数组一样使用位。下面看一个例子:#includestd::bitset bs;//它是一个模板,传递的参数告诉编译器bs有8个位。我们接着看上面的代码,通过上面两行的代码我们得到一个bitset的对象bs,bs可以装入8个位,我们可以通过数组的下标运算符来存取:bs[0]=1;//把第0位设置为1bs[3]=true;//把第3位设置为1,因为true可以转换为1bs[7]=0;//这个大家都明白了bitset 阅读全文
摘要:
题目大意:给出一个字符串和若干个单词,问这些单词在字符串里面出现了多少次。单词前面为0表示这个单词可重叠出现,1为不可重叠出现。分析:可重叠出现的单词可以直接用ac自动机就解决。至于不可重叠的单词,可以用一个数组来记录下每个这种单词上一次出现的位置,假如当前得到这个单词的位置和上一次的位置之间足够放下一个单词(即两个位置的坐标差大于等于单词长度)时才算一次,具体的可以看程序。//#pragma comment(linker, "/STACK:102400000")#include#include#include#include#include#include#include 阅读全文
摘要:
题意:给出n个字符串,以及每个字符串的权值,求权值最大,字符串长度不超过m,最短且字典序最小的字符串。//#pragma comment(linker, "/STACK:102400000")#include#include#include#include#include#include#include#include#include#include#include#include#define tree int o,int l,int r#define lson oq; for(int c=0; cans)//先保证值最大 { ans=max(ans... 阅读全文
摘要:
求一个串至少包含k个给定的串的方案数(k个串可相互覆盖-所以只能用AC自动机了)状态压缩使每个串唯一(1#include#include#include#include#include#include#include#include#include#include#include#define tree int o,int l,int r#define lson o q;//保存的节点下标 f[0]=0; for (int c=0; c>1)+(x&1));}int dp(int u,int sub,int num){ if(sub==n) return bit... 阅读全文
摘要:
问你长度为1~N的串中包含了模式串的串总共有几个(先求出总共小于L的单词数(26^1+26^2+26^3+...26^L)..然后再减去不包括所给字符串的单词)答案要模2^64,直接用unsinged __int64!!!!算法:AC自动机+二分求等比矩阵和+二分求等比数列和(ps:等比矩阵求和(或等比数列),有经典算法,假定原矩阵为A,阶数为n,那么构造一个阶数为2n的矩阵,如下| AE |其中O代表O矩阵,E代表单位矩阵,这样,求出的K次矩阵的右上n子矩阵正好是| OE |等比矩阵的K项和,这种构造法比我实现的两次二分快了4倍左右。这里有个错误要注意...求出K次矩阵的右上子矩阵应该是K- 阅读全文
摘要:
//#pragma comment(linker, "/STACK:102400000")#include#include#include#include#include#include#include#include#include#include#include#include#define tree int o,int l,int r#define lson o q;//保存的节点下标 f[0]=0; for (int c=0; c<M; ++c ) { int u=ch[0][c]; if(u)//不需要优化的else { ... 阅读全文