
UVALive
lzh823046544
233
展开
-
Cocircular Points
Cocircular Points . . 题意:给定n个点,问最多有多少个点在一个圆上。 . . 解法:n^3枚举三角形,每一个三角形确定一个外接圆,然后把圆的圆心和半径记录下来,统计一下最多出现的就好了。 . . 队友代码#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>usin原创 2016-09-11 18:25:30 · 296 阅读 · 0 评论 -
Beehives
Beehives . . 题意:给出一个无向图,求最短的环 . . 解法:由于点数只有500, 对于每一个点做一次bfs就好了,只要搜到之前更新过的点那么就是一个环了,bfs保证了最短。 . .#include <iostream>#include <stdio.h>#include <stdlib.h>#include <vector>#include <algorithm原创 2016-09-05 14:52:38 · 431 阅读 · 0 评论 -
Islands
Islands . . 这是道水题,每一个联通块是一个小岛,求问小岛边长与面积比的最大值和最小值。 直接在图上dfs就好了,记录每个小岛面积以及周长(即dfs下一步会到达水域位置)。 . .#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>const int maxn = 500;ch原创 2016-09-04 11:48:27 · 463 阅读 · 0 评论 -
Highways
Highways . . 题意:给定n*m个点,问能连多少条斜边,如果多点在一条直线上只能算一条。 . . 解法:用 O(n^2) 的算法可以过。枚举 (dx, dy),看这种方案能出现多少次。 如图 : 首先 显然(dx, dy) 是互质的,那么考虑右出界,即 x+dx <= n , x+2*dx > n,点数就是红色和紫色区域,再考虑上出界,即 y+dy <= m原创 2016-09-04 11:44:40 · 247 阅读 · 0 评论 -
Grass is Green
Grass is Green . . 题意:水题,给定每个人的钱、买地的单位价格,买草的单位价格,买篱笆的单位价格,问买地面积比第一位大的有多少人。 解法:直接解二元一次方程组,计算每个人能买的最大变长,然后判断即可。 . .#include <iostream>#include <stdio.h>#include <stdlib.h>#include <algorithm>#i原创 2016-09-04 11:28:35 · 383 阅读 · 0 评论 -
DNA Regions
DNA Regions . . 题目可以转换成一个01串,要求最长的字串满足1的个数占有的比例小于等于p。 利用前缀和可以很简单的把这个问题转换为斜率斜率问题,即在一个不上升序列 f 中,找到最长的字串,满足 (f[i] - f[j-1])/(i-j+1) <= p。投影到二位平面上 (i, f[i]),即每一个点作一条斜率为p的直线,看最前面而且点不在直线下方。再思考一下可以转换为一个单调原创 2016-09-04 09:19:09 · 291 阅读 · 0 评论 -
Bundles of Joy
Bundles of Joy . . 题意:给定m个包裹,n个蛋糕,每个包裹包含一些蛋糕以及所需要的费用,保证包裹之间蛋糕集合只会出现包含或者相离的关系,问买完所有蛋糕的最小花费(蛋糕不能买重复)。 . . 解法:类似拓扑序。因为只有包含或者无关,所以对于每一个包裹,看能否被前面所有被他包含的包裹的花费更新,如果可以就更新,最后求出全集的花费。 . .#include <iost原创 2016-09-03 11:19:17 · 327 阅读 · 0 评论 -
Space Junk
Space Junk . . 题意:给出两个球三位位置,半径以及速度向量,问什么时候能相撞。 . . 解法:很明显这是一个不等式方程: (X1+VX1∗t−X2−VX2∗t)2+(Y1+VY1∗t−Y2−VY2∗t)2+(Z1+VZ1∗t−Z2−VZ2∗t)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−原创 2016-09-03 11:12:18 · 321 阅读 · 0 评论 -
An Easy Physics Problem
An Easy Physics Problem . . 题意:平面上一个点与圆,点延一个方向前进,问能否达到另外一个点。 . . 解法:分两种,1是相撞,2是相离或相切。对于第二种直接求解就好了,而第一种注意一下精度,考虑点出现在相撞前的地方等就好了。 . . 队友代码#include <cstdio>#include <iostream>#include <cmath>#i原创 2016-09-12 11:04:40 · 721 阅读 · 1 评论 -
Binary Tree
Binary Tree . . 题意:树上每个点都有个权值,根节点为1,对于权为x节点,左儿子为2*x,右儿子为2*x+1,问从根节点往下走k步,每一步怎么取(+ 或 -),使得最后达到m值(中间能出现负数)。 . . 解法:注意 N <= 2^K,所以一路向左,最后一个向右取恰好为2^K。那么对于N比较小的,我们考虑和N与2^K作差,如果为奇数,那么最后一个点向左取即可,这样保证了差一原创 2016-09-12 10:58:17 · 198 阅读 · 0 评论 -
Kingdom of Black and White
Kingdom of Black and White . . 给定一个01串,相邻相同的数字为一块,串的权值定义为所有块长度的平方和。求最多改变一个值使得权值最大。 . . 解法:首先对于一个连续串,不会改变中间的值,只会更改两头的值,所以先算好原来所有块的长度以及权值,然后一个个更改判断是否会变大就好了,注意一下只有长度为1的块就好了。 . .#include <iostream>原创 2016-09-12 10:43:43 · 323 阅读 · 0 评论 -
LCM Walk
LCM Walk . . 假设 x = p * k , y = q * k ( k = gcd(x,y) ) 那么 z = p*q*k. 下一步会跳到( k * p * (1+q) , q * k ) 或者 ( p * k , k * q * ( 1 + p ) ),然后发现他们的gcd值并没有改变,所以推出无论跳多少步,gcd值永远不会改变。所以除去gcd的值后,每次都是 较大原创 2016-09-12 10:36:33 · 337 阅读 · 0 评论 -
Friendship of Frog
Friendship of Frog . .求最靠近的两个相同字母 n^2暴力就好了#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;string s;int n, m, ans;int main() { cin >> n; for (int cases = 1; ca原创 2016-09-12 10:10:26 · 354 阅读 · 0 评论 -
Kids' Wishes
Kids’ Wishes . . 题意:给出n个小朋友,m个要求,要求 x 和 y 坐在一起,问是否可能。 . . 解法:首先坐在一起的互连一条有向边,然后判断如果有点的度数大于2那么一定不行,如果图中存在一个小于n的环,那么一定不行。 . .这里写代码片原创 2016-09-11 18:36:26 · 184 阅读 · 0 评论 -
Digits Count
Digits Count. . . 题意:问A~B之间,每个数字出现的多少次. . . 解法:水题,直接计算每一位上出现的 0~9 可能的出现次数, 就是前面乘上后面的(10^k形式),然后统计即可。 . . 队友代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int原创 2016-09-11 18:30:27 · 449 阅读 · 0 评论 -
Countdown
Countdown . . 题意:给出6个数,通过+、-、*、/、四种操作,每个数只能用一次,问怎么算能得到一个尽量接近target的数(target给定),然后按题目要求输出。 . . 解法:这题直接暴力死做不会超时,用map记录数字使用情况以及得出来的值,保存一下是从那两个状态转移过来就好了。. . .#include <iostream>#include <stdio.h原创 2016-09-05 14:57:26 · 696 阅读 · 0 评论