自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Collider

愿所有刷过的题都成为你比赛中信手拈来的水题.

  • 博客(37)
  • 收藏
  • 关注

原创 UVa11520-Fill the Square

给定一个n*n的方阵要求往里面填充字符使得字典序最小。 暴力搜索,从上到下从左至右选择最小的字符填充即可。#include <cstdio>char grid[12][12];int dx[4] = {-1, 0, 1, 0};int dy[4] = {0, 1, 0, -1};int n;void Dfs(int x, int y) { if (y >= n) { Df

2016-09-28 19:36:25 296

原创 LA3635-Pie

二分#include <cstdio>#include <cmath>const int maxn = 10000 + 10;const double pi = acos(-1.0);double sz[maxn];int n, f;bool check(double mid) { int cnt = 0; for (int i = 0; i < n; i++) {

2016-09-27 09:13:04 348

原创 HDU5904-LCIS

小小的瞎dp一下。 不过题目要求数据范围1e6,但是开1e6的数组会爆栈导致TLE,开1e5的数组就能过,数据太水而且题目没有出好,差评!#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 100000+5;int a[maxn];int b[maxn];int

2016-09-26 21:10:18 397

原创 LA3971&&HDU2333&&POJ3497-Assemble

二分加贪心求最小值最大。 以下代码UVa用时49ms,HDU390ms,但在POJ就TLE了。 而且这个题实在让人费解,主要有两个疑惑: 1.使用lower_bound超时,遍历整个却不超时了。 2.mid用(lb + ub) / 2就会wa,必须要用mid = lb + (ub - lb + 1) / 2; 实在是难以理解…. 我真是太菜了….更新: 疑惑1:不能用lower_bou

2016-09-26 20:15:06 343

原创 POJ2481-Cows

首先将所有的区间按终点从大到小排序,如果终点相同则按起点从小到大排序,然后用树状数组维护起点总数即可。 由于已经按照终点排序,已经插入区间的终点一定大于当前的区间,因此只需查找起点比当前起点小的区间即为所要求的答案。#include <cstdio>#include <cstring>#include <algorithm>const int maxn = 100000+1;#define l

2016-09-24 14:45:29 290

原创 UVa11384-Help is needed for Dexter

思维题,每次第一步操作先取出一半,序列变为1, 2, 3, … , n / 2, 0, 1, 2, 3, … , (n-1)/2 其中0, 1, 2, 3, … , (n-1)/2等价于1, 2, 3, … , n / 2,因此f(n) = f(n/2)+1.#include <cstdio>int f(int n) { return n == 1 ? 1 : f(n/2) + 1;}i

2016-09-24 10:14:20 338

原创 LA2995- Image Is Everything

view表示6面的视图,pos表示还原后的立体图。 做两次初始化: 首先将所有能看穿的图(‘.’)在所有深度上一定没有小方块。 另外如果两个视图对应同一个坐标小方块且颜色不同则小方块一定不存在。 然后统计非空的小方块个数即可。#include <cstdio>const int maxn = 10;int n;char pos[maxn][maxn][maxn];char view[6

2016-09-23 17:45:23 324

原创 LA3708-Graveyard

在周长为10000的圆上等距分布着n个雕塑,又要加入m个雕塑,希望所有雕塑均匀分布,问移动距离最小。 首先确定一个没动的雕塑位置为原点,然后通过坐标缩放计算需要移动的距离和。#include <cstdio>#include <cmath>const int alley = 10000;int main(int argc, char const *argv[]) { int n, m;

2016-09-22 13:21:30 360

原创 POJ3299-Humidex

按照公式推导即可。#include <cstdio>#include <cmath>#include <map>int main(int argc, char const *argv[]) { char ch1, ch2; double f1, f2; double tem, dew, hum; while ((ch1 = getchar())) {

2016-09-21 13:54:02 294

原创 HDU5900-QSC and Master

区间dp,状态转移就是枚举中间点k或者取两边,其中取两边需要中间能取干净才能取。#include <cstdio>#include <cstring>#include <algorithm>const int maxn = 300 + 10;struct pair { int key, val;};pair a[maxn];long long sum[maxn];long long

2016-09-21 13:13:22 451

转载 POJ 分类很好很有层次感

OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj32

2016-09-21 00:00:27 536

原创 UVa11464-Even Parity

类似于反转问题,枚举第一行即可。#include <cstdio>#include <cstring>#include <algorithm>const int maxn = 20;const int inf = 400;int dx[4] = {-1, 0, 1, 0};int dy[4] = {0, -1, 0, 1};int grid[maxn][maxn];int flip[max

2016-09-20 18:15:25 284

原创 UVa10881-Piotr's Ants

所有的蚂蚁都可以看作对穿而过且相对位置不变。#include <cstdio>#include <algorithm>const int maxn = 10000 + 10;struct ant { int id, pos, dir;};ant begin[maxn], end[maxn];int order[maxn];bool comp(const ant &a, const ant

2016-09-20 15:37:06 362

原创 UVa11792-Commando War

需要b分钟给士兵指派任务,j分钟士兵执行任务,问用时最少。 将任务按照执行时间从大到小排序,贪心即可。#include <cstdio>#include <algorithm>using namespace std;const int maxn = 10000 + 10;struct soldier { int b, j;};soldier tm[maxn];bool comp(con

2016-09-19 16:23:20 276

原创 UVa11292-Dragon of Loowater

用两个优先队列维护龙头的直径和骑士的高度,不断从队列中抛出元素,第一个满足条件的即为最小的。#include <cstdio>#include <queue>using namespace std;int main(int argc, char const *argv[]) { int n, m; while (scanf("%d%d", &n, &m) == 2 && n + m

2016-09-18 22:48:01 300

原创 2016 ACM/ICPC Asia Regional Qingdao Online 青岛区域赛部分题解

1001-I Count Two Three预处理所有型如2^a 3^b 5^c 7^d的数字即可,在1e9的数据范围内共有5194个,且1e9正好为最后一个2^a 3^b 5^c 7^d数,排序后二分查找即可。#include <cstdio>#include <cmath>#include <algorithm>using namespace std;const int inf = 1e9;

2016-09-18 19:40:43 1002

原创 2016 ACM/ICPC Asia Regional Dalian Online 大连区域赛部分题解

1007-Friends and Enemies用完全二分图表示朋友和敌人的关系,每个部分里的人和同一部分的其他人都是敌人,而与另一部分的人都是朋友,这样二分图的边就是不同鹅卵石的最大种类数,然后将这个与给出的种类数比较即可。//1007#include <cstdio>int main(int argc, char const *argv[]) { long long m, n;

2016-09-16 19:21:42 1035 2

原创 The 13th Zhejiang Provincial Collegiate Programming Contest 部分题解

A-Apples and Ideas签到题。相互交换苹果和想法,苹果互换,想法相加。#include <cstdio>int main(){ int t; scanf("%d", &t); while (t--) { int a, b, c, d; scanf("%d%d%d%d", &a, &b, &c, &d); print

2016-09-16 18:36:58 473

原创 POJ1753-Flip Game

反转题的开关问题都很有意思!(前提是我做得出的….) 有一个4*4的矩阵,通过翻转使它的颜色一致,求最小的步数。 一开始以为全为黑色,GG….. 枚举第一行的反转状态就行啊。#include <cstdio>#include <cstring>const int dx[5] = {-1, 0, 0, 0, 1};const int dy[5] = {0, -1, 0, 1, 0};char

2016-09-16 18:24:58 242

原创 POJ3080-Blue Jeans

暴力点,解题的方式暴力点。 通过枚举第一个字符串中的所有长度大于3的子串然后逐一去看是否匹配即可。#include <cstdio>#include <cstring>char str[15][70];char pat[70];char ans[70];int main(int argc, char const *argv[]) { int t; scanf("%d", &t

2016-09-12 11:16:18 232

原创 HDU1671-Phone List

建立一个Trie树并且每次用完后将它删除并释放内存。#include <cstdio>#include <cstring>#include <cstdlib>char s[10000+10][100];struct Trie { int cnt; Trie *next[10];};void init(Trie *rt) { rt->cnt = 0; for (

2016-09-11 13:19:10 265

原创 HDU1078-FatMouse and Cheese

记忆化搜索即可。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 100 + 10;const int dx[4] = {-1, 0, 1, 0};const int dy[4] = {0, -1, 0, 1};int grid[maxn][maxn];int

2016-09-10 22:16:22 231

原创 POJ2823-Sliding Window

给定一群数的集合,然后有一个大小为k的区间,这个区间从左往右滑动,输出每滑动一次,这个区间内的最大值和最小值。 G++无情的TLE了,但是!!C++压线过了!! 总之就是一个基本的单调队列,瞎搞一下就行了。#include <cstdio>#include <deque>using namespace std;const int maxn = 1000000 + 10;int window[m

2016-09-10 09:29:15 342

原创 UVa839-Not So Mobile

使用递归直接处理信息并建树,同时判断是否满足杠杆定理//UVa 839#include <cstdio>bool flag;int build() { int wl, dl, wr, dr; scanf("%d%d%d%d", &wl, &dl, &wr, &dr); if (wl == 0) { wl = build(); } if (wr

2016-09-08 20:41:32 276

原创 HDU1251-统计难题

简单的Trie树即可解决。#include <cstdio>#include <cstring>char s[15];struct Trie { int cnt; Trie *next[26];};void init(Trie *rt) { rt->cnt = 0; for (int i = 0; i < 26; i++) { rt->next[i

2016-09-08 20:35:19 280

原创 POJ1821-Fence

这是一道经典的单调队列优化DP. 首先不难看出要用动态规划求解,dp[i][j]表示第i个工人粉刷第j块木板时的最大收益,由此 dp[i][j] = max( dp[i-1][j] 第i个工人不刷木板 dp[i-1][k] + (j - k) * p 第i个工人从第k+1块木板开始一直刷到第j块 ) 由于每个工人粉刷的木板必须包含s,因此dp[i][…

2016-09-07 22:31:51 363

原创 POJ2406-Power Strings

用KMP的next部分匹配表寻找最小的字符串周期。//POJ2406#include <cstdio>#include <iostream>#include <string>using namespace std;const int maxn = 1000000 + 10;int n;string s;int list[maxn];void getnext() { list[0]

2016-09-04 22:48:42 241

原创 HDU2846-Repository

典型的Trie树。 将所有的商品名字一段一段的输入,为了避免类似badad在统计ad时变成2这样多加了的情况,我们在insert时引入id。 这样能避免同一商品的重复增加。 另外G++和C++的内存分配好像不太一样,用C++能够AC但是用G++就会超内存。 不过Trie对内存的占用也是出了名的….//HDU2846#include <cstdio>#include <cstring>st

2016-09-01 21:53:48 399

原创 HDU1276-士兵队列训练问题

类约瑟夫游戏,好像是可以用数学的方式计算出来….但是…. 那么模拟一下这个游戏,士兵们编好号放入链表中,然后不断出列,直到剩下3个人。 注意it = ls.erase(it);//HDU1276#include <cstdio>#include <list>using namespace std;list<int> ls;int main(int argc, char const *argv

2016-09-01 21:48:30 1157

原创 HDU1870-愚人节的礼物

简单的模拟题,遇到‘(’加1,遇到‘)’减一即可。//HDU1870#include <cstdio>#include <iostream>#include <string>using namespace std;int main(int argc, char const *argv[]) { string s; while (cin >> s) { int c

2016-09-01 21:45:46 552

原创 HDU1986- Encoding

蛇形填数问题,首先打表所有字母和空格的字符串,然后将输入的字母和空格编码为一个contain字符串,然后蛇形填数即可。 但是需要注意的是填数时要让下标小于r*c,所以contain字符串中要向后补‘0’。 一开始一直让下标小于contain的长度,但是怎么也过不了….//HDU1986#include <cstdio>#include <cstring>#include <string>u

2016-09-01 21:44:01 285

原创 POJ1276-Cash Machine

一个多重背包问题,我们可以将多重背包转换为01背包问题,然后暴力解决。 由于cash的值很大,因此直接从cash开始dp会超时,因此我们可以手动设置一个已知的最大cash,记为val,dp[i]表示i这个数是否已经被作为val,这样每次从val开始dp,能够节省一部分的时间。 剩下的就是01背包了。//POJ1276#include <cstdio>#include <cstring>#i

2016-09-01 21:39:11 239

原创 UVA10585-Center of symmetry

计算几何入门,将所有的点排序遍历即可。//UVA10585#include <cstdio>#include <map>#include <algorithm>using namespace std;const int maxn = 10000 + 10;typedef pair<int, int> P;P point[maxn];int main(int argc, char const *

2016-09-01 21:01:51 295

原创 POJ1141-Brackets Sequence

用dp[i][j]记录下从i到j所缺少的括号数量,那么dp[i][i] = 1,dp[i][j] = dp[i][k] + dp[k+1][j],另外如果第i个字符和第j个字符匹配,则dp[i][j]应先被置为dp[i+1][j-1]。 由于要输出最终的字符串,所以使用pos[i][j]记录下缺省的位置,输出也是一个难点,要写一个函数递归的输出配对后的合法字符串,代码仅供参考。//POJ1141

2016-09-01 21:00:13 386

原创 POJ1661-Help Jimmy

很棒的题,一开始用搜索做一直不对,后来才发现是DP。 将一开始的位置和地面都看作是一个平台。 先将每个平台按照高度从小到大排序。 dp[i][[0]和dp[i][1]分别表示从第i个平台从左端和从右端到地面的最小时间,那么dp[i]就取决于高度低于i平台的可到达的第一块平台k,dp[i][0] = 高度差 + min(dp[k][0]+i左端到k左端的距离, dp[k][1] + i左端到k

2016-09-01 20:53:51 275

原创 POJ2531-Network Saboteur

题目要求将一个图分开成A集合和B集合使得连接两个部分的边权值最大… 暴搜! 将图分成两个集合,搜索每个点在A集合和B集合,回溯。//POJ2531#include <cstdio>#include <algorithm>using namespace std;const int maxn = 20 + 5;int C[maxn][maxn];bool mark[maxn];int n;in

2016-09-01 20:44:11 328

原创 POJ2697-A Board Game

将各个状态转换为字符串然后用map储存起来,用BFS即可。//POJ2697#include <cstdio>#include <iostream>#include <string>#include <queue>#include <map>#include <algorithm>using namespace std;typedef pair<string, char> P;int d

2016-09-01 20:33:18 407

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除