H(n) 思路: 所要求的H(n)的几何意义,就是y=n/xy=n/xy=n/x在区间[1,n]中的整数点, 由于整数点的分布具有对称性,考虑[1,√n]的整数点即可。 #include<stdio.h> #include<iostream> #include<cmath> #include<math.h> #include<string> #include<string.h> #include<algorithm> #
简单题,有一个点卡了一下午,看着电影突然之间就想到改过来就A了… 附上AC代码 #include <bits/stdc++.h> #define FOPI freopen("INPUT.TXT", "r", stdin) #define DOPI freopen("OUTPUT.TXT", "w", stdout) using namespace std; typedef long long int ll; con
问题 分析 添加两个节点,一个源节点,一个宿节点 解法1:首先用floyd算出所有的转换器之间的连接关系,然后将插头和插座看作点,转换器作为边,容量是INF,连接源点和每个插头,每个插座和宿节点,容量是1,计算最大流量 解法2:不适用Floyd,直接构图,每个出现过的插头或者插座都看作一个节点,将转
Vjudge题目链接,STL的map,我上来就set写了一个,wa了才发现每组有重复输入的,所以set不行。 #include<cstdio> #include<iostream> #include<map> #include<algorithm> using namespace std; int main(){ int n; while(~scanf("%d", &n) && n){
Peter and his friends are on holiday, so they have decided to make a trip by car to know the north of Spain. They are seven people and they think that two cars are enough for their luggage. It’s time to leave . . . and a heap of suitcases are awaiting
期望dp 将有怪物的边视作断边,经过一条边则将边的两端连通 那么求的是任意两点彼此连通的期望天数 也就是从1开始可以到达任意一点 由于题目开始就连了一些边,所以将各个连通块视作点,并记录连通块的大小 为了方便,将1所在的连通块编号为1 记 f[s] 表示当前可到达的连通块集合为 s,
Contents Problem題目網址 在後面接上最少的字元,使得原來的字串為回文。 Solution利用原字串和其反轉字串,做 KMP 加速配對過程,找出原字串和反轉後的匹配可以配對到哪,輸出原字串後,再將無法配對完成的反轉字串輸出。 原字串 S: xyzxyz 反轉 R: zyxzyx 只能完成一個配對 S[5]
这题初看题意还是比较友好的,相比于前面几题来说,思路并不是很难想。但是,题目描述误导我了很久,以至于我debug了很久,再次强调英语阅读理解的重要性(认真脸)。不过接下来就是无尽的TLE... 尝试了很多方法,但都没什么用,后来无奈只能查了网上的解法,发现最终的quote都是提前存好的,不是像我要
vjudge链接 原题链接 乍一看似乎没什么思路,但是写几个简单的例子之后规律就变得很明显。 比如当 n=5 时,每一步计算后的结果如下: a1 a1+a2 a1+2a2+a3 a1+3a2+3a3+a4 a1+4a2+6a3+4a4+a5 显然系数“1, 4, 6, 4, 1”就是杨辉三角第五行。 故某一项的系数是否是题中 m 的倍数,就决定了最
题目链接:https://vjudge.net/problem/UVA-10881 其实这道题的关键只有一句话: 当两个蚂蚁因碰撞而掉头的时候,我们完全可以认为是两个点对穿而过。 这时候我们的主要任务就是弄清楚“谁是谁”。 然而很明显每只蚂蚁的相对顺序是不变的,所以我们要记录一个$order$数组。 预处
题目链接 一道欧拉回路的经典问题! 题意:有N条边,我们要用这N条边首尾相接的拼接成一个环,也就是相同颜色可以相互链接,问他们能不能构成一个环?并且按照你的欧拉回路跑的顺序去输出这N条边的排列(SPJ)。 思路:很明显的就是一个欧拉回路问题了,但是不要忘记判断它本身是一个连通
链接:https://vjudge.net/problem/UVA-509 记录这个题主要是来记录一下自己遇到的神奇的bug,避免再走弯路。 #include <iostream> #include <stdio.h> #include <cstring> //#define LOCAL using namespace std; char disk[7][105][66]; int d, s, b, check, exibs[105][66], flcnt
题目描述: 当今计算机科学的一个重要的领域就是密码学。有些人甚至认为密码学是计算机科学中唯一重要的领域,没有密码学生命都没有意义。 阿尔瓦罗就是这样的一个人,它正在设计一个为西班牙杂烩菜饭加密的步骤。他在加密算法中应用了一些非常大的素数。然而确认一个非常大的数
传送门 思路:二分染色。根据题意,要求求出所需要的最少士兵。由于图不一定全部联通,所以要求出每一个联通图的最小士兵,同时 不要忘记独立的交汇口也需要有士兵。 Ac代码 #include<iostream> #include<vector> #include<cmath> #include<cstring> using namespace std; vector<i
问题 问题是给四个糖果堆(高度为n,n<=40),每次可以从任意一个堆的顶部取一个糖果放在容量为5的篮子中,若篮子中有两个颜色相同,就可以拿走,求最多可以拿走多少个糖果对 分析 状态是dp[a][b][c][d],a,b,c,d分别是从四个堆中拿走的的糖果个数,dp[0][0][0][0]是还没取的时候,可以得到的
A secret service developed a new kind of explosive that attain its volatile property only when a specific association of products occurs. Each product is a mix of two different simple compounds, to which we call a binding pair. If N > 2, then mixing N
题目 You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is on CDs. You need to have it on tapes so the problem to solve is: you have a tape N minutes long. How to choose tracks from CD to get most out of tape
题目简述: 图上n个点,有黑色和白色。选一条直线,统计直线一端的黑点数和另一端的白点数之和,求这个数的最大值。 题目分析:很巧妙的解法,可以确定两个点连接一条直线,选其中一个点为基准点,做其余点相对于他的坐标,还有这个点的极角(atan2) #include <bits/stdc++.h> using namespace
难点: 理解离散化 这个题目中构造一个长宽高都为1001的容器,然后离散化 分割为多个小方块 (离散化:将这一方块用一个坐标表示),每个方块要么是实心,要么是空心。 通过lower_bound函数找到unique去重后的数组下标去三维遍历标记实心,然后bfs。 在这里,每一个方块的表示仅通过离散化后的单
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 int main(){ 6 vector<string> ans[1001]; 7 int length[1000] = {0}; 8 string now; 9 int i = 0; 10 while(cin >>
模拟,先处理表格后面的行和列再处理前面的(无论是插入还是删除),否则操作会出问题。 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; #define _for(i, a, b) for (int i = (a); i <= (b);i++) struct sheet{ int x, y; } c
传送门 题意: 给你K个模式串, 然后,再给你 n 个字符, 和它们出现的概率 p[ i ], 模式串肯定由给定的字符组成。 且所有字符,要么是数字,要么是大小写字母。 问你生成一个长度为L的串,不包含任何模式串的概率是多少。 解: 记忆化搜索 + AC自动机。 对模式串建一个AC自动机, 不需要las
这题想了好久啊!!!还各种小细节出错,我太菜了,要更加努力才行 这回要把解题思路写一写,不然估计过几天就忘了 解题思路: 长条固定,移动短条去匹配长条,有三种情况 第一种,在短条在长条范围内移动匹配 第二种,短条在长条的左边移动匹配 第三种,短条在长条右边,与左边的情况同理,右移到
题意:有n个人,选多个人参加比赛,其中一个是队长,队长不同其他选手相同也算作不同的方案,问你一共有多少种方案。 思路:可以想到 答案为 1*C(1,n)+2*C(2,n)+3*C(3,n)+....+n*C(n,n); 由公式 k*C(k,n) = n*C(k-1,n-1) 所以最终答案 n*2^(n-1) 1 #include <iostream> 2 #include <cma
题意:给出a,b,求a~b间平方数的个数。 思路:sqrt(b) - sqrt(a-1),注意一下精度误差。 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 5 int main () { 6 int a, b; 7 while (scanf("%d%d", &a, &b) == 2 && a + b)