题意 给你两个字符串p和s 求p在s中出现的次数 很裸的kmp
因为不止匹配一次 每次找到后还要循环j=next[j]的过程 知道到达s的终点
#include
#include
using namespace std;
const int N = 10005, M = 1000005;
int next[N], ans, n;
char p[N], s[M];
void kmp...
分类:
其他好文 时间:
2014-08-14 20:36:39
阅读次数:
248
题意:一共有四个方向,从’@‘出发,找能到达‘.’的个数, #是不能通过的.
策略:广搜。
这道题属于最简单的bfs了。
代码:
#include
#include
#include
using std::queue;
bool vis[25][25];
char s[25][25];
int n, m;
int ans = 0;
struct node{
int x, y;
};
no...
分类:
其他好文 时间:
2014-08-13 22:31:17
阅读次数:
301
#include"stdio.h"
#include"string.h"
#include"vector"
using namespace std;
#define N 11000
const int inf=1<<20;
vectorg[N];
int s,t,n;
int f[N],pre[N],ans[N];
bool vis[N];
int findset(int x)
{
if(...
分类:
其他好文 时间:
2014-08-13 22:30:17
阅读次数:
252
1 筛选法欧拉函数 2 int euler[3000001]; 3 void getEuler() 4 { 5 memset(euler,0,sizeof(euler)); 6 euler[1] = 1; 7 for(int i = 2; i 1)ans -= ans/n...
分类:
其他好文 时间:
2014-08-13 18:39:07
阅读次数:
175
题意:a~z的价值分别是1~26,给出你a~z的个数,问最多能组成价值不同的种类数。
策略:母函数。
典型的母函数题,但是这是属于给你有限个数目的题,要小心。
直接上代码:
#include
#include
int ans[55];
int c1[100], c2[100];
int main()
{
int a[27], t, i, j, k;
scanf("%d", &t);...
分类:
其他好文 时间:
2014-08-13 13:08:36
阅读次数:
193
#include
#include
typedef unsigned long long ll;
const ll MOD = (1ULL<<32);
const int N = 500001;
int t, n;
ll ans[N], frc[N];
void init() {
for (ll i = 1; i < N; i++) {
for (ll j = i; j < ...
分类:
其他好文 时间:
2014-08-13 01:14:05
阅读次数:
218
水题。不过题目很有趣儿。 1 #include 2 3 #define MAXN 100005 4 5 int a[MAXN]; 6 7 int main() { 8 int t, n, m; 9 int i, j, k, tmp, ans;10 11 scanf("...
分类:
其他好文 时间:
2014-08-13 01:00:24
阅读次数:
177
题目链接题意 : 给你N,然后再给M个数,让你找小于N的并且能够整除M里的任意一个数的数有多少,0不算。思路 :用了容斥原理 :ans = sum{ 整除一个的数 } - sum{ 整除两个的数 } + sum{ 整除三个的数 }………………所以是奇加偶减,而整除 k 个数的数可以表示成 lcm(A...
分类:
其他好文 时间:
2014-08-13 00:34:54
阅读次数:
336
题目链接
题意:给定一个整数n,求∑f(i, j)(1
思路:依题意,我们可以得到一个递推式ans[n] = ans[n - 1] + ∑f(n, j)(1
对于∑f(n, j)而言,我们用aj(1 <= j <= n)表示gcd(n/k, j/k)所能取到的值的集合,那么可以得到∑f(n, j) = (n * 1 / a1 + n * 2 / a2 + ... + ...
分类:
其他好文 时间:
2014-08-12 22:07:34
阅读次数:
218
典型的DP题目,增加一个额外要求,输出子序列的开始和结尾的数值。
增加一个记录方法,nothing special。
记录最终ans的时候,同时记录开始和结尾下标;
更新当前最大值sum的时候,更新开始节点。
const int MAX_N = 10001;
long long arr[MAX_N];
int N, sta, end;
long long getMaxSubs()
{
...
分类:
其他好文 时间:
2014-08-12 22:04:14
阅读次数:
320