next

北京化工大学寒假集训【BUCTOJ】(1)1-6题

只愿长相守 提交于 2021-01-25 11:11:42
1.快速幂 题目描述 求 a 的 b 次方对 p 取模的值,其中 0≤a,b≤10^9 , 0<p≤10^9 输入 三个用空格隔开的整数a,b和p。 输出 一个整数,表示a^b mod p的值。 样例输入 2 3 9 样例输出 8 对于本题,按照以往的思路是直接循环进行乘法,同时,边乘边取模,最终能够得到结果,但是本题由于乘的次数过多导致运算时间过于长,所以要考虑的就是怎样通过改进算法来缩短计算时间 这里就有了快速幂,快速幂的目的就是快速求出幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下: 当幂指数非常大的时候,我们并没有必要一次又一次的反复求,假设我们本来要求2 1024 我们可以依次求得2 2 、2 4 、2 8 、……2 1024 这样,原本需要1024次循环,现在只用了10次,时间也就大大缩短了。 同理我们可以推进到一般情况,b可以拆解为若干不重复的2的次幂的和的形式,即可以用二进制的形式来表示,巧妙的运用位运算或者模运算,可以得到每一位前的系数为0或者1来达到快速幂的目的 # include <bits/stdc++.h> using namespace std ; long long a , b , p ; long long f ( long long a ,

Scrapy实战:爬取http://quotes.toscrape.com网站数据

微笑、不失礼 提交于 2021-01-25 08:38:15
需要学习的地方: 1.Scrapy框架流程梳理,各文件的用途等 2.在Scrapy框架中使用MongoDB数据库存储数据 3.提取下一页链接,回调自身函数再次获取数据 重点:从当前页获取下一页的链接,传给函数自身继续发起请求 next = response.css('.pager .next a::attr(href)').extract_first() # 获取下一页的相对链接 url = response.urljoin(next) # 生成完整的下一页链接 yield scrapy.Request(url=url, callback=self.parse) # 把下一页的链接回调给自身再次请求 站点:http://quotes.toscrape.com 该站点网页结构比较简单,需要的数据都在div标签中 操作步骤: 1.创建项目 # scrapy startproject quotetutorial 此时目录结构如下: 2.生成爬虫文件 # cd quotetutorial # scrapy genspider quotes quotes.toscrape.com # 若是有多个爬虫多次操作该命令即可 3.编辑items.py文件,获取需要输出的数据 import scrapy class QuoteItem(scrapy.Item): # define the fields

CodeForces

痴心易碎 提交于 2021-01-25 04:09:59
题意:给N个点和Q条选项,有三种类型的选项:1.从u到v花费w修建一条路;2.从u到下标区间为[L,R]的点花费w修建一条路; 3.从下标区间为[L,R]的点到u花费w修建一条路。 然后求起点s到其余点的最短路。 如果直接暴力建图,建图本身就会超时。对于区间上的操作,考虑用线段树解决。线段树上的结点本身就能代表一段区间的点,所以在建图时,用树上的结点充当中间结点。(有点网络流的思想?) 因为要建一张有向图,所以图的点到树上结点要连边,反之亦然;但是在一棵线段树上双向连边就不能对所有的点跑最短路了(因为图中的点可能会在树上找到权值为0的回路回到自己)。 所以再建一棵线段树去表示反向连边的关系。 对每个树上结点从N+1开始编号,将其与之维护的区间中的点连一条花费为0的边。每次更新就是用把给定区间[L,R]囊括的所有树上结点与给定的u连边。操作2和操作3分别对应两棵线段树的结点。 #include<bits/stdc++.h> #define lson rt<<1 #define rson rt<<1|1 #define Lson l,m,lson #define Rson m+1,r,rson using namespace std; typedef long long LL; const int maxn = 4e5+ 5 ; const LL INF = (1LL)<< 60 ;

第02章 MySQL的安装与配置

∥☆過路亽.° 提交于 2021-01-24 21:02:02
Windows下安装与配置MySQL5.7   在编辑此文章之时,mysql官方网站提供下载的MySQL5.7版本为 mysql-installer-community-5.7.22.1.msi   MySQL5.722 官方下载页面: 官方下载页面   MySQL5.722 官方下载地址: mysql-installer-community-5.7.22.1.msi   以防官网下载地址失效,下载后的安装文件上传到了百度网盘:     链接:https://pan.baidu.com/s/1aHUPNf4a0bUXkScwdhUTEw 密码:fgin 安装MySQL5.7   1. 双击下载的mysql-installer-community-5.7.22.1.msi文件        2. 打开【License Agreement】(用户许可证协议)窗口,选中【I accept the license terms】(我接受许可协议)复选框,单击【Next】(下一步)按钮。        3. 打开【Choosing a Setup Type】(安装类型选择)窗口,在其中列出了5种安装类型,分别是:     Developer Default:默认安装类型     Server only:仅作为服务器     Client only:仅作为客户端     Full:完全安装   

C语言链表实现

穿精又带淫゛_ 提交于 2021-01-24 15:06:08
在网上找了一个链表实现的例子,不过在一些极端情况下会导致段错误,我稍作修改,以下为代码,如有更好的实现,欢迎推荐: #include<stdio.h> #include < malloc .h> #include <stdlib.h> typedef int ElementType; // 定义数据类型,可根据需要进行其他类型定义 // 链表节点的定义 typedef struct ListNode { ElementType Element; // 数据域,存放数据 struct ListNode* Next; // 指向下一个链表节点 }Node, * PNode; // 函数声明 PNode CreateList( void ); // 声明创建链表函数 void TraverseList(PNode List); // 声明遍历链表函数 void InsertList(PNode List, int pos, int val); // 声明链表插入函数 void DeleteTheList(PNode List); // 声明删除整个链表函数 void DeleteList(PNode List, int pos); // 声明删除链表元素函数 PNode FindList(PNode List); // 声明链表查询函数 // 主函数 int main() { PNode

selenium之京东商品爬虫

橙三吉。 提交于 2021-01-24 14:51:14
# 今日目标 **selenium之京东商品爬虫** 自动打开京东首页,并输入你要搜索的东西,进入界面进行爬取信息 ``` from selenium import webdriver import time class JdSpider(object): def __init__ (self): self.browser = webdriver.Chrome() self.url = ' http://www.jd.com/ ' self.i = 0 # 获取商品 def get_page(self): # 打开京东 self.browser.get(self.url) # 找两个节点 self.browser.find_element_by_xpath( ' //*[@id="key"] ' ).send_keys( ' Python书籍 ' ) self.browser.find_element_by_xpath( ' //*[@id="search"]/div/div[2]/button ' ).click() # 留出时间给页面加载 time.sleep(2 ) # 解析页面 def parse_page(self): # 把下拉菜单拉到底部,执行JS脚本 self.browser.execute_script( ' window.scrollTo(0,document

Android 高级进阶之深入剖析消息机制

∥☆過路亽.° 提交于 2021-01-24 13:00:30
阅读时间:8 分钟 坐稳了没?要开车了哦 写在前边 今天分享的内容是深入剖析 Android 的消息机制,有些人问了,一些功能会用不就行了吗?为什么还要分析底层源码呢?今天小鹿告诉你的是很多开源的项目都已经不需要我们造轮子了,重复造轮子是多么愚蠢的一件事。但是,Android 的底层源码和一些功能的实现让我们学习到底层的模式和逻辑实现。 学编程什么最重要,当然是逻辑思维了,即使你什么功能都能实现,逻辑思维能力差照样啥都干不了。你的思维逻辑能力差,在技术路线上已经决定了你的高度。 Android 的消息机制 Android 的消息机制主要是指 Handlerr 的运行需要底层的 MessageQueue 和 Looper 的支撑。 (1)MessageQueue 的中文翻译是消息队列。以队列的形式对外提供插入和删除工作。虽然叫做消息队列,但是内部存储结构并不是真正的队列,而是以单链表的数据结构来存储消息列表。 (2)Looper 的中文翻译为循环,我们叫它消息循环。由于 MessageQueue 只是一个存储单元,不会去处理消息。而 Looper 确弥补了这个功能,Looper 会以无限无限循环的形式去查找是否有新的消息,有的话就去处理消息,否则就一直等待。 学习思维导图: 以后文章中的思维导图是小鹿给大家精心整理的,这样对每篇分享的文章都有一个清晰地结构,有利于复习和整理。 一

Android 高级进阶之深入剖析消息机制

拈花ヽ惹草 提交于 2021-01-24 12:35:39
阅读时间:8 分钟 坐稳了没?要开车了哦 写在前边 今天分享的内容是深入剖析 Android 的消息机制,有些人问了,一些功能会用不就行了吗?为什么还要分析底层源码呢?今天小鹿告诉你的是很多开源的项目都已经不需要我们造轮子了,重复造轮子是多么愚蠢的一件事。但是,Android 的底层源码和一些功能的实现让我们学习到底层的模式和逻辑实现。 学编程什么最重要,当然是逻辑思维了,即使你什么功能都能实现,逻辑思维能力差照样啥都干不了。你的思维逻辑能力差,在技术路线上已经决定了你的高度。 Android 的消息机制 Android 的消息机制主要是指 Handlerr 的运行需要底层的 MessageQueue 和 Looper 的支撑。 (1)MessageQueue 的中文翻译是消息队列。以队列的形式对外提供插入和删除工作。虽然叫做消息队列,但是内部存储结构并不是真正的队列,而是以单链表的数据结构来存储消息列表。 (2)Looper 的中文翻译为循环,我们叫它消息循环。由于 MessageQueue 只是一个存储单元,不会去处理消息。而 Looper 确弥补了这个功能,Looper 会以无限无限循环的形式去查找是否有新的消息,有的话就去处理消息,否则就一直等待。 学习思维导图: 以后文章中的思维导图是小鹿给大家精心整理的,这样对每篇分享的文章都有一个清晰地结构,有利于复习和整理。 一

Java并发编程之阻塞队列

不问归期 提交于 2021-01-24 01:57:27
作者:海子 原文:http://www.cnblogs.com/dolphin0520/p/3932906.html 使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒(不需要我们编写代码去唤醒)。这样提供了极大的方便性。 本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻塞队列的实现原理,最后给出了一个实际例子和几个使用场景。   一.几种主要的阻塞队列   二.阻塞队列中的方法 VS 非阻塞队列中的方法   三.阻塞队列的实现原理   四.示例和使用场景 若有不正之处请多多谅解,并欢迎批评指正。 一.几种主要的阻塞队列 自从Java 1.5之后,在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个: ArrayBlockingQueue:基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小。并且可以指定公平性与非公平性

Angular6 学习笔记——路由详解

北慕城南 提交于 2021-01-24 01:24:58
angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net/topic/12/post/2 系列目录 (1) 组件详解之模板语法 (2) 组件详解之组件通讯 (3) 内容投影, ViewChild和ContentChild (4) 指令 (5) 路由 路由存在的意义 一般而言,浏览器具有下列导航模式: 在地址栏输入 URL,浏览器就会导航到相应的页面。 在页面中点击链接,浏览器就会导航到一个新页面。 点击浏览器的前进和后退按钮,浏览器就会在你的浏览历史中向前或向后导航。 那么,在angular中,是什么决定上述的行为呢? 对于一个新建的项目而言,只存在一个组件AppComponent,如果不增加其他的组件,意味着所有的行为就将在这一个组件里面完成,这种情况下,单一的组件将无法保存状态的变化,这显然满足不了上面的需求.所以,通常情况下,会如我在 组件通讯 中所写,组件之间呈如下的树形结构: 路由就是连接这些组件的筋络,它也是树形结构的.有了它,就可以在angular中实现上述的导航模式 可以把路由看成是一组规则,它决定了url的变化对应着哪一种状态,具体表现就是不同视图的切换 在angular中,路由是非常重要的组成部分, 组件的实例化与销毁