实现简单的对拍

自带WA自动机属性的ACMer,经常会遇到无限提交然后就是wa的情况,但是就是不知道自己到底哪里出错了。除了cf之类的网站能得到部分数据以外,很难有网站会告诉你数据。所以可以暴力写一发或者找一个正确的cpp文件,产生几组随机数,简单跑几次,,如果出现两者不一样的情况,再做分析。对拍就完成了这么一个功能。


首先,对拍的前提是你的暴力代码是完全正确的,你的随机数产生的数据是完全符合题意的。


以a+b为例,来了解一下最简单的对拍小程序。

先写一个错误的cpp文件,命名为my_cpp。

#include<bits/stdc++.h>
using namespace std;

int main()
{  
    int a,b,ans;  
    scanf("%d%d",&a,&b);
 	ans=a*b;
	printf("%d\n",ans);
	
    return 0;
}



然后,运行此cpp,得到一个.exe文件。

然后写一个正确的cpp文件,命名为test。

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int a,b;
	long long ans;  
	scanf("%d%d",&a,&b);
	ans=a-b;
	printf("%lld\n",ans);
	return 0;
}


运行此cpp,同样得到一个.exe文件。

然后写一个产生随机数的cpp,命名为data。

#include<bits/stdc++.h>
using namespace std;

int main()
{
	srand(time(0));
	int a,b;
	a=rand()*100,b=rand();
	printf("%d %d\n",a,b);
	return 0;
}


得到三个exe文件,将这三个exe文件放在同一个文件夹内。

然后建立一个.txt文件,内容是:

:again  
data > input.txt  
my_cpp < input.txt > my_cpp_output.txt  
test < input.txt > test_output.txt  
fc biaoda_output.txt test_output.txt  
if not errorlevel 1 goto again  
pause 
注意文件的名称一定要一致。

然后保存此txt,将后缀改为.bat。运行此bat文件。

就会得到这样的结果,错误数据会自动写入input文件中。



还有一种方法,将bat文件写成cpp文件,编译运行得到exe文件,运行exe文件会得到同样的结果。

代码:

#include<iostream>  
#include<windows.h>  
using namespace std;  
int main()  
{
	int t=0;
    while(1)  
    {
        system("data.exe > data.txt");  
        system("my_cpp.exe < data.txt > my_cpp.txt");  
        system("test.exe < data.txt > test.txt");  
        if(system("fc test.txt my_cpp.txt"))   
        {
        	t=1;
        	break;
		}
    }  
    if(t==0) 
	cout<<"no error"<<endl;  
    else cout<<"error"<<endl; 
    getchar();
    return 0;  
}  

linu下的代码:

#!/bin/bash
while true; do
    ./data > data.in
    ./std <data.in >std.out
    ./Todobe <data.in >Todobe.out
    if diff std.out Todobe.out; then
        printf "AC\n"
    else
        printf "Wa\n"
        exit 0
    fi
done


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Android 中,你可以使用 Service 和 Camera API 来实现后台照。以下是一个简单的示例: 1.创建一个 Service 类,继承自 Service: ``` public class CameraService extends Service { private Camera mCamera; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); // 打开摄像头 mCamera = Camera.open(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // 设置摄像头参数 Camera.Parameters params = mCamera.getParameters(); params.setPictureSize(640, 480); mCamera.setParameters(params); // 照 mCamera.takePicture(null, null, mPictureCallback); // 返回 START_STICKY 或者 START_REDELIVER_INTENT,以确保 Service 能够在被销毁后重新启动 return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); // 释放摄像头 mCamera.release(); } // 照回调函数 private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { // 处理照数据 // ... // 照完成后再次启动 Service,以实现循环照 startService(new Intent(CameraService.this, CameraService.class)); } }; } ``` 2.在 AndroidManifest.xml 文件中注册 Service: ``` <service android:name=".CameraService" /> ``` 3.在 Activity 中启动 Service: ``` Intent intent = new Intent(this, CameraService.class); startService(intent); ``` 在上述示例中,Service 的 onCreate() 方法用于打开摄像头,onStartCommand() 方法用于设置摄像头参数并照,onDestroy() 方法用于释放摄像头。照回调函数 mPictureCallback 用于处理照数据,并再次启动 Service,以实现循环照。 需要注意的是,在 Android 9 或以上的版本中,禁止在后台调用摄像头,除非你的应用是系统应用或者具有特殊权限。因此,你需要确保你的应用具有相关权限。在 Android 11 中,你必须在应用运行时请求用户授权,以允许你的应用在后台调用摄像头。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值