POJ:Arbitrage (搜索,汇率换算是否赚?)
POJ 2240 http://poj.org/problem?id=2240
题意:判断是否存在使得汇率增多的环
【任意一个点的汇率增多都可以】
Floyd 简单变形
\(w[i][j] = max(w[i][j], w[i][k]*w[k][j])\)
#ifndef ONLINE_JUDGE
#pragma warning(disalbe : 4996)
#endif
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<map>
#include<cstring>
using namespace std;
const int maxn = 40;
double d[maxn];
int n, m;
double w[maxn][maxn];
map<string, int>mp;
void floyd() {
for (int k = 1; k <= n; ++k)
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
w[i][j] = max(w[i][j], w[i][k] * w[k][j]);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif // !ONLINE_JUDGE
int kcase = 0;
while (cin >> n && n) {
mp.clear();
string s;
for (int i = 1; i <= n; ++i) {
cin >> s;
mp[s] = i;
w[i][i] = 1;//自己换自己
}
cin >> m;
string s1, s2;
double rat;
for (int i = 0; i < m; ++i) {
cin >> s1 >> rat >> s2;
w[mp[s1]][mp[s2]] = rat;
}
floyd();
bool flag = 0;
for (int i = 1; i <= n; ++i)
if (w[i][i] > 1.0) { flag = 1; break; }
printf("Case %d: ", ++kcase);
if (flag) printf("Yes\n");
else printf("No\n");
}
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
system("out.txt");
#endif // !ONLINE_JUDGE
return 0;
}
bellman_ford 判断正环
#ifndef ONLINE_JUDGE
#pragma warning(disalbe : 4996)
#endif
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<map>
#include<cstring>
using namespace std;
const int maxn = 40;
double d[maxn];
int n, m;
struct Edge {
int u, v;
double r;
}edge[maxn * maxn];
map<string, int>mp;
bool bellman_ford(int s) {
memset(d, 0, sizeof(d));
d[s] = 1;
for(int i = 1;i <=n; ++i)
for (int j = 0; j < m; ++j) {
int u = edge[j].u;
int v = edge[j].v;
double r = edge[j].r;
if (d[v] < d[u] * r)
d[v] = d[u] * r;
}
if (d[s] > 1.0)return true;
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif // !ONLINE_JUDGE
int kcase = 0;
while (cin >> n && n) {
mp.clear();
string s;
for (int i = 1; i <= n; ++i) {
cin >> s;
mp[s] = i;
}
cin >> m;
string s1, s2;
double rat;
for (int i = 0; i < m; ++i) {
cin >> s1 >> rat >> s2;
edge[i].u = mp[s1];
edge[i].v = mp[s2];
edge[i].r = rat;
}
bool flag = false;
for(int i = 1;i <=n; ++i)
if (bellman_ford(i)) {
flag = true;
break;
}
printf("Case %d: ", ++kcase);
if (flag) printf("Yes\n");
else printf("No\n");
}
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
system("out.txt");
#endif // !ONLINE_JUDGE
return 0;
}
POJ:Arbitrage (搜索,汇率换算是否赚?)的更多相关文章
- [java] 更好的书写equals方法-汇率换算器的实现(4)
[java] 更好的书写equals方法-汇率换算器的实现(4) // */ // ]]> [java] 更好的书写equals方法-汇率换算器的实现(4) Table of Content ...
- [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3
[java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 // */ // ]]> [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 Table of C ...
- [java] jsoup使用简介-汇率换算器实现-插曲2
[java] jsoup使用简介-汇率换算器实现-插曲2 // */ // ]]> [java] jsoup使用简介-汇率换算器实现-插曲2 Table of Contents 1 系列文章 ...
- [java] 汇率换算器实现(3)
[java] 汇率换算器实现(3) // */ // ]]> [java] 汇率换算器实现(3) Table of Contents 1 系列文章地址 2 前言 3 提取简单表单信息 3.1 ...
- [java] 汇率换算器实现-插曲1-正则表达式(1)
[java] 汇率换算器实现-插曲1-正则表达式(1) // */ // ]]> // */ // ]]> [java] 汇率换算器实现-插曲1-正则表达式(1) Table of C ...
- [java] 汇率换算器实现(2)
[java] 汇率换算器实现(2) // */ // ]]> // */ // ]]> [java] 汇率换算器实现(2) Table of Contents 1 系列文章地址 2 前 ...
- [java] 汇率换算器实现(1)
[java] 汇率换算器实现(1) // */ // ]]> [java] 汇率换算器实现(1) Table of Contents 1 问题描述 2 类设计 3 初步实现 3.1 建立项目 ...
- 【菜鸟学Python】案例一:汇率换算
汇率换算V1.0 案例描述: 设计一个汇率换算器程序,其功能是将外币换算成人民币,或者相反 案例分析: 分析问题:分析问题的计算部分: 确定问题:将问题划分为输入.处理及输出部分: 设计算法:计算部分 ...
- 汇率换算自然语言理解功能JAVA DEMO
>>>>>>>>>>>>>>>>>>>>>>>> 欢迎转 ...
- catch that cow POJ 3278 搜索
catch that cow POJ 3278 搜索 题意 原题链接 john想要抓到那只牛,John和牛的位置在数轴上表示为n和k,john有三种移动方式:1. 向前移动一个单位,2. 向后移动一个 ...
随机推荐
- webpack 从 v4 升级到 v5
准备工作 Node.js 至少升级到 v10.13.x 以上. 其它 修改 webpack.config.js 配置,以及部分老的 webpack 插件要更新. 参考 中文版 从 v4 升级到 v5 ...
- weblogic端口号和内存怎么修改?
在WebLogic中修改端口号和内存分配是一项重要的任务,它涉及到服务器性能和应用程序的可靠性.下面我将详细介绍如何修改WebLogic的端口号和内存设置. 修改端口号 WebLogic使用多个端口来 ...
- 这下对阿里java这几条规范有更深理解了
背景 阿里java开发规范是阿里巴巴总结多年来的最佳编程实践,其中每一条规范都经过仔细打磨或踩坑而来,目的是为社区提供一份最佳编程规范,提升代码质量,减少bug. 这基本也是java业界都认可的开发规 ...
- C# 常量 结构体 委托
常量 const double PI = 3.1415926; 常量名命名一般使用大写字母 枚举类型 开发一个游戏,游戏角色有法师(Mage).射手(Archer).刺客(Assassin).坦克(T ...
- 算法与数据结构——kpm算法
- C++ Qt开发:ToolBar与MenuBar菜单组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ToolBar ...
- C++ Qt开发:标准Dialog对话框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍标准对话框QI ...
- PTA数组及排序查找题解与解题思路
PTA数组及排序查找题解与解题思路 函数题目 函数题目为平台提供的裁判程序调用所完成的函数进行判题,题目规定语言为C语言 6-1 求出二维数组的最大元素及其所在的坐标 本题较为简单,考察的是如何遍历一 ...
- bash shell笔记整理——ls命令
语法: ls [选项] [文件 或 目录] 选项 使用说明 –a 显示指定目录下的所有文件,包括隐藏文件. -A 显示除了.和..的外的所有文件. -l 显示详细的文件信息. -d 如果是目录,只显示 ...
- rcs群发软件系统功能设计与应用,rcs群发软件系统,rcs群发软件
随着科技的不断发展,人们对于通讯方式的需求也在不断变化,传统的短信.电话已经无法满足人们对于高效.便捷.实时的通讯需求,正是在这样的背景下,富通讯解决方案(Rich Communication Sui ...