以前一直是用控制台cv输入输出的,有些题这样真的太麻烦了,首先是debug完要重新粘贴,而且比对输出和答案太麻烦了(打cf的时候多是一个样例一个输出,输入和输出混在一起)。
所以研究了两天文件输入和比对,还熟悉了一下visual studio的操作。这里总结一下。
1.文件输入输出
在源文件中创建txt文本即可直接用相对路径访问。
此处的correct文本为正确答案用于比对输出
#pragma warning(disable:4996);
//visual studio有时候会报安全错误,这个可以无视
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
2.visual studio 2022对拍
可以先暴力写一个测试函数保证答案正确 。
随机数据用<random>里的mt19937
#include<iostream>
#include<random>
using namespace std;
#pragma warning(disable:4996);
mt19937 rnd(time(0));//种子
long long random(long long s, long long e) {
long long t = (int)((1.0 * rnd() / UINT_MAX) * (e - s + 1) + s);
return t;
}
#define r(a,b) random(a,b)
int main() {
freopen("in.txt", "w", stdout);
}
//可以取到2^19973-1
①新建一个cpp文件暴力写进去用来测试
--对暂时不需要的cpp文件可以右键属性
出现×说明改文件暂时不起作用
-----------------------------------------------------------------------------------------------------------
随机数生成的文件里打入自定义的随机数格式代码
#include<iostream>
#include<random>
using namespace std;
#pragma warning(disable:4996);
mt19937 rnd(time(0));
long long random(long long s, long long e) {
long long t = (long long)((1.0 * rnd() / UINT_MAX) * (e - s + 1) + s);
return t;
}
#define r(a,b) random(a,b)
int main() {
freopen("in.txt", "w", stdout);
int t1 = r(1, 20) ;int t2 = r(1, 20);
cout << t1<<" "<< t2<<endl;
for (int j = 1; j <= t1; j++) {
cout << r(1, 20) << endl;
}
}
输入文件就准备好了
然后运行对拍标准程序
correct文件中出现结果
然后运行主程序(记得关闭原程序)
对比得到,对拍成功!
3.文件差异比对
win+r打开cmd
输入
fc "文件地址" "文件地址"
比对两文本。
这是有差异的情况;
这是无差异的情况。
visual studio内部也有cmd命令,而且更加方便
视图—其他窗口-命令窗口
输入以下命令(他会有智能提示)
他会指名错误
总结:
对拍最好有这些文件——
Test就是你本题的正确解法
in,out输入输出
correct.txt为答案
random.cpp产生随机数输入
answer.cpp为暴力但正确的解法
不过visual studio还是比较麻烦,建议使用vscode