随笔分类 - 周训练
摘要:http://poj.org/problem?id=2049/* 我认为这是一道非常好的搜索题,第一次使用到了优先队列,(是更新的距离最短),0代表空 1代表 们 inf 代表wall 用h[][]存储行的信息,l[][],存储列的信息{学到的新知识,对于这种一方格作为点的 图 用两个二维图分别存储变得信息}*/#include<cstdio>#include<cstring>#include<queue>using namespace std;#define maxn 250#define inf 99999999struct node{ int x; i
阅读全文
摘要:一直很晕,用c++16Ms过,用G++WA!!!!!!!!http://poj.org/problem?id=3278#include<stdio.h>#include<string.h>#define N 100000int n,k,vis[N];struct node{ int step; int num;}p[N*10];int bfs(){ memset(vis,0,sizeof(vis)); int head=0,tail=0; p[head].num=n; p[head].step=0; vis[n]=1; tail++; w...
阅读全文
摘要:#include<stdio.h>#define max 999999#define N 1000int dis[N],vis[N],map[N][N];int sum,n;void prim(int x){ int i,j,k; for(i=0;i<n;i++) { dis[i]=map[x][i]; vis[i]=0; } vis[x]=1; dis[x]=0; for(i=1;i<n;i++) { int min=max; for(j=0;j<n;j++) { ...
阅读全文
摘要:#include<stdio.h>#define max 999999#define N 1000int dis[N],vis[N],map[N][N];int sum,n;void prim(int x){ int i,j,k; for(i=0;i<n;i++) { dis[i]=map[x][i]; vis[i]=0; } vis[x]=1; dis[x]=0; for(i=1;i<n;i++) { int min=max; for(j=0;j<n;j++) { ...
阅读全文
摘要:#include<cstdio>#include<stdlib.h>#define N 1000struct node{ int x,y,w;}p[N*N];int f[N];int cmp( const void *a ,const void *b){return (*(node *)a).w > (*(node *)b).w ? 1 : -1;}int find(int x){ if(x!=f[x])f[x]=find(f[x]); return f[x];}int main(){ int t,i,j,k,n,b; scanf("%d",&
阅读全文
摘要:http://poj.org/problem?id=2240floyd 的变形 题意 有n个货币,他们的交换情况m个例如:3USDollarBritishPoundFrenchFranc3USDollar 0.5 BritishPoundBritishPound 10.0 FrenchFrancFrenchFranc 0.21 USDollar求出 是否存个一个增长的货币回路#include<iostream>#include<string>#include<string.h>#include<stdio.h>const double eps=1
阅读全文
摘要:http://poj.org/problem?id=2253一个池塘中分布着n块可供青蛙跳跃的石头,坐标分别为sto[i].x和sto[i].y,给出Freddy和Fiona站的石头,问Freddy想借助这些石头,跳去Fiona那,它的跳跃距离至少是多少?最短路的变形啊 松弛方程 dis[j]=max(dis[k],map[k][j]);为什么松弛方程是上面那样呢?》首先我们回忆一下如果dis[j]>dis[k]+map[k][j],则更新其值是丛原点到j点的最短距离,那么在此dis[j]=max(dis[k],map[k][j])表示借助中间点跳的话,要跳的j点,则在路径中最长粗条di
阅读全文
摘要:#include<stdio.h>#define N 200#define max 999999int map[N][N],d[N];int n,ans,f;void init(){ int i,j; for(i=0;i<=n;i++) { d[i]=-max; for(j=0;j<=n;j++) map[i][j]=max; } f=0;ans=max;}void floyd(){ int i,j,k; for( i=1;i<=n;i++) { for(j=1;j<=n;j++) ...
阅读全文
摘要:http://poj.org/problem?id=1860题意 : 就是套汇的问题,汇率Rab, 增加了一个手续费 Cab 。。。。。。。每次的结果是 (本金 - 手续费) * 汇率,而且一个人拥有的钱的类型是已知的,拥有的value 钱的个数也是已知的, 问你能不能增值。输入 :3 2 1 20.0 //钱种类个数 汇率的个数,拥有第几种钱, 拥有多少钱1 2 1.00 1.00 1.00 1.00 //钱a, 钱b, rab, cab, rba, cba2 3 1.10 1.00 1.10 1.00想法: 应用b...
阅读全文
摘要:大致题意:输入由p、q、r、s、t、K、A、N、C、E共10个字母组成的逻辑表达式,其中p、q、r、s、t的值为1(true)或0(false),即逻辑变量;K、A、N、C、E为逻辑运算符,K --> : x && yA --> : x || yN --> not : !xC --> implies : (!x)||yE --> equals : x==y问这个逻辑表达式是否为永真式。PS:输入格式保证是合法的 解题思路:p, q, r, s, t不同的取值组合共32种情况,枚举不同取值组合代入逻辑表达式WFF进行计算。如果对于所有的取值组合,WF
阅读全文
摘要:http://poj.org/problem?id=2506#include<stdio.h>#include<string.h>int a[260],b[260];char str[260][260];void add(){ int i,j,k; str[0][0]='1';//不要忘了0,我就贡献了一次wa str[0][1]='\0'; str[1][0]='1'; str[1][1]='\0'; str[2][0]='3'; str[2][1]='\0'; for(i
阅读全文
摘要:题目大意:某公司每个月都会盈利或者亏损,盈利的金额为s,亏损的金额为d,该公司每连续5个月报一次财政状况,即(1-5,2-6,3-7,4-8,5-9,6-10,7-11,8-12),这八次报账都显示公司为亏损,问,该公司年底最多能盈利多少,如果不能盈利输出Deficit。 分析:由于每5个月的报账都为亏损,所有连续的5个月里至少有1个月为亏损,则可能产生最优解的情况为如下4种 1 2 3 4 5 6 7 8 9 10 11 12 s s s s d s s s s d s s //每5个月里只有1个月亏损 s s s d d s s s d d s s //每5个月里只有2个月亏损 s...
阅读全文
摘要:#include<stdio.h>#include<string.h>#define N 1100int n,str[N],k[N],a[N];char p[N];void pown(){ int i,j,b[N],g; for(i=1;i<=N;i++){a[i]=0;} a[0]=1; for(g=0;g<n;g++) { for(i=0;i<N;i++) { b[i]=a[i]; a[i]=0; } for(i=0;i<N;i++) { for(j...
阅读全文
摘要:http://poj.org/problem?id=1328Slyar:说一下题意。假设有一条无限长的海岸线,海岸线以上部分有n个岛屿。在海岸线上有雷达,每个雷达能够探测的范围为半径为d的圆,当且仅当一个岛屿与雷达的距离小于等于d时,岛屿能被雷达探测到。给出所有岛屿的坐标和雷达的半径。求最少需要用多少个雷达,使得所有的岛屿都被探测到。求出每个岛屿对应圆心在x轴上的范围,对左坐标排序后贪心选择。类似于:数轴上有N个点,要用几个单位长度区间才能将它们全部覆盖?具体实现见代码注释。这次用到了C语言的库函数qsort,写cmp函数的时候要注意浮点数的比较。另外这个排序只需要考虑左坐标即可,因为就算左坐
阅读全文
摘要://位压缩加搜索枚举,用pre记录其前驱#include<stdio.h>#include<string.h>#define N 100000struct node{ int x,y,num,pre,step;}p[N*4];struct nn{ int x,y;}g[N*4];char str[10][10];int vis[N];int d[16]={ 0xf888,0xf444,0xf222,0xf111, 0x8f88,0x4f44,0x2f22,0x1f11, 0x88f8,0x44f4,0x22f2,0x11f1, 0x888f,0x444f,0...
阅读全文
摘要:每次改变相邻位置,求最少步数到全部一样。这种矩阵求最少步数到某一状态一般是考虑BFS了,然后就是怎么简化题目的问题,反正就w和b这2个状态,0和1也是2个状态,所以很容易想到了位运算,16个位置看成16个2进制位就好(目的就是全1或全0),题目要求相邻位置改变,最近看MFC的我马上想到了逻辑操作符...这里的情况是反转,所以用异或...所以算法就很容易了,提前打表求出每一位相邻位置改变后的值(把该位置连同相邻置1,其余位置置0),然后BFS就行了http://poj.org/problem?id=1753#include<stdio.h>#include<string.h&g
阅读全文
浙公网安备 33010602011771号