csp复赛必备 对拍
2024-10-24 23:22:27
发布于:浙江
对拍是什么就不比多说了,(生成随机数据,不断用暴力代码测试优化代码)
下面是生成10000个范围0到10000的随机数
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("1,in","w",stdout);
srand(time(0));
for(int i=0;i<10000;i++)
{
cout<<rand()%10000<<" ";
}
return 0;
}
现在有这样的一道题
n个数,m次询问,求某一区间的和
如
5 3
1 3 5 7 9
1 2
3 5
2 4
输出
4
21
15
而你写出了这样的暴力
#include <iostream>
using namespace std;
int a[100005],n,m,x,y;
//m次询问求(x,y)之间的和
int main(){
freopen("data.in","r",stdin);
freopen("bao.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
while(m--){
int x,y,ans=0;
cin>>x>>y;
for(int i=x;i<=y;i++){
ans+=a[i];
}
cout<<ans<<endl;
}
return 0;
}
以及这样的优化
#include <iostream>
using namespace std;
int a[100005],n,m,x,y;
int sum[100005];
//m次询问求(x,y)之间的和
int main(){
freopen("data.in","r",stdin);
freopen("right.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
while(m--){
int x,y,ans=0;
cin>>x>>y;
cout<<sum[y]-sum[x-2]<<endl;
}
return 0;
}
(为了演示,此代码有误,正确代码应该是个人都会)
那么就有以下操作
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(){
freopen("data.in","w",stdout);
srand(time(0));//随机数种子,以时间作为种子,time(0)每时每刻的时间戳
int n=rand()%10000;
int m=rand()%5000;
cout<<n<<" "<<m<<endl;
for(int i=0;i<n;i++){
cout<<rand()%200-rand()%100<<" ";
}
for(int i=0;i<m;i++){
int x=rand()%n;
int y=rand()%(n-x+1)+x;
cout<<x<<" "<<y<<endl;
}
return 0;
}
这样就生成了一堆数据,然后将两个程序运行一下生成exe文件
下面进行对拍
:loop
rand.exe//运行两个文件
right.exe
bao.exe
fc right.out bao.out//fc比较两个文件
if not errorlevel 1 goto loop//判断是否有差异
pause
把它丢到devc++运行就行了
这是成功比较出问题的情况
最肝的一集,个人认为手写的更有性价比
全部评论 3
不是吧,这是半成品,只是先保存一下
2024-10-24 来自 浙江
0原始人生成数据办法(
2024-10-20 来自 广东
06,成功几率几乎为0
2024-10-20 来自 浙江
0
有帮助,赞一个