首页 > TAG信息列表 > 1000001

0022:洛谷P2926_Patting Heads S

链接:https://www.luogu.com.cn/problem/P2926 暴力会超时,只有47分。 于是我们要用类似于质数筛的算法去求。 将数据存到桶里,然后如果桶里有数就枚举它的倍数,如果它的倍数也在桶里,用另一个数组将它加上。 上代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 int arr[1

5.30 NOI 模拟

$5.30\ NOI $模拟 高三大哥最后一次模拟考了,祝他们好运 \(T1\)装箱游戏 显然可以将四种字母之间的空缺当做状态枚举 那么这道题就很显然了 #include<bits/stdc++.h> #define MAXN 305 using namespace std; int n; double f[4][MAXN][MAXN][MAXN],a,b,c,d; bool fl[4][MAXN][MAXN

【2022 省选训练赛 Contest 04 A】permutation(容斥)

permutation 题目链接:2022 省选训练赛 Contest 04 A 题目大意 给你一个排列,然后有一些位置告诉你了。 然后问你有多少种可能使得每个位置的数都不是它位置的编号。 思路 不难看出就一个限制条件 \(p_i\neq i\),我们可以容斥,每次是至少有 \(x\) 个位置出现了 \(p_i=i\) 的情况。 然

B. Triangles on a Rectangle(1000)

#include<bits/stdc++.h> using namespace std; int main(){ int n,x,y,a1,b1,c1,d1; int a[1000001],b[1000001],c[1000001],d[1000001]; long long aa,bb,cc,dd,sum; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf(&qu

哈希查找(初入)

 自己的hash的理解比较简单感觉就是类似加密的东西像类似,可能认知有待提高, output Yes. No. #include<stdio.h> #include<string.h> int main() { int n; scanf("%d",&n); while(n--) { getchar(); char a[1000001]; char b[1000001]

CF940E Cashback

Lisa 如果真的要枚举,排序暴力硬做的话肯定会挂掉 那么就是要优化的,显然划分一个2c的序列,答案不回比划分两个c的更优 可以画个图证明一下 而划分成小于c的序列,就相当于划分成一堆1的序列 划分成c-2c的序列呢?显然是不如划分成c和另外一个,肯定不会更差 这样的话就检查划分成c和1就可

P4824 [USACO15FEB]Censoring S

Lisa 很水的kmp小题 思考一下就可以知道,肯定要跑kmp,但是当我们删掉一个串后剩下怎么办 答:从上一次的位置接着匹配 记录一下这个东西就行了 #include<iostream> #include<cstring> #include<iostream> using namespace std; char a[1000100],b[1000100]; int ne[1000100]; int f[

P4211 [LNOI2014]LCA

如果出现某些询问一堆东西的和的时候(如LCA的深度和),我们可以考虑不要把这些东西每一个都全部求出来,而应该考虑合并这些询问然后一次性询问他们的和。(例如用树剖转化为区间加和和区间询问) 具体思路见hzw博客 #include<iostream> #include<cstdio> #include<cstring> #include<algori

洛谷 P3379 【模板】最近公共祖先(LCA)题解(树剖做法)

题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N,M,S 分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−1 行每行包含两个正整数 x,y,表示 x 结点和 y 结点之间有一条直接连接的边(数据保证可以构

2021.8.21 北中暑训

上午,学习了倍增求LCA 例题 看了题目我先是把树剖lca代码打了(因为树剖的代码比较好理解) 代码如下: #include<bits/stdc++.h> using namespace std; int cnt,n,m,s,dd[1000001],zs[1000001],f[1000001],sd[1000001],ss[1000001],maxn,next[1000001],head[1000001],to[1000001]; inli

题目:Fibonacci Again

题目描述: Description There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2). Input Input consists of a sequence of lines, each containing an integer n. (n < 1000000). Output Print the word "yes" if 3 d

【模板】树状数组

题目传送门 较好的博客传送门 #include<iostream> #include<vector> #include<cstdio> #include<algorithm> #include<map> #define INF 0x7f7f7f using namespace std; int n,tree[1000001]={0},a[1000001]={0}; int lowbit(int x){ return (-x)&

1.7编程基础之字符串03:基因相关性

#include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> using namespace std; double num; char a[1000001]; char b[1000001]; char c[1]; int main() { double tot=0; scanf("%lf",&num); gets(c);

P4868 Preprefix sum

Aimee 首先可以知道对于任意一个\(a_i\),我们可以知道他的贡献在\([i,n]\) 那么对于每一次对于\(ss_k\)的查询,贡献是\((k-i+1)*a_i\) 分配一下,贡献是\(a_i*(k+1)+a_i\),分别计算这两个就可以了 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define

【luogu P6091】【模板】原根

【模板】原根 题目链接:luogu P6091 题目大意 多组数据,每次给出 n,求它的所有原根。 为了减少输出,给出一个 d,你只要输出从小到大排之后某些位置的数。 思路 首先对原根不清楚的可以先看看这个: ——>点我<—— 然后不知道怎么求最小原根的看这个: ——>点我<—— 然后一开始你会想着按

【ybt金牌导航6-2-1】【luogu P3201】梦幻布丁 / 启发式合并例题

梦幻布丁 题目链接:ybt金牌导航6-2-1 / luogu P3201 题目大意 有一些颜色块,然后它有时会把所有颜色改成另一种颜色,有时会询问你现在有多少个颜色段。一个颜色段就是一段相同颜色的连续颜色块。 思路 那这个我们可以发现,其实每次更改就是把一些部分合并。 合并了之后,就不会再分开。

快照读的弊端

  本文参考 https://blog.csdn.net/bohu83/article/details/105336004   Mysql的读取分为两种,快照读和当前读。快照读就是解决幻读的关键,但是快照读却有一个致命的问题,就是如果undolog链太长了,会导致一次快照读耗时非常长   示例如下      你看到了,session A先用start

欧拉函数

#define Max 1000001 int euler[Max]; void Init(){ euler[1]=1; for(int i=2;i<Max;i++) euler[i]=i; for(int i=2;i<Max;i++) if(euler[i]==i) for(int j=i;j<Max;j+=i) euler[j]=euler[j]/i*(i-1);//先进行除

【代码超详解】POJ 2478 Farey Sequence(欧拉函数线性打表 + 前缀和)

一、题目描述 二、算法分析说明与代码编写指导 观察,写出递推式 F[n] = F[n - 1] ∪ { i / n | gcd(i, n) = 1 }。可见 |F[n]| = |F[n - 1]| + φ(n),认为 φ(1) = 0。 打表生成 1 ~ 1e6 的欧拉函数的值后,记 S[n] = φ(1) + φ(2) + … + φ(n),求得前缀和。 三、AC 代码(266 m

B2. Books Exchange

#include<bits/stdc++.h> using namespace std; long long t,n,x1,x2,s,j; long long a[1000001]; long long b[1000001],c[1000001]; void dfs(int i) { s++; if(a[i]==j) { c[i]=s; return; } else { dfs(a[i]);

[CSP-S模拟测试]:stone(结论+桶+前缀和+差分)

题目描述 $Cab$有两行石子,每个石子上有一个字母,为$'C''A''B'$中的一个。 一开始,在每行第一个石子上站着一只$lucky$,$Cab$每次可以选择一个字母,使得所站石子上字母为该字母的$lucky$向前走一步,如果此时$lucky$已经到了一行石子的结尾就会掉出去,$Cab$显然不会这么做。 一个数对$(x,y

CF1060D Social Circles

题目描述 现在有N个人,每一个人都不想周围的人坐得离他很近,所以在他的左边至少要放L[i]​张椅子,右边至少要放R[i]​张椅子. 现在他们要坐成若干个圈,请问最少要放多少张椅子. 注意:可以一个人坐在一个圈内.每一个人还需要坐一张椅子.   输入输出样例 输入 31 11 11 1 输出 6

[CSP-S模拟测试]:e(树上主席树)

题目传送门(内部题66) 输入格式 第一行,一个正整数$n$,一个自然数$q$,一个整数$type$。 第二行,$n$个正整数,代表$a_i$。 接下来$n-1$行,每行两个正整数$u$、$v$,代表树中存在一条边$(u,v)$。接下来$q$行,每行两个正整数$r$、$k$,然后$k$个正整数$x_1,x_2,...,x_k$。询问中的$p_i=(x_i−1+la

KMP模板

第二次理解了,一个讲的可以的博客:https://blog.csdn.net/starstar1992/article/details/54913261#commentBox #include<bits/stdc++.h>using namespace std;char s1[1000001],s2[1000001];int next[1000001];void Next(int len2){ next[0]=-1; int k=-1; for(int i=1;i

蓝桥杯----入门训练 Fibonacci数列

问题描述: 算法思想: 代码: #include<iostream> using namespace std; int a[1000001];//存放余数 int main(){ a[1]=a[2]=1; int n,i=3; cin>>n; for(i;i<=n;i++) a[i]=(a[i-1]+a[i-2])%10007; cout<<a[n]<<endl; } 测试结果: