题目链接:contest=0&problem=231">点击打开链接 题意: 求<=n内有多少对素数(a,b)使得a+b也为素数 思路: 我们发现全部素数间隔都是>=2的,且除了2都是奇数.那么: 奇数+奇数 = 偶数. 所以仅仅有一种情况2+素数=素数. 所以打个素数表,看一下有多少个素数和前面那个素数间隔是2的. #include <stdio.h> #include <string.h> #include <iostream>…
题意: 求有多少对质数(a,b)满足a<=b 且a+b也为质数.(a+b<=10^6) Solution: 除了2之外的质数都是奇数,两个奇数的和是偶数,不可能是质数.所以题目就是求差为2的质数对的个数. 先用筛法刷出10^6内的质数,用bool数组标记(int型数组会超内存),然后扫一遍筛出来的质数,统计满足要求的答案就行了. #include <iostream> using namespace std; ; bool f[INF]; ],]; int n, sum, ans;…
#include<bits/stdc++.h>using namespace std;const long long mod = 998244353;typedef const long long ll;vector<long long>p;long long inv(long long x,long long y)//快速幂求逆元模板(以乘代除){    long long r=1;    while(y>0)    {        if(y&1)        …
求1~n内所有数对(x,y),gcd(x,y)=质数,的对数. 思路:用f[n]求出,含n的对数,最后用sum[n]求和. 对于gcd(x,y)=a(设x<=y,a是质数),则必有gcd(x/a,y/a)=1;所以我只要枚举i(设i=y/a),再枚举所有质数 他们乘积的f[i*a]值包括i的欧拉函数值.时间复杂度(n*质数个数) #include<iostream> #include<cstring> using namespace std; const int maxx=1…
求1~n内全部数对(x,y),gcd(x,y)=质数,的对数. 思路:用f[n]求出,含n的对数.最后用sum[n]求和. 对于gcd(x,y)=a(设x<=y,a是质数),则必有gcd(x/a,y/a)=1;所以我仅仅要枚举i(设i=y/a),再枚举全部质数 他们乘积的f[i*a]值包含i的欧拉函数值. 时间复杂度(n*质数个数) #include<iostream> #include<cstring> using namespace std; const int maxx…
洛谷1440 求m区间内的最小值 本题地址:http://www.luogu.org/problem/show?pid=1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个数n,m. 第二行,n个正整数,为所给定的数列. 输出格式: n行,第i行的一个数ai,为所求序列中第i个数前m个数的最小值. 输入输出样例 输入样例#1: 6 2 7 8 1…
洛谷P1440 求m区间内的最小值 ............................................................................... 以上代表我此时的心情,调了一个小时....只因为顺序,维护一个单调递增队列就好了,这里n很大,输出要优化,这才挽救了30分.. #include<bits/stdc++.h> using namespace std; int n,m; ],q[]; int top,tai; void Cin(int…
单调队列,顾名思义是指队列内的元素是有序的,队头为当前的最大值(单调递减队列)或最小值(单调递增序列),以单调递减队列为例来看队列的入队和出队操作: 1.入队: 如果当前元素要进队,把当前元素和队尾元素比较,如果当前元素小于队尾元素,那么当前元素直接进队,如果当前元素大于队尾元素,那么队尾出队,将当前元素和新的队尾再做比较,直到当前元素大于队尾元素或者队列为空.单调队列只能在队尾插入元素,队尾和队头都可以删除元素. 2.出队: 出队直接取队头即可,因为用单调队列就是为了取最值,而队头就是最值.…
洛谷  1440 求m区间内的最小值 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个数n,m. 第二行,n个正整数,为所给定的数列. 输出格式: n行,第i行的一个数ai,为所求序列中第i个数前m个数的最小值. 题解: 偷偷告诉你,我超级喜欢暴力的.所以看到这个题的第一反应,就是打暴力 // luogu-judger-enable-o2 #inclu…
题意: 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和 分析:考虑用状态压缩 , 10给位0~9 , 如果之前出现过了某个数字x ,那就拿当前的状态 st | (1<<x) , 表示这个数字出现了 , 那st的二进制有多少的1 , 就有多少不同的数 , 这里好要考虑前导零的情况 . 个数是解决了 , 但是这里是要每个答案的和 , 贼鸡儿坑 , 经过前面的训练可以知道不可能是在(len==0) 这里判断的了 , 因为是记忆化搜索 , 所…
声明:下面这两个题就不要暴力了,学一学单调队列吧 推荐博文:https://www.cnblogs.com/tham/p/8038828.html 单调队列入门题 P1440 求m区间内的最小值 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个数n,m. 第二行,n个正整数,为所给定的数列. 输出格式: n行,第i行的一个数ai,为所求序列中第i个数前…
题意: 素数41可以写成六个连续素数的和: 41 = 2 + 3 + 5 + 7 + 11 + 13 在小于一百的素数中,41能够被写成最多的连续素数的和. 在小于一千的素数中,953能够被写成最多的连续素数的和,共包含连续21个素数. 在小于一百万的素数中,哪个素数能够被写成最多的连续素数的和? 思路:首先打出100000以内的素数表,然后计算出所有从第一个素数到 j 的和,然后枚举两个端点判断是否符合要求即可 /****************************************…
题意: 给你一个T,是样例的个数,接下来是五个数l1,r1,l2,r2,k  前四个数代表两个区间(l1,r1),(l2,r2)这个题l1=1,l2=1; 取x1属于(1,r1),x2属于(1,r2): 求使得gcd(x1,x2)==k 的(x1,x2)的个数,特别的(1,2)和(2,1)只计算一次: 思路: 他让求gcd等于k的   我们可以让r1,r2都除以k相当于求               取x1属于(1,r1/k),x2属于(1,r2/k): 求使得gcd(x1,x2)==1 的(x…
传送门 思路 由于数据范围很大,所以使用单调队列,和滑动窗口这道题类似 首先第一个数输出\(0\),因为第一个数之前没有数 然后通过样例我们发现,最后一个数并没有派上什么用场,所以循环\(n-1\)轮即可 这里的单调队列是记录的序号,每次输入\(a[i]\),检测它是不是比当前的队尾大,如果比队尾大直接入队,反之与队尾比较(\(r--\))直至比队尾大为止.当长度超过\(m\)时,\(l++\),最后的队首就是答案 代码 #include <iostream> #include <cst…
题目描述 一个含有 \(n\) 项的数列 (\(n≤ 2000000\)),求出每一项前的 \(m\) 个数到它这个区间内的最小值.若前面的数不足 \(m\) 项则从第 \(1\) 个数开始,若前面没有数则输出 \(0\). 输入输出格式 输入格式: 第一行两个数 \(n\),\(m\). 第二行,\(n\) 个正整数,为所给定的数列. 输出格式: \(n\) 行,第 \(i\) 行的一个数 \(a_i\),为所求序列中第 \(i\) 个数前 \(m\) 个数的最小值. 输入输出样例 输入样例…
求m区间内的最小值 题目描述: 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 分析: 读题之后可以发现,这道题就是在求: 给出一个长度为n的序列A,求A中所有长度为m的连续子序列中的最小值 而针对这种问题,单调队列似乎是我们最好的选择. 单调队列,说是队列,却不符合队列"先进先出"的原则,它只是沿用了队列的思想,并具有一定的单调性,拥有一个队列头head和一个队列尾tail,用h…
题目链接:https://cn.vjudge.net/contest/284294#problem/B 题目大意:查询区间内有多少个不相同的数. 具体思路:主席树的做法,主席树的基础做法是查询区间第k大或者第k小的,但是这个地方查询的是区间内不同的数的个数,我们就按照下标建立主席树,对于区间[l,r],我们存储的是区间[l,r]中有多少个不同的数,对于当前的数,如果没有出现过,我们就在第i个位置给他加上,如果已经出现过,我们在建立下一棵主席树的时候,先将之前的这个数的下标对应的值减去1.探后再在…
/** 题目:D - Sigma Function 链接:https://vjudge.net/contest/154246#problem/D 题意:求1~n内约数和为偶数的数的个数. 思路:一个数的约数和为那个数的每个素因子的等比和相乘.如题目所给公式就是等比和化简之后的式子. 那么要判断一个数约数和是否为偶数,可以通过观察它的各个素因子等比和来判断.如果存在某个素因子的等比和为偶数. 那么这个约数和肯定是偶数.否则为奇数. 素因子只有2是偶数,其他都是奇素数. 含素因子2的等比和一定为奇数…
实例: import java.util.*; //求某年到某年有多少天 public class Test{ public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.println("=====求某年到某年有多少天====="); System.out.print("请输入开始年:"); int start = in.nextInt(); //获…
参考:https://www.cnblogs.com/baozou/articles/4481191.html #include <iostream> #include <cstdio> #include <cstring> using namespace std; ; bool prime[N]; void primemap() { memset(prime,true,sizeof(prime)); prime[]=prime[]=false; ;i<N;i++…
题目:经过提炼后, 题目的意思就是问[2,n] 内,不是次方数的数量 ,: 思路: 答案就是 原理是利用容斥,注意n开i次根是向下取整(这题巨卡精度) 这是大神的思路 ,, 我还没有理解, 先放着,等以后在来思考 , 先当模板使用 #include <bits/stdc++.h> #define forn(i, n) for (int i = 0; i < int(n); i++) using namespace std; ; * + ; const long long INF64 =…
题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个数n,m. 第二行,n个正整数,为所给定的数列. 输出格式: n行,第i行的一个数ai,为所求序列中第i个数前m个数的最小值. 输入输出样例 输入样例#1: 6 2 7 8 1 4 3 2 输出样例#1: 0 7 7 1 1 3 说明 [数据规模] m≤n≤2000000 线段树 维护最小值 #inclu…
题意:求区间[l,r]内所有与7无关的数的平方和(取模)定义与7无关的数:                                      1.数字的数位上不能有7                                     2.数字的数位和不能是7的倍数                                     3.数字本身不能是7的倍数分析:状态的保存:1.数位上不能有7: 只需枚举数位的数字的时候跳过7就好 if (i == 7) continue;2.…
Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. For example:Given the below binary tree, 1 / \ 2 3 Return 6. 这道求二叉树的最大路径和是一道蛮有难度的题,难就难在起始位置和结束位置可以为任意位置,我当然是又不会了,于是上网看看大神们的解法,看了很多人的都没太看明白,最后发现了网友Yu's…
连着做了四道畅通工程的题,其实都是一个套路,转化为可以求最小生成树的形式求最小生成树即可 这道题需要注意: 1:因为满足路的长度在10到1000之间才能建路,所以不满足条件的路径长度可以初始化为无穷 2:在求最小生成树的算法中(我用的prime算法)做一次过滤,找距离某个点的最短路径的时候,如果这个路径长度大于1000,那么就没有答案,prime算法课直接返回即可 Description 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来…
题意:给定整数n和r,求区间[1, r]中与n互素的数的个数. 详细见容斥定理 详细代码如下 int solve(int r, int n) { vector<int>p; p.clear(); for(int i = 2; i*i <= n; ++i) { if(n % i == 0) { p.push_back(i); while(n % i == 0) n /= i; } } if(n > 1) p.push_back(n); //可能n也是素数 int sum = 0; f…
题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个数n,m. 第二行,n个正整数,为所给定的数列. 输出格式: n行,第i行的一个数ai,为所求序列中第i个数前m个数的最小值. 输入输出样例 输入样例#1: 复制 6 2 7 8 1 4 3 2 输出样例#1: 复制 0 7 7 1 1 3 说明 [数据规模] m≤n≤2000000 ai​≤3×107…
void Solve(LL n){ ///分解质因数保存结果于p p.clear(); ; i*i<=n; i++) ){ p.push_back(i); ) n/=i; } ) p.push_back(n); } void dfs(LL k,LL t,LL s,LL n){ ///求与n互素个数 if(k==p.size()){ ) ans-=n/s; else ans+=n/s; return; } dfs(k+,t,s,n); dfs(k+,t+,s*p[k],n); } ///主函数内是…
Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. For example:Given the below binary tree, 1 / \ 2 3 Return6. 思路:题目中说明起始节点可以是任意节点,所以,最大的路径和不一样要经过root,可以是左子树中某一条,或者是右子树中某一条,当然也可能是经过树的根节点root的.递归式是应该是这三…
https://www.luogu.org/problemnew/show/P1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个数n,m. 第二行,n个正整数,为所给定的数列. 输出格式: n行,第i行的一个数ai,为所求序列中第i个数前m个数的最小值. 输入输出样例 输入样例#1: 复制 6 2 7 8 1 4 3 2 输出样例#1: 复制…