
UVA/LA
文章平均质量分 62
BRCOCOLI
初学者 记录成长 Fighting
展开
-
UVa 202 Repeating Decimals
#include#include#include#includeusing namespace std;int main(){ int a,b,c; while(cin>>a>>b) { c=a; int first=0,p=0,cnt=0,idx=0,i; char ans[200]={0}; ans[p++]=(a/b?a/b:0)+'0'; if(a){原创 2016-04-09 21:47:47 · 295 阅读 · 0 评论 -
UVa 1588 Kickdown
#include#include#include#define maxn 105using namespace std;int f(char *mas,char *dri);int main(){char mas[maxn]={0},dri[maxn]={0};while(scanf("%s%s",mas,dri)!=EOF){printf("%d\n"原创 2016-04-09 21:22:55 · 247 阅读 · 0 评论 -
UVa 10340 All in All
#include#include#include#include#includeusing namespace std;int main(){ string s; string t; while(cin>>s) { cin>>t; int slen=s.length(); int tlen=t.length(); int p=0,ok=0; for(in原创 2016-04-09 21:56:48 · 220 阅读 · 0 评论 -
UVa 572 Oil Deposits
遇到一个@就把相连的@全变成‘*’,再cnt++就好#include#include#includeusing namespace std;char oil[105][105];int m,n;void dfs(int i,int j);int main(){ while(scanf("%d%d",&m,&n)&&m) { int cnt=0; memset(oil原创 2016-04-26 19:36:49 · 268 阅读 · 0 评论 -
UVa 512 Spreadsheet Tracking
之前#include #include #include using namespace std;#define maxn 100struct command{ char opt[5]; int a; int n[maxn]; int r1,r2,c1,c2;}cmd[maxn];int k;int simulate(int& r0,int& c0);int mai原创 2016-04-10 18:39:03 · 505 阅读 · 0 评论 -
UVA 816 Abbott's Revenge
好复杂TAT主要是BFS#include#include#include#include#includeusing namespace std;struct Node{ int r,c,dir; Node(int r=0,int c=0,int dir=0) : r(r),c(c),dir(dir) {} };const int maxn = 100;const c原创 2016-04-27 20:09:20 · 266 阅读 · 0 评论 -
UVa 201 Squares
细节题,判断正方形比较麻烦,还有格式要注意,用时1h30min+考虑了两组数据结构存储1.H[][]保存横排线,V[][]保存竖排线,判断正方形要x,y坐标换来换去,再加一加什么的2.给每个点标号1~n^2 ,输入时处理一下数据用一个d[][]存储就好,判断正方形比前面这种稍微简单一点我是用前者方法#include #include #include #include原创 2016-04-11 18:15:51 · 358 阅读 · 0 评论 -
UVa 1589 Xiangqi
花了好长时间终于AC..... . 思路:将横竖看一看,再看看马,再上下左右走一走再判断一次主要考虑特殊数据 马能不能走,还有将可以吃旁边的2 1 4H 2 2H 2 64 2 5R 3 5G 10 4C 5 5R 2 9#include #include #include #include using namespace原创 2016-04-10 21:38:52 · 423 阅读 · 0 评论 -
UVa 120 Stacks of Flapjacks
#include#include#include#include#include#include#include#include#include#includeusing namespace std;int pan[40],P[40]; //P是正确的序列 int ans[40],k;void strrev1(int* p) //UVa 竟然不能用strrev这个原创 2016-05-11 19:39:38 · 259 阅读 · 0 评论 -
UVa 1590 IP Networks
所有数转化为二进制放到数组里再一位一位比较,第一位出现不同位数后都为0#include #include #include #include #include using namespace std;#define maxn 1005int k;void ToB(int n,char *A){ stack S; int cnt=0; while(n) { S.pu原创 2016-04-16 20:18:45 · 327 阅读 · 0 评论 -
UVa 439 Knight Moves
BFS可以想成树的层序遍历,关键是1)判重,表示偷懒用set判重; 2)判断搜索到第几层,用front表示当前层数,rear表示上一层层数。#include#include#include#include#include#includeusing namespace std;set st;char s1[5],s2[5];const int dx[]={2,1,-1,-2原创 2016-05-01 19:40:33 · 261 阅读 · 0 评论 -
UVa 1600 Patrol Robot[待AC]
front表示当前搜索层,rear表示上一层d[]表示第几层,b[]表示穿越的障碍数#include#include#include#include#include#includeusing namespace std;const int M=1000;int G[25][25],k,x,y;const int dx[]={0,1,-1,0};const int dy[原创 2016-05-01 21:36:07 · 267 阅读 · 0 评论 -
UVa Self-Assembly(topo sort)[待AC]
#include#include#include#includeusing namespace std;int G[52][52],c[52];bool topo(int u){// printf("%c ",u%26+'A'); c[u]=-1; //visiting; for(int v=0;v<52;v++) { if(G[u][v]){// pri原创 2016-05-01 21:46:13 · 363 阅读 · 0 评论 -
UVA 11134 Fabled Rooks(贪心法,区间与选点问题)
x轴,y轴不相关,所以分开考虑贪心法 可以这样思考不同于定区间选点,而是定点选区间,所以理所当然,那个点重合的区间要尽可能少,所以要选占用1~col最多位置的区间,且尽可能保留占用col+1~n的位置区间为以后考虑;那么我们要从col=1~n放,对于每个col选取[a,b]中 1) a最小 2)a相同时b最小的区间; 每选中一个区间就把他抹掉;为什么那么选的原因:1) a最小 :原创 2016-05-11 21:14:14 · 381 阅读 · 0 评论 -
UVa 12118 Inspector's Dilemma
根据欧拉回路的性质算出来的http://blog.youkuaiyun.com/wcr1996/article/details/43309671看了大神的,写下自己理解假设一开始只有题中给定的限定的边,若不联通,就一条一条边加,加边要加在两个奇点之间,但是题目只要求求至少有几条边,所以只需算一下就好了。计算所有奇点数,连接n个点最少n-1条边若没有E边的限制,且一共只能有两个奇点。第一原创 2016-05-02 14:30:37 · 325 阅读 · 0 评论 -
UVA 10305 Ordering Tasks
欧拉回路:每个节点走到最深再倒序输出#include#include#include#include#includeusing namespace std;const int maxn=100+5;int G[maxn][maxn],topo[maxn];int c[maxn],m,t; //保存状态; bool dfs(int u){ c[u]=-1; for(int原创 2016-04-27 21:23:24 · 612 阅读 · 0 评论 -
UVa 10129 Play On Words
如果一个单词头和尾字母一样就不用考虑这个单词了; 重复的单词也不用考虑; 并且单词肯定是线性的,所以肯定有两个奇点,一个起点一个终点;在根据欧拉回路的充要条件判断出度入度关系,判断图是否连通就好了#include#include#includeusing namespace std;int in[30],out[30],G[30][30];int vis[30];void eu原创 2016-05-01 11:54:48 · 276 阅读 · 0 评论 -
UVA 12096 The SetStack Computer
集合中不能有相同元素set_union,set_intersection 函数用前就应该保证输入两容器内有序且无重复#include #include #include #include #include #include #include #include #define ALL(x) x.begin(),x.end()#define INS(x) insert原创 2016-04-19 15:58:28 · 630 阅读 · 0 评论 -
UVA 815 Flooded!
先sort一下,在计算出相邻高度差,再依次计算蓄水量 如案例中,13*100+2*200+7*300......#include #include #include #include using namespace std;#define maxn 1000int main(){ int m,n,kase=0; while(scanf("%d%d",&m,&n)==2&&原创 2016-04-16 21:38:21 · 277 阅读 · 0 评论 -
UVa UVA1606 Amphiphilic Carbon Molecules
1.任意枚举两个点计算两边黑点加白点最大值2.任选一个基准点,引一根直线绕着转,计算两边黑点加白点最大值;对于2,再优化一下,将其他点较基准点的极角排序:一个小技巧:将黑点关于基准点对称就相当于白点了,于是只要计算直线一边的点的数目最大值就好了注:当中遇到了一个函数atan2:正表示从 X 轴逆时针旋转的角度,结果为负表示从 X 轴顺时针旋转的角度#includ原创 2016-05-14 10:54:41 · 442 阅读 · 0 评论 -
UVa 116 Unidirectional TSP (多段图的最短路 DP)
阶段很明显即走到第几列 ;状态:走到第i列j行,d[i][j] 表示至少还要经过的整数,便是求d[i]中的最小解;决策:三种走法;决策选择:选d[i][j]最小的那个#include#include#include#includeusing namespace std;const int maxn=100+5;int G[maxn][maxn],d[maxn][原创 2016-05-15 10:13:25 · 398 阅读 · 0 评论 -
UVa 12563 Jin Ge Jin Qu hao(DP 多种状态表示)
状态A状态:d[i][j] 已经第i首歌还剩j时间,还能最多唱几首决策:唱或不唱 1)d[i][j]-->d[i+1][j-song[i]] ; 2)d[i][j]-->d[i+1][j] ;选择:最大的但j>0的 int dp(int i,int j){ int& ans=d[i][j]; if(d[i][j]>=0) return ans;原创 2016-05-15 21:05:18 · 715 阅读 · 0 评论 -
UVa 1599 Ideal Path[待AC]
dix[]保存到终点的最短权值,d[]保存到终点的最短边长结构体保存边和权值,二维数组太大用不了;一直Runtime Error.....#include#include#include#include#include#include#includeusing namespace std;const int INF=(1<<30);const int maxn=100原创 2016-05-02 08:35:28 · 314 阅读 · 0 评论 -
八面码问题(BFS+Hash)
#include#include#include#include#include#include#include#include#includeusing namespace std;typedef int State[9];const int maxn=1000000;State st[maxn],goal; //相当于st[maxn][9]保存走的每一步下的8个数字原创 2016-05-07 09:18:28 · 486 阅读 · 0 评论 -
UVa 1343 The Rotation Game(IDA*)
主要是设计乐观估计函数来减枝假设中心区域有6个2,2个3,那肯定是消掉3最好,毕竟就两个。那么理想情况下,旋转一次就能把一个3变成2,那么最少操作2次。我们用h()来计算最少还要操作几次,其原理是假设中心区域都放1或2或3,返回至少操作的次数中最小的数maxd是假设最多能操作的数;d是已经操作的数;那么就可以得出乐观估计函数 h()+d>maxd 其含义为 : 若原创 2016-05-08 15:14:37 · 555 阅读 · 0 评论 -
UVa 1601 The morning after Halloween(单向BFS+双向BFS)
//测试数据 /*5 5 2######A#B## ##b#a######16 4 3################## ########## ### ABCcba #################16 16 3################### ## # #### # ## # c## ## ########b##原创 2016-05-08 17:33:21 · 889 阅读 · 0 评论 -
UVA 437 The Tower of Babylon
#include#include#include#include#include#include#includeusing namespace std;//状态定义:d[idx][h] //现在是序列为idx的长方体,高h在idx中第几个 最多还能有多高(包括当前这个立方体) int blocks[35][3],d[35][3],N;int dp(int idx,int h)原创 2016-07-12 10:40:09 · 235 阅读 · 0 评论 -
UVA 1347 Tour
可以将题目转化为两个人同时向最右边走去那么状态表示最容易想到 的是 d(i,j) 两个人位于i,j位置至少还需要走多远但这样无序的策略会造成 1) 无法判断是否两次经过了同一点 2)无法判断是否每个点都走遍了 3)i,j 的下一步能走哪些点为解决这些问题 , 定义 d(i,j) 为1~max(i,j) 都走遍了 ,所以状态d(n,n)肯定就都走遍了 但是 i可以走 i+1~n原创 2016-07-12 16:39:15 · 249 阅读 · 0 评论 -
UVA 11584 Partitioning by Palindromes
#include#include#include#include#include #include#includeusing namespace std;const int maxn=1000+5;int P[maxn][maxn];string s;int d[maxn]; // d(i) 1~i 的最小回文串的数目 int judge(int i,int j){原创 2016-07-13 16:25:19 · 185 阅读 · 0 评论 -
UVA 1625 Color Length
http://blog.youkuaiyun.com/sdfzyhx/article/details/51675691#include#include#include#include#include #include#includeusing namespace std;const int maxn=5000+5; int d[maxn][maxn],cnt[maxn][原创 2016-07-14 09:15:01 · 235 阅读 · 0 评论 -
UVA 1625 Color Length
#include#include#include#include#include #include#includeusing namespace std;const int maxn=1000+5;int L,N,C[maxn],d[maxn][maxn];int dp(int left,int right){ int& ans=d[left][right]; if(an原创 2016-07-14 15:46:09 · 231 阅读 · 0 评论 -
UVA 12186 Another Crisis
#include#include#include#include#include #include#includeusing namespace std;const int maxn=100000+5;int T;//d(u) 第u个人至少需要多少工人 vector sons[maxn];int dp(int u){ int k=sons[u].size(); if(原创 2016-07-15 16:22:05 · 270 阅读 · 0 评论 -
UVA 1220 Party at Hali-Bula(树的最大独立集)
树的独立集:即集合中任选两个点互相不相邻,互相不构成父子关系。 且其中最大的集合即为最大独立集状态定义:1)d(u,1) ,f(u,1) 表示选u点情况下,在u的子树中,能得到的最大人数以及方案的唯一性 2)d(u,0) ,f(u,0) 表示不选u点情况下,在u的子树中,能得到的最大人数以及方案的唯一性状态转移:对于1)在选了u的情况下,肯定就不能选u的字原创 2016-07-15 19:36:44 · 298 阅读 · 0 评论 -
UVA 11582 Colossal Fibonacci Numbers!
原则1:n的余数最多有n种,所以最多n^2就会一个循环,就想400前后同一天星期几也一样,是个至少要满足的循环n是1~1000,f函数从第3项开始算时间超出,所以直接打表#include#include#include#include#includeusing namespace std; const int maxn=1000+5;int ans[maxn][maxn*6]原创 2016-07-05 16:05:40 · 228 阅读 · 0 评论 -
UVA 1218 Perfect Service
#include#include#include#include#include #include#includeusing namespace std;const int maxn=10000+5;const int INF=1000000000;vector G[maxn],V;int p[maxn],d[maxn][3];//d(u,0) u是服务器 //d(u,原创 2016-07-15 22:13:57 · 248 阅读 · 0 评论 -
UVA 10820 Send a Table
设f(m,n) 设m于是问题转化为求n的个数f(n)于是个数=2*f(n)+1其中1是f(1,1),乘以2表示,m,n反一反#include#include#include#include#include#includeusing namespace std;void phi_table(int n,int *phi){ for(int i=1;i<=n;i++)原创 2016-07-06 17:11:29 · 241 阅读 · 0 评论 -
UVA 1262 Password
#include#include#include#include#include#include#includeusing namespace std;vector Alpha[5];void GetAlpha(char a[][6],char b[][6]) //得到待选的字母表 { for(int i=0;i<5;i++) Alpha[i].clear(); i原创 2016-07-06 19:23:17 · 327 阅读 · 0 评论 -
UVA 1637 Double Patience(DP+概率)
一共9堆排,每堆牌有0~4 这5种状态,所以一共有5^9=1953125种状态定义:对于状态i,d[i]表示在这种状态下要成功的概率,也即是后序状态成功几率的平均值状态转移:也即是1)拿这两对相同的牌 2)拿下一对相同的牌状态选取:因为是计算总的成功的概率所以不存在最优的解概率计算:利用全概率公式,也即是 一个状态的成功的概率 等于 后续状态下的成功概率平原创 2016-07-07 17:19:25 · 1115 阅读 · 1 评论 -
UVA 580 Critical Mass(递推)
递推思想就是把这一项递推到前一项,把问题简单化,例如Fibonacci数列f(n)=f(n-1)+f(n-2)题目的意思就是n个长度字符中至少有3个连续的U的字符有几种于是问题核心就是怎么递推,使问题规模减少假设答案为f(n),从第一个连续的U开始编号为第i,i+1,i+2个于是字符串可以分为3部分:第一部分为1~i-1设有g(i-1)种g(i-原创 2016-07-08 10:55:14 · 397 阅读 · 0 评论 -
UVA 12034 Race
递推假设第一名有i人 ,即C(n,i) i∈[1,n] ,剩下n-i个人的名次有f(n-i)种可能性,只要对于每种排名,将i个人都放在并列第一就是一种新的排名所以f(n)=∑f(n-1)*C(n,i);对于这i个人不需要考虑剩下如处于第二第三的情况,因为f(n-i)中已经包含这种情况了剩下就是计算C(n,m)的问题,使用公式c(n,m)=n!/[(n-m)!*m!] 肯定会原创 2016-07-08 16:07:55 · 277 阅读 · 0 评论