算法
文章平均质量分 61
STEVEN_QDU
这个作者很懒,什么都没留下…
展开
-
codeforces E. Anonymity Is Important 【推断题(线段树|STL)】
E. Anonymity Is Important 【推断 线段树|STL】题意给出若干次询问,当询问类型为1的时候,给出当前病人有病/无病/不确定的判断。首先可以想到用set存储【不确定有病/无病】患者的下表,这样以来,凡是set中未出现的下标,对应的病人都是健康 无病的。关键在于怎么判断set中的患者是有病还是不确定。显然,对于一个【未确定】的患者ppp,如果存在一个区间[a,b][a,b][a,b]使得p∈[a,b]p \in [a,b]p∈[a,b],且[a,b][a,b][a...原创 2022-02-28 11:13:36 · 405 阅读 · 1 评论 -
【acwing1296】 聪明的燕姿(搜索,因数分解)
题目链接:https://www.acwing.com/problem/content/description/1298/题意:我们称形如1+p1+p2+...+pk1 + p^1 + p^2 + ... + p^k1+p1+p2+...+pk是一个关于素数ppp的“素数链”。题目即要求:对于一个数S(<=2e9)S ( <= 2e9)S(<=2e9),能够由多少“素数链”相乘得到。例如题目的样例:S=42S = 42S=42,它可以由(1+2+22)(1+5)(1+2+2^2)(1原创 2022-03-03 10:23:03 · 95 阅读 · 0 评论 -
【CodeForces - 1647D】Madoka and the Best School in Russia(分类讨论,因数分解)
题目链接题意:判断一个数nnn,能否有至少两种方法将其表示为n=a1a2...akn=a_1a_2...a_kn=a1a2...ak(k>=1k>=1k>=1),需要满足对每一个aia_iai都有:ai%d==0a_i \% d==0ai%d==0andai%d2!=0a_i\%d^2 != 0ai%d2!=0题解考虑将nnn形式化分解为:n=dkpn=d^kpn=dkp,其中,p%d!=0p\%d!=0p%d!=0.1、当k=0k = 0k=0或k=1k原创 2022-03-13 19:45:20 · 972 阅读 · 0 评论 -
Tkinter学习笔记
Tkinter是Python的GUI设计的良好组件。下面简单记录他们的功能。1、Label and ButtonLabel主要用于展示内容,其上可以配置颜色,放置字符串(str,textvariable)等操作。Button是用于触发时间,在点击完Button之后,可以在command中设置其激发的函数,完成进一步的功能。import tkinter as tk#创建窗口windows = tk.Tk()windows.title('my windows')windows.geometry原创 2022-05-06 11:05:16 · 275 阅读 · 0 评论 -
2022天梯赛L3-1 千手观音 题解【拓扑排序】
题目链接原创 2022-05-06 09:19:44 · 585 阅读 · 0 评论 -
Lost Arithmetic Progression【Codeforces Round #785 (Div. 2)】
题意给出两个增等差数列B、C,请问有多少个等差数列A,使得A和B的交集是C。特殊地,当A有无限多个,输出-1。思路以下st,d,num,ed分别表示首项,公差,项数,末项。其中,ed = st + (num - 1)ed.1、首先应当判断什么时候不存在这样的A当存在C中的元素不在B中时,A一定不存在。即我们需要判断:是否所有C中元素在B中都有。首先,应当满足C首项大于等于B首项,C末项小于等于B末项。其次,stc应当为stb + kdb。最后,dc应当为db的倍数。以上任一条件不满足,则存原创 2022-05-05 08:51:12 · 317 阅读 · 0 评论 -
最长上升子序列(LIS)的贪心算法
我们知道通过dp的算法可以求出一段序列的最长上升子序列,时间复杂度为o(n^2)。下面来介绍一种o(nlogn)的算法来求LIS。设一段序列的长度为n,我们需要的是一个辅助数组f,长度最长为n,其实际长度是动态的,也表征了最长上升子序列的长度。对于f[i],其存储的是对于已经扫描过的序列中,所有长度为i的上升子序列的最后一个数的最小值。如:有序列1 4 2 3所有长度为2的上升子序列有1 2,1 3.那么f[2] = 2。这样做,可以保证对于同样长度的上升子序列,我们给出的是其尾元素的最小值,那原创 2021-02-02 23:17:16 · 896 阅读 · 0 评论 -
关于若干质数的较好性质【裴蜀定理等】
1、若a与b互质,则a*b与a+b互质2、现在有整数方程:ax+by+cz+.....=t(abc都是整数可正可负,t是整数可正可负)有整数解的充要条件是:gcd(a,b,c)|t(gcd是a、b、c......绝对值的最大公因数)【注意:a b c......全为正数的题目比较常见】3、(2的推论)若a,b,c为正整数,则gcd(a,b,c...) == 1的充要条件是存在x,y,z......(整数),使得ax+by+cz+...... = 1有整数解...原创 2020-10-03 16:30:03 · 285 阅读 · 0 评论 -
【取模注意】AtCoder - abc177_c Sum of product of pairs
题目链接本题题意是对每对数字求乘积,然后对所有乘积求和。容易想到用前缀和去处理,用第i个数乘以【第i+1之后所有数的和】,对每个i这样操作,得到的数再求和,就是最终的答案。但问题在于,数字可能很大,需要取模。【模运算的性质】模运算与基本四则运算有些相似,但是除法例外。其规则如下: (a + b) % p = (a % p + b % p) % p (1) (a - b) % p = (a % p - b % p) % p (2)【注意:两个取模的结果进行相减操作时(易知前原创 2020-09-28 22:38:37 · 395 阅读 · 0 评论 -
51Nod - 1383 -- 将一个数分成2的幂次和
题目链接如题,本题题意很简单,如1 = 1;2 = 1+1, 2 = 2;......但是问题的规模很大,所以本题不能仅仅依靠深搜这种朴素的思路。当然,作为深搜在小规模的模板题,这里给出了深搜的模板做法,尽管不能AC:错误思路(一)#include<iostream>typedef long long int ll;using namespace std;ll ans = 0;int pow[30];int dfs(int cur,int all,int原创 2020-09-22 20:18:08 · 242 阅读 · 0 评论 -
[蓝桥杯][2017年第八届真题]包子凑数 :题解和定理(最大公因数、可表示数的状态转移)
题目链接本题实际上问的是:对于方程ax + by + cz + ...... = Const方程而言(a,b,c...是系数,x,y,z...是变量,Const是常数),对于任意给定的Const,是否存在(非负)整数x,y,z...,使得方程成立。实际上,对于这类整数不定方程,我们有以下性质:1.若存在一对(a,b/a,c/......)互质,那么方程一定有解,且使得成立的x,y,z...有无数多个。其中,x,y,z...的解空间是整数。2.若存在一对(a,b/a,c/......)互质原创 2020-09-12 20:45:25 · 218 阅读 · 0 评论 -
【算法】求最小路的Dijkstra算法和Floyd算法
先行提示:图论题目中有可能两个点之间有直接相连的权值不同的边,一定要取最小值存到a[][]里!A.Dijkstra算法1.数据结构的准备#include<stdio.h>#include<string.h>int a[1000][1000]; //储存从i到j边的长度int dis[1000]; //储存从一条特定边到其他任一边的长度//注意!起点是哪条边,dis[那条边] = 0;int path[1000] ={0};int vis[1000] =原创 2020-08-30 14:11:04 · 189 阅读 · 0 评论 -
[蓝桥杯][基础练习VIP]FJ的字符串(评测网址+AC代码)
原题1、循环strcat法#include <bits/stdc++.h>using namespace std;char res[500000] = {0};int main(){ int n; int len = 0; scanf("%d",&n); for(int i = 1;i <= n;i++){ strcat(res + len + 1,res); res[len] = 'A' + i - 1; if(len == 0) len原创 2020-07-23 14:41:34 · 208 阅读 · 0 评论 -
【位运算】起床困难综合症(包含错误思路点拨)
原题解题思路:顺着做(每个数用数组存)的思路是人脑思路,但是电脑会TLE。我们可以反着来。大概的思路就是先假设是和m、每个门的数的最大值(即max(m,门i))同二进制位数的一个数,它的最高位是1,也就是10000000;然后问电脑:这数运算回去(按照输入的门的顺序,逆着顺序运算回去)在我的m范围之内吗?在,我就得寸进尺,我用11000000试(看是否 <= m);否则用01000000作为ans尝试。原则总是最高位优先,逐渐考虑低位。...原创 2020-07-22 18:40:58 · 287 阅读 · 0 评论 -
[蓝桥杯][2014年第五届真题]分糖果
题目解题报告题意十分简单。第一次写完全模拟,是超时了。因为出现了许多浪费时间的操作。比如a[i] -= a[i]/2(就是a[i]/2)然后a[i-1] += a[i]/2。实际上直接先全部砍半(因为都是偶数),在a[i] += a[i+1]就可以。修正后未超时。AC代码#include <bits/stdc++.h>using namespace std;int a[100];int n;bool judge(){ for(int i = 0;i <.原创 2020-07-12 20:24:49 · 117 阅读 · 0 评论 -
谷歌面试题:扔鸡蛋/摔手机
讲解:https://blog.csdn.net/csdnsevenn/article/details/80971550?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%89%94%E9%B8%A1%E8%9B%8B&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-80971550错误想法1.原创 2020-07-12 19:47:18 · 163 阅读 · 0 评论 -
最短Hamilton路径(代码及知识点)
题目给定一张 n个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数n。接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(记为a[i,j])。对于任意的x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]>=a[x,z]。输出格式输出一个整数,表示最短Hamilton原创 2020-07-10 19:48:17 · 540 阅读 · 0 评论 -
quicksort 快速排序的原理和代码实现
《C语言程序设计-第2版》的解读注意理解“空位”,这里的空位在物理内存上并未空,是我们为了分析问题假设的。因为这样思考的话,我们能很放心大胆地将high指向的错排数据给low指向的“空位”。容易发现,low和high至少有一个指向空位,其中low位置最初指向的是index元素,那么它最初指向的也是个“空位”。空位不断改变。最后low = high的空位就是给index的!代码实现解析//s和e分别以为start下标和end下标#include<iostream&..原创 2020-07-09 17:32:40 · 197 阅读 · 0 评论 -
POJ-1995 Raising Modulo Numbers(快速幂)
背景知识介绍 (a + b) % p = (a % p + b % p) % p (1) (a - b) % p = (a % p - b % p ) % p (2) (a * b) % p = (a % p * b % p) % p (3) a ^ b % p = ((a % p)^b) % p (4) 由%的运算对乘法的性质可知,为了防止溢出,我们可以在实现快速幂的每个中间过程都%。这样得出的结果和最终%一次一样,但这样是防止溢出的!快速幂的代码实现.原创 2020-07-09 15:49:51 · 202 阅读 · 0 评论 -
UVA - 133 The Dole Queue(救济金发放)
题目:为了缩短领救济品的队伍,NNGLRP决定了以下策略:每天所有来申请救济品的人会被放在一个大圆圈,面朝里面。选定一个人为编号 1 号,其他的就从那个人开始逆时针开始编号直到 N。一个官员一开始逆时针数,数 k 个申请者,然后另一个官员第 N 个始顺时针方向数 m 个申请者,这两个人就出圆圈。如果两个官员数的是同一个人,那个人则出圈,如果选了两个不同的人,则先输出第一个第一个官员数出的那个人,然后2个官员再在剩下的人里面继续选直到没人剩下来,注意两个被选 中的人是同时走掉的,所以就有可能两个官员选中一原创 2020-07-08 21:39:58 · 140 阅读 · 0 评论 -
【algorithm】next_permutation的使用
注意点:1、应用对象:数组2、注意:为了产生正常的排列,应该保证在数组内的数字从a[0]到a[i]递增3、使用模板:Eg1. int a[4]={0,1,2,3},s,i,cnt=0; do { }while (next_permutation(a,a+4));//这样包括源排列#include<stdio.h>#include<algorithm>using namespace std;int main()...原创 2020-05-20 16:44:16 · 176 阅读 · 0 评论