关于c++对拍的办法

众所周知,在\(oi\)学习以及考试中,对拍是一件非常重要的事。

有了对拍后,我们可以利用它发现代码上的一些非常难看出来的错误。

编写对拍程序一般有两个办法。

方案一

编写一个对拍的\(cpp\),并且利用文件操作和\(fc\),进行输出答案的判断。\(fc\)是系统的函数,可以判断两个文件是否一致。

注意:一定要将所有的\(cpp\)\(exe\)放置到一个文件夹

对拍代码如下:

#include<bits/stdc++.h>
using namespace std;
int Case=0;
int main() {
    while(1) {
        system("Make_date.exe");
        system("Ac.exe");
        double st=clock();
        system("Wa.exe");
        double ed=clock();
        printf("第%d个测试点:",++Case);
        if(system("fc Ac.out Wa.out"))return !puts("Wrong Answer");
        printf("Accept,耗时:%.3fms\n",ed-st);
    }
}

数据生成器如下:

#include<bits/stdc++.h>
using namespace std;
int Random(int n){
    return rand()*rand()%n;
}
int main() {
    srand(time(0));
    freopen("data.in","w",stdout);
    //主程序生成。。。
}

WA代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

#define reg register
#define rep(a,b,c) for(reg int a=(b),a##_end_=(c); a<=a##_end_; ++a)
#define ret(a,b,c) for(reg int a=(b),a##_end_=(c); a<a##_end_; ++a)
#define drep(a,b,c) for(reg int a=(b),a##_end_=(c); a>=a##_end_; --a)
#define debug(x) cerr<<#x<<" = "<<x<<" ";
#define LL long long

inline int Read() {
    int res=0,f=1;
    char c;
    while(c=getchar(),c<48||c>57)if(c=='-')f=0;
    do res=(res<<3)+(res<<1)+(c^48);
    while(c=getchar(),c>=48&&c<=57);
    return f?res:-res;
}

template<class T>inline bool Min(T &a,T const&b) {return a>b?a=b,1:0;}
template<class T>inline bool Max(T &a,T const&b) {return a<b?a=b,1:0;}
const int N=1e5+5,T=1<<22;

int main() {
    freopen("data.in","r",stdin);
    freopen("Wa.out","w",stdout);
    // 错误代码。。。
}

AC代码:

#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
int main() {
    freopen("data.in","r",stdin);
    freopen("Ac.out","w",stdout);
    // AC代码。。。
}

不过,这个方法最为麻烦的事情就是文件操作极其烦人。

每次不能直接复制粘贴,还要编译运行。

那么,另一种方法就出现了。。

方法二

利用windows环境下的批处理进行对拍。

怎么利用批处理文件对拍呢?

首先,我们要先新建一个后缀为\(.bat\)的文件。

然后将下列代码复制进去就行了,不用文件操作直接双击即可。

代码如下:

@echo off  
:loop  
    Make_data.exe>data.in  //随机样本
    Ac.exe<data.in>Ac.out //正确代码
    Wa.exe<data.in>Wa.out  //测试代码
    fc Ac.out Wa.out  
if not errorlevel 1 goto loop  
pause  
goto loop

转载于:https://www.cnblogs.com/dsjkafdsaf/p/11258714.html

使用C++代码获取无人机照保存的照片下面有黑边,可能有以下原因及对应的解决办法: ### 原因 - **图像分辨率不匹配**:无人机相机的实际成像分辨率与保存图像时设置的分辨率不一致,可能导致图像部分区域未被填充,从而出现黑边。 - **图像裁剪或缩放不当**:在处理图像过程中,如裁剪或缩放操作有误,可能会使图像某些区域缺失或被不恰当处理,进而产生黑边。 - **相机畸变矫正问题**:相机畸变矫正过程中,如果参数设置不准确,可能会导致图像边缘出现黑边。例如在使用`initUndistortRectifyMap`函数时,参数设置不合理就可能出现这种情况。 - **图像编码或传输问题**:在图像编码或传输过程中,可能会引入错误或丢失数据,导致图像出现黑边。 ### 解决办法 - **检查并调整分辨率**:确保保存图像时设置的分辨率与无人机相机的实际成像分辨率一致。可以通过查看无人机相机的文档或设置来获取实际分辨率。 ```cpp #include <opencv2/opencv.hpp> int main() { cv::Mat image = cv::imread("drone_photo.jpg"); // 假设实际分辨率为1920x1080 cv::Mat resizedImage; cv::resize(image, resizedImage, cv::Size(1920, 1080)); cv::imwrite("resized_drone_photo.jpg", resizedImage); return 0; } ``` - **检查图像裁剪和缩放操作**:仔细检查代码中的裁剪和缩放操作,确保其参数设置正确。避免不必要的裁剪或缩放。 ```cpp #include <opencv2/opencv.hpp> int main() { cv::Mat image = cv::imread("drone_photo.jpg"); // 确保裁剪区域合理 cv::Rect roi(0, 0, image.cols, image.rows); cv::Mat croppedImage = image(roi); cv::imwrite("cropped_drone_photo.jpg", croppedImage); return 0; } ``` - **调整相机畸变矫正参数**:如果是相机畸变矫正问题,需要确保畸变矫正参数准确。可以重新进行相机标定,获取更准确的相机矩阵和畸变系数。 ```cpp #include <opencv2/opencv.hpp> int main() { cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << 1000, 0, 500, 0, 1000, 300, 0, 0, 1); cv::Mat distCoeffs = (cv::Mat_<double>(1, 5) << 0.1, 0.01, 0, 0, 0); cv::Mat image = cv::imread("drone_photo.jpg"); cv::Mat undistortedImage; cv::undistort(image, undistortedImage, cameraMatrix, distCoeffs); cv::imwrite("undistorted_drone_photo.jpg", undistortedImage); return 0; } ``` - **检查图像编码和传输过程**:确保图像编码和传输过程中没有错误。可以尝试使用不同的图像编码格式或传输协议,以避免数据丢失或损坏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值