bestcoder.hdu.edu.cn】的更多相关文章

http://bestcoder.hdu.edu.cn/ Problem A 题目链接: http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=690&pid=1001 http://acm.hdu.edu.cn/showproblem.php?pid=5685 题目分析: 因为是中文题目,便不再赘述 代码: #include <cstdio> #include <cstring> #include…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911 解题报告: 给出一个长度为n的序列,然后给出一个k,要你求最多做k次相邻的数字交换后,逆序数最少是多少? 因为每次相邻的交换操作最多只能减少一个逆序对,所以最多可以减少k个逆序对,所以我们只要求出原来的序列有多少个逆序对然后减去k再跟0取较大的就可以了. 因为数据范围是10的五次方,所以暴力求肯定会TLE,所以要用n*logn算法求逆序对,n*logn算法有几种可以求逆序对的: 线段树,树状数…
http://acm.hdu.edu.cn/showproblem.php?pid=1711 #include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> ], b[], next[]; int n, m; void GetNext(int b[])//获得next数组 { , j = ; next[] = -; while(j < m) { || b[j] == b[…
http://acm.hdu.edu.cn/showproblem.php?pid=4632 题意: 一个字符串,有多少个subsequence是回文串. 别人的题解: 用dp[i][j]表示这一段里有多少个回文串,那首先dp[i][j]=dp[i+1][j]+dp[i][j-1],但是dp[i+1][j]和dp[i][j-1]可能有公共部分,所以要减去dp[i+1][j-1]. 如果str[i]==str[j]的话,还要加上dp[i+1][j-1]+1. 但是自己却是这样想的,把每个区间都要看…
http://acm.hdu.edu.cn/showproblem.php?pid=6602 终于能够看懂的题解: https://blog.csdn.net/qq_40871466/article/details/97189033 依次枚举r,对r寻找可行的最小的l,查找成功则尝试更新. 假如每次把合法区间+1,把非法区间-1,那么对一段区间求区间和表示什么呢? k=2 1 4 1 4 2 1 2 r=1,均为非法区间 -1 0 0 0 0 0 0 r=2,均为非法区间 -2 -1 0 0 0…
Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.   Input 输入若干组数据.每组数据包括:导弹总个数(正…
Dertouzos 题意: 有中文,不说. 题解: 我看了别人的题解,还有个地方没懂, 为什么是 if(d%prime[i]==0) break; ? 代码: #include <bits/stdc++.h> using namespace std; const int INF=0x3f3f3f3f; typedef long long ll; #define PU puts(""); #define PI(A) printf("%d\n",A) #de…
#include<stdio.h> #include<string.h> #include<queue> #define N 110 int m, n, k, x1, x2, y1, y2; char map[N][N]; int v[N][N][N];//当时间是k的倍数时,障碍消失,之后又重现,所以在平时使用的二维标记数组中再加一维 ][] = {{-, }, {, }, {, -}, {, }}; using namespace std; struct node…
riemann与marjorie拼接后riemannmarjorie前缀与后缀公共部分为 rie 长度为 3(即next[l] = next[14]的值,l为拼接后的长度)但:aaaa与aa拼接后aaaaaa,next[l]不是结果,所以在aaaa和aa间加“#”,即aaaa#aa:#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #define N 50010…
//代码: //方法1:Dijkstra's Algorithm #include<stdio.h> #include<math.h> #include<string.h> #define INF 0xfffffff #define N 110 #define min(a, b)(a < b ? a : b) int maps[N][N]; int d[N], visit[N]; int n, m; void Init() { int i, j; memset(v…
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<queue> #include<math.h> #define N 10010 using namespace std; int vis[N]; ], s2[], s3[]; struct node { int step; ]; }; int prime(int y) { int i, k = (int)sqrt(y)…
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #define max(a, b)(a > b ? a : b) #define N 30 char maps[N][N]; int m, n, ans; ][] = {{, }, {, -}, {, }, {-, }}; void DFS(int x, int y) { int a, b, i; maps[…
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #define N 70 int f, vis[N], v, n, a[N]; int cmp(const void *a, const void *b) { return *(int *)b - *(int *)a; } void DFS(int w, int sum) { int i; ) f = ; else…
#include<stdio.h> #include<string.h> #include<queue> #include<stack> #define N 10 using namespace std; void Q(int n) { int m; char s[N]; queue<int>Q; while(n--) { scanf("%s", s); ) { scanf("%d", &m); Q…
#include<stdio.h> #include<stack> #include<string.h> #define N 20 using namespace std; int main() { stack<char>S; int n, i, j, k, a[N]; char s1[N], s2[N]; while(scanf("%d", &n) != EOF) { while(!S.empty())//清空栈 S.pop()…
#include<stdio.h> #include<string.h> #include<queue> #include<stack> #define N 10 using namespace std; void Q(int n) { int m; char s[N]; queue<int>Q; while(n--) { scanf("%s", s); ) { scanf("%d", &m); Q…
/* 从一组数据中选出n个数,使这n个数的和最接近一个值x, 背包问题, 从一系列菜中,从最贵的菜(MAX)之外中选出几个菜,使菜的总价格sum最接近money-5:money-sum-MAX; 钱数相当于背包总容量,菜相当于价值和体积一样物品: */       #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;…
判读条件 1:有元音字母 2:不能三个连续元音或辅音 3.不能连续两个相同的字母,除非ee或oo #include<cstdio> #include<cstring> #include<algorithm> #include<string> using namespace std; ]; bool panyuan(int id){ if(word[id]=='a'||word[id]=='e'||word[id]=='i'||word[id]=='o'||w…
对输入字符串的字符的倒置,在这个程序中,我觉得自己最大的问题是怎么识别一个字符,代码中有t个字符串,每个字符串,每个字符串中有若干个单词,单词之间有空格,所以对于下列的正确答案,我的疑惑是当我键盘输入时,电脑怎么识别带有空格的一行字符 这道题的三个重点:1.系统对于键盘输入的字符串的识别,在下面的正确代码中,当执行while循环,输入字符串,字符串就被存入数组中,那他是怎么识别空格的呢 2.对于每一个单词的字符倒置 3.在输出每一个字符串(单词)的时候时手动输出空格 #include<stdio…
zxa and leaf Problem Description zxa have an unrooted tree with n nodes, including (n−1) undirected edges, whose nodes are numbered from 1 to n. The degree of each node is defined as the number of the edges connected to it, and each node whose degree…
题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=641&pid=1003 题意 : 给N集合, 每个集合由若干个正整数组成, 要求划分为L个部分, 使得每个部分的所有集合的交集非空 能划分输出YES, 否则NO 思路 : 一共N个集合, 划分的个数为1 - N个, 所以当 L > N 时必然是不行的 考虑如何取到最小的划分个数cnt, 如果 cnt <= L 则可行 方法 : 记录所有…
题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=641&pid=1002 思路 : N有若干个质因子, N = a^b * c^d * e^f...... M也有若干个质因子, M = a^(b+k) * c(d+k1) * e^(f+k2)...... N能到达M的条件是它们的质因子必须完全相同 N每次可以乘上它的若干个质因子, 直到这个质因子的幂次等于M这个质因子的幂次 考虑这样一个事实,…
  题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=637&pid=1002 思路 : 考虑这个序列当前的第i个数能有几种组合方法, 前面有2^(i-1)种, 后面有有2^(n-i)种, 本来答案是a[i] * 2^(n-1), 但要求对于某种排列存在相邻且相等的数是不计入答案的 例如 第二组样例 1 2 1 3,   1 1 3中1重复故要减去一个1 可见, 只有前一个数和a[i]相等时, a…
http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=570&pid=1001 http://acm.hdu.edu.cn/showproblem.php?pid=5182 这道题也是hdu上的5182 官方题解: 对于输入的每一行一两个整数作差,按照差值从大到小排序,如果差值一样,按照后面的整数从小到大排序,如果还是一样按照ID从小到大排序. 首先注意下数据范围,大约100组数据,所有整数都在[1,100] 的范…
传送门 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 264    Accepted Submission(s): 57 Problem Description GTY has n gay friends. To manage them conveniently, every morning he o…
传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 221    Accepted Submission(s): 52 Problem Description A topological sort or topological ordering of a directed…
题意:输入一棵树,输出前k小的点对最短距离dis(i,j)的和. 模拟,官方题解说得很清楚了.不重复了. http://bestcoder.hdu.edu.cn/ 需要注意的是,复杂度要O(n+k),不能用set,map之类的标记是否访问. 一开始TLE了,去掉标记后wa了.最后发现对队列的元素加个前缀,就可以了,即标记该条边是从哪个点延伸的. #include <cstdio> #include <cstring> #include <iostream> #inclu…
A题 Oracle http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=703&pid=1001 大数相加: rec[p]=; rec[]+=k; ;i<p;i++) ) rec[i] = rec[i] - ,rec[i+] ++ ; ) printf("%d",rec[p]); #include <cstdio> #include <cstring> ; int…
A题 Aaronson http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=718&pid=1001 感觉一开始写的这个不好,太冗余了. #include <cstdio> int main() { int n,m; int t; while(~scanf("%d",&t)) { while(t--) { scanf("%d%d",&n,&…
http://acm.hdu.edu.cn/showproblem.php?pid=5063 题目大意: 题目意思还是比较简单.所以就不多少了.注意这句话,对解题有帮助. Type4: Q i query current value of a[i], this operator will have at most 50. 解题思路: 因为给定n和m都是100000,我们每一步都做具体的操作,时间将是O(n*m),肯定超时.最开始的时候 我怎么想都不知道怎么解决.以为是线段树.比赛完了以后,看了解…