Online Judge

百练 04 简单的整数划分问题

不想你离开。 提交于 2021-02-18 08:27:58
原文地址:http://www.cnblogs.com/wanghetao/archive/2013/11/25/3442192.html 描述 整数划分是一个经典的问题。请写一个程序,完成以下要求. 输入 每组输入是两个整数n和k。(1 <= n <= 50, 1 <= k <= n) 输出 对于输入的 n,k; 第一行: 将n划分成若干正整数之和的划分数。 第二行: 将n划分成k个正整数之和的划分数。 第三行: 将n划分成最大数不超过k的划分数。 第四行: 将n划分成若干个 奇正整数之和的划分数。 第五行: 将n划分成若干不同整数之和的划分数。 第六行: 打印一个空行 样例输入 5 2 样例输出 7 2 3 3 3 提示 样例输出提示: 1.将5划分成若干正整数之和的划分为: 5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1 2.将5划分成2个正整数之和的划分为: 3+2, 4+1 3.将5划分成最大数不超过2的划分为: 1+1+1+1+1, 1+1+1+2, 1+2+2 4.将5划分成若干 奇正整数之和的划分为: 5, 1+1+3, 1+1+1+1+1 5.将5划分成若干不同整数之和的划分为: 5, 1+4, 2+3 本题使用动态规划( Dynamic Programming)方法解决 一 求将 n划分为若干正整数之和的划分数 1.

codeforces 293E Close Vertices

心已入冬 提交于 2021-02-16 10:14:30
题目链接 正解:点分治+树状数组。 点分治板子题,直接点分以后按照$w$排序,扫指针的时候把$w$合法的路径以$l$为下标加入树状数组统计就行了。 写这道题只是想看看我要写多久。。事实证明我确实是老年选手了,这种傻逼题写+调竟然用了$40min$。。 1 #include <bits/stdc++.h> 2 #define il inline 3 #define RG register 4 #define ll long long 5 #define lb(x) (x & -x) 6 #define N (300005) 7 8 using namespace std; 9 10 struct edge{ int nt,to,dis; }g[N]; 11 struct data{ int l,w; }st[N]; 12 13 int head[N],vis[N],dis[N],len[N],son[N],sz[N],c[N],l,w,n,num,top; 14 ll ans; 15 16 il int gi(){ 17 RG int x= 0 ,q= 1 ; RG char ch= getchar(); 18 while ((ch< ' 0 ' || ch> ' 9 ' ) && ch!= ' - ' ) ch= getchar(); 19 if (ch== ' - ' ) q=-

[模板] 二分图/网络流相关定义/定理/算法

一曲冷凌霜 提交于 2021-02-14 10:43:02
定义 二分图是图论的一种特殊模型. 若 $G=<V, E>$ 是一个无向图, 如果顶点V可分割为两个不相交的子集 $(X, Y)$, 且图中的每条边 $(i, j)$均满足$i \ in X, j \in Y$, 则称图$G$为一个二分图。 二分图判定 无向图 $G=<V, E>$ 为二分图的充要条件是G的所有回路的长度均为偶数。 反证法/染色法易证 一些概念 记一般图 $G=(V,E)$. 匹配: 在图G的一个子图M中,M的边集E中任意两条边都不依附于同一个顶点, 则称M是一个匹配. 匹配点: 匹配边上的点 匹配数: 匹配 $M$ 的边集 $E$ 的大小 对于一个匹配$M=(V', E')$, $2|E'| = |V'|$ 极大匹配(Maximal Matching): 指匹配 $M$无法通过增加未匹配的边的方式来增加匹配的边数. 最大匹配(Maximum Matching): 所有极大匹配当中边数最大的一个匹配. 完美匹配(完备匹配):一个图中所有的顶点都是匹配点的匹配, 即 $2|M| = |V|$. 完美匹配一定是最大匹配, 但并非每个图都存在完美匹配. 最优匹配(带权最大匹配): 在带有权值边的图中,匹配边上的权值和最大的匹配. 二分图中, 一般X和Y集合顶点个数相同, 最优匹配也是一个完备匹配. 如果个数不相等, 可以通过补点加0边来转化. 一般使用KM算法解决该问题.

上POJ刷题

一笑奈何 提交于 2021-02-12 09:48:41
Online Judge系统 Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交给定问题的多种程序(如C、C++、Pascal、Java)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制、内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态:通过(Accepted)、答案错误(Wrong Answer)、超时(Time Limit Exceed)、超过输出限制(Output Limit Exceed)、超内存(Memory Limit Exceed)、运行时错误(Runtime Error)、格式错误(Presentation Error)、无法编译(Compile Error),并返回程序使用的内存、运行时间等信息。在线测评系统的评判情况如表1所示。 表1 测评系统的评判结果 评判 缩写 说明 Accepted AC 程序通过了所有的测试点,被判为正确 Presentation Error PE 程序的输出结果是正确的

介绍两个刷 SQL 题的网站

六月ゝ 毕业季﹏ 提交于 2021-02-06 05:18:10
今天有朋友在群里问到:在哪可以刷 SQL 题? 其实,要刷 SQL 题,对着《SQL COOKBOOK》、《SQL 经典实例》这两本书,把所有实例从头到尾全部实现一遍就很厉害了。 不过,我想她的本意是想知道有没有关于 SQL 的 Online Judge(在线评测系统,简称 OJ)。相比算法,关于 SQL 的 OJ 确实是少之又少,我目前了解到的就有两个网站:一个是 LeetCode,另外一个是 HackerRank。 LeetCode LeetCode 的 SQL 题库中一共有 119 道题,题目的难度分为简单、中等、困难三个等级。图1 是题目列表,题目编号前面有锁的图标表示只有会员身份才能做题。 图1 LeetCode 上的 SQL 题目列表 任意选择一道可以回答的题目,点击它的链接将进入到题目详情和答题页,如图2 所示:左边栏是题目描述,右边是答题区。 当你把答案写完,点击右下角的“执行代码”按钮,等待它返回结果。如果 SQL 没有出现语法错误,它返回的执行结果包含输入、输出和预测结果。 图2 题目详情页 当检查“输出”项和“预测结果”完全对得上时,就可以提交答案了,系统将给我们反馈 SQL 的整体的执行结果。 图3 提交结果 HackerRank HackerRank 上有 58 道 SQL 题,题目也是分了简单、中等、困难三个级别。 图4 HackerRank 的 SQL

最适合程序员编程刷题的网站

夙愿已清 提交于 2021-02-06 01:06:28
有不少的程序员小伙伴,为了拿到好的offer,采用了大量刷题的方式。 特别是对于新手、进阶的程序员来说,刷题能够让你的编程能力会得到一个质的飞跃。 下面w3cschool给程序员小伙伴们分享6个编程刷题网站: 0、LeetCode Online Judge 据不完全统计在上面被刷过的题可以围绕地球三圈,这个编程网站并非浪得虚名。谁用谁知道。 1、Codility Codility是一家著名的国外刷题网站。 Codility主要是帮助各大名企、中小企业 笔试 。支持多种语言,能够在线编程。 2、w3cschool 有不少的计算机专业的学生都听老师介绍过这个网站。 W3cschool网站不仅含有各种的编程知识,也包括了java、 php 、ios开发等大量的编程题。 它帮助大量的学员实现了,由学校学习编程到公司编程工作的过渡。 不得不提到的是,在w3cschool app上,照样可以进行刷题训练。 3、HackerRank 网站提供各种编程谜题、现实中的编程难题和挑战。 一般程序员小伙伴们刷完LeetCode之后,就会选择HackerRank继续刷题,更多的是研究算法。 4、CodeChef CodeChef编程题目的难度从入门、简单、中等到挑战都有,会举办竞赛,获胜者可是有奖金的哦! 5、Programmingbydoing 对于一名编程的菜鸟而言,这个网站是在适合不过啦!

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 ;

PAT_A1137#Final Grading

穿精又带淫゛_ 提交于 2021-01-25 03:12:02
Source: PAT A1137 Final Grading (25 分) Description: For a student taking the online course "Data Structures" on China University MOOC ( http://www.icourse163.org/ ), to be qualified for a certificate, he/she must first obtain no less than 200 points from the online programming assignments, and then receive a final grade no less than 60 out of 100. The final grade is calculated by 0 if G ​ m i d − t e r m ​​ > G ​ f i n a l ​​, or G ​ f i n a l ​​ will be taken as the final grade G. Here G ​ m i d − t e r m ​​ and G ​ f i n a l ​​ are the student's scores of the mid-term and the final exams,

选择排序法

时光怂恿深爱的人放手 提交于 2021-01-21 07:21:48
思路: 选择排序法是一种非常直观的算法,它会在计算每个计算步骤中选出一个最小值,进而完成排序。 模板: selectionSort(A ,N) // 包含N个元素的0起点数组A for i 从 0到 N- 1 min = i for j 从 i到N- 1 if A[j] < A[min] min = j A[ i ]与A[ min ]交换 _________________________________________ void selectionSort(A[] ,N) { int i,j,t,min; for (i= 0 ;i < N- 1 ;i++ ) { min = i; for (j = i;j < N;j++ ) { if (A[j] < A[min]) min = j; } if ( i != min) { t = A[ i ]; A[ i ] = A[min]; A[min] = t; } } } C++模板: #include<bits/stdc++.h> using namespace std; void selectionSort( int a[], int n) { int i,j,t,min; for (i= 0 ;i<n- 1 ;i++ ) { min = i; for (j=i+ 1 ;j<n;j++) // 个人喜欢用j=i+1,而不是j=i {

BZOJ5287 HNOI2018毒瘤(虚树+树形dp)

女生的网名这么多〃 提交于 2021-01-21 03:55:06
  显然的做法是暴力枚举非树边所连接两点的选或不选,大力dp。考场上写的是最暴力的O(3 n-m n),成功比大众分少10分。容斥或者注意到某些枚举是不必要的就能让底数变成2。但暴力的极限也就到此为止。   每次重新dp做了大量重复的事,考虑从减少重复计算方面优化。 先跑一遍没有限制的树形dp。将非树边所连接的点拎出来建一棵虚树。注意到虚树中某点对其父亲的贡献系数(也即由该点到其父亲的链上点的dp值与其关系)是不变的,那么dp出系数,依旧暴力枚举非树边就可以了。一定程度上与noip2018d2t3有相似之处?   码起来非常长(虽然似乎并没有很难写),可能是我姿势不对。注意暴力枚举非树边时不应标记其是否强制被选,而是标记强制被选的次数,防止回溯时出问题。 #include<iostream> #include <cstdio> #include <cmath> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; #define ll long long #define N 100050 #define P 998244353 char getc(){ char c=getchar(); while ((c< ' A ' ||c> ' Z ' )&&(c< ' a ' ||c>