如何更改UNIX语法以获取正确的输出
How to change UNIX Syntax to get correct output?
我找到了解决此kattis问题的解决方案:
https://open.kattis.com/problems/funnygames
但它使用>?= unix语法,我需要更改以在kattis中进行编译。我将它们更改为STD :: Min和STD :: Max,但我没有得到正确的答案(我每次都会得到迈克尔)。
原始代码:
/* Sample solution to "Funny Games" from NCPC 2005
* Algorithm: essentially continuous DP, keep track of winning intervals
* Author: Per Austrin
*/
#include <cmath>
#include <cassert>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef pair<double, double> pdd;
template <class It, class OIt>
OIt ival_union(It begin, It end, OIt dest) {
sort(begin, end);
while(begin != end) {
*dest = *begin++;
while(begin != end && begin->first < dest->second + 1e-8)
dest->second >?= begin++->second; //Change 1
++dest;
}
return dest;
}
int main(void) {
int n, k;
double x, f[10], maxf;
pdd win[10000], lose;
for (scanf("%d", &n); n--; ) {
scanf("%lf%d", &x, &k);
maxf = lose.second = 0;
for (int i = 0; i < k; ++i)
scanf("%lf", f+i), win[i] = make_pair(1, 1 / f[i]), maxf >?= f[i]; //Change 2
for (int nwin = k, l = 0; x > lose.second; ++l) {
nwin = ival_union(win + l , win + nwin, win + l) - win;
lose.second = (lose.first = win[l].second) / maxf;
if (l < nwin-1) lose.second <?= win[l+1].first; //Change 3
for (int i = 0; i < k; ++i)
win[nwin++] = make_pair(lose.first/f[i], lose.second/f[i]);
}
assert(fabs(x-lose.first) > 1e-6 && fabs(x-lose.second) > 1e-6);
printf("%sn", x < lose.first ? "Nils" : "Mikael");
}
}
和我的3个更改:
std::max(dest->second, begin++->second); //Change 1
scanf("%lf", f + i), win[i] = make_pair(1, 1 / f[i]), std::max(maxf, f[i]); //Change 2
if (l < nwin - 1) std::min(lose.second, win[l + 1].first); //Change 3
输入是
4
6 2 0.25 0.5
10 2 0.25 0.5
29.29 4 0.3 0.7 0.43 0.54
29.30 4 0.3 0.7 0.43 0.54
输出应为
Mikael
Nils
Nils
Mikael
,但是在更改后,我得到
Mikael
Mikael
Mikael
Mikael
在阅读了我意识到我做了最大的评论后。更改为:
dest->second=std::max(dest->second, begin++->second);
scanf("%lf", f + i), win[i] = make_pair(1, 1 / f[i]), maxf=std::max(maxf, f[i]);
if (l < nwin - 1) lose.second=std::min(lose.second, win[l + 1].first);
感谢您的帮助!
相关文章:
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 我无法获取以下代码的输出
- 从C++应用获取PowerShell脚本输出
- 我无法从 C# 获取 PInvoke 的输入参数以C++ DLL 以用作 IntPtr 的输出
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 使用提升过程获取 shell 命令的标准输出
- 从 exprTk 获取向量作为输出
- 如何使用 c++ libboost 运行进程并获取其输出?
- 从用户获取输入/输出
- 从 c++ 中的实例化进程获取输出的可靠方法是什么?
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- TFLite 隔离错误,通过获取C++输入和输出
- 在集成终端上运行vscode lldb调试器时,如何获取程序的输出?
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用 qt 或 c++ 从桌面获取输入和输出
- 如何从amd gpus的显示输出中获取图像数据
- 获取使用p4api运行的Perforce命令的输出
- 获取C++输出流中元素的大小
- 如何从进程获取实时、非阻塞输出
- 异步输入和输出/获取前缀后的输入