WC2013 糖果公园
USACO Gold题填(bei)坑(nue)计划

USACO填坑计划

HJWJBSR posted @ 2015年9月08日 23:26 in 题解 , 677 阅读

maya终于有填坑计划了

主要是最近不知道做什么题好

看到*利去年同期的刷题节奏感觉很带感的样子于是跟着进度做一做好了。虽然那种效率肯定是跟不上的

话说Silver的题好像确实都不是很难的样子反正按记录一路扫过去好了

[upd 9.11] 差不多都搞完了,刷水真是刷的人好虚。里面有的比较卡的题目要不就是比较神的贪心要不就是复杂度不科学但还是能过的题。

BZOJ1613 直接DP

BZOJ1622 我反正是乱搞,先建出一棵trie数然后每次维护一些还可以往下扩展的节点。但是复杂度算起来并不很科学,不过还是过了。

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
#define N 3050
#define M 105
queue <int> a[N],empty;
int n,m,s[N],ne[N][M],li[N],ans,len,st=1,sg[N];
char b[N],qu[N][N];

int main()
 {
 	cin >>n>>m;
 	for (int i=1;i<=n;i++)
 	  scanf("%s",qu[i]);
 	for (int i=1;i<=m;i++)
 	 {
 	 	scanf("%s",b);len=strlen(b);
 	 	for (int j=0;j<len;j++)
 	 	 if (b[j]<'a') b[j]=b[j]-'A'+'a';
 	 	int now=1;
 	 	for (int j=0;j<len;j++)
 	 	 if (!ne[now][b[j]-'a'])
 	 	   ne[now][b[j]-'a']=++st,now=st;else
 	 	   now=ne[now][b[j]-'a'];
 	 	s[now]++;
 	 }
 	for (int i=1;i<=n;i++)
 	 {
 	 	len=strlen(qu[i]);ans=0;
 	 	for (int j=0;j<len;j++)
 	 	 if (qu[i][j]<'a') qu[i][j]=qu[i][j]-'A'+'a';
 	 	for (int j=0;j<26;j++)
 	 	 {
 	 	 	a[j]=empty;
 	 	 	if (ne[1][j]) a[j].push(1);
 	 	 }
 	 	for (int j=0;j<len;j++)
 	 	 {
 	 	 	int k=qu[i][j]-'a',ss=0;
 	 	 	while (a[k].size())
 	 	 	  li[++ss]=a[k].front(),a[k].pop();
 	 	 	while (ss--)
 	 	 	 {
 	 	 	 	int l=ne[li[ss+1]][k];
 	 	 	 	for (int q=0;q<26;q++)
 	 	 	 	 if (ne[l][q])
 	 	 	 	   a[q].push(l);
 	 	 	 	ans+=s[l];
 	 	 	 }
 	 	 }
 	 	printf("%d\n",ans);
 	 }
 	return 0;
 }

BZOJ1623 一个比较显然的贪心

BZOJ1628 用个set维护下现在还存在的矩形的高度然后从左往右扫一遍就好了

BZOJ1633 也是DP

BZOJ1634 按照Di/Ti排个序就是顺序,至于证明可以考虑交换两个相邻的牛的顺序对答案的影响

BZOJ1635 Get差分序列,感觉神神的,贪心也神神的。

BZOJ1636 直接倍增搞

BZOJ1637 值化成1和-1前缀和一下然后排个序求出同一前缀和的最大区间最后倍增统计答案

BZOJ1638 两次拓扑排序

BZOJ1639 二分答案

BZOJ1640 贪心,两端不同就取小的,否则往中间一直找不同的。这样可以搞成O(n)的。有人用后缀数组真是不明觉厉,不过本质还是一样的。

BZOJ1641 Floyd

BZOJ1642 排序扫一遍

BZOJ1643 DP

BZOJ1644 BFS

BZOJ1645 刚看题还以为是扫描线,结果sort一遍扫一遍就好了

BZOJ1646 BFS

BZOJ1648 BFS

BZOJ1649 背包

BZOJ1650 二分答案+贪心

BZOJ1651 二分答案

BZOJ1652 DP

BZOJ1653 爆搜

BZOJ1654 Tarjan求LCC

BZOJ1655 高J度+DP

BZOJ1657 单调队列

BZOJ1658 贪心+差分序列

就是方向向左的路线记为1,否则记为-1,然后每段区间的权值和的绝对值*路线长度的和就是答案,脑补感觉还是比较正确

BZOJ1660 单调队列

BZOJ1661 爆搜

BZOJ1662 数位DP

BZOJ1663 DP

BZOJ1664 排序乱搞

BZOJ1665 暴力建图BFS

BZOJ1666 高J度

BZOJ1668 DP

BZOJ1669 n^2 LIS都可以过

BZOJ1671 BFS

BZOJ1672 排序后贪心

BZOJ1673 因为个数不会太多所以直接爆搜

BZOJ1674 直接建图BFS

BZOJ1676 直接爆搞

BZOJ1677 DP

BZOJ1679 排序乱搞

BZOJ1680 贪心

BZOJ1681 最短路

BZOJ1682 最小生成树

BZOJ1683 同1628

BZOJ1684 枚举分母,则分子是可以限制在一定范围内的

BZOJ1685 有个神神的贪心是每次先把大的尽可能拿掉,最后补个最小的

BZOJ1688 并查集

BZOJ1689 贪心

BZOJ2014 贪心

BZOJ2015 SPFA

BZOJ2016 二分答案

BZOJ2019 SPFA

BZOJ2020 贪心

BZOJ2021 背包

BZOJ2023 DP

BZOJ2101 DP

BZOJ2102 爆搜

BZOJ3016 往前往后扫一遍

BZOJ3017 DP

BZOJ3018 跑n^2次SPFA

BZOJ3296 并查集

BZOJ3297 DP

BZOJ3298 打表找规律发现每条y=x+k总会有一个后手必胜点,然后就可以先把这些点预处理出来最后判断就好了

BZOJ3300 栈

BZOJ3301 DP

BZOJ3389 贪心

BZOJ3390 最小生成树

BZOJ3391 树的重心

BZOJ3392 BFS

BZOJ3396 Dinic

BZOJ3399 贪心

BZOJ3400 DP

BZOJ3402 BFS

BZOJ3403 队列

BZOJ3404 预处理

BZOJ3410 贪心

BZOJ3432 二分答案

BZOJ3433 好神的贪心,是每次看能不能填右端点大的,不能就填右端点较小的。

BZOJ3479 最小生成树

BZOJ3480 预处理背包一下求出每个大小的最小值,直接从左往右扫一遍就好了

BZOJ3538 三次SPFA

BZOJ3540 前缀和+归并排序


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter