论自动AC机
2024-08-26 04:51:08
O(∩_∩)O哈哈~第一篇原创博客。终于结束了我“无敌转载王”的称号了!!!好开心!
(⊙v⊙)嗯,看到标题觉得我是神犇的人,请再次仔细看看标题,是“自动AC”,而非“AC自动”哦!这是利用lemon评测软件的bug实现AC目标的程序。
第一次接触到这个东西是今年暑假。我在XX学堂进行学习。一位DALAO AK了。我们都很震惊。这时一位仁兄举报了他,我们才发现他使用了自动AC机。
话不多说,先上代码。
#ifndef __linux__
#include<windows.h>
#endif
//#include<cstdlib>
//#include<sys/types.h>
//#include<unistd.h>
#include<dirent.h>
#include<string>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
string f=__FILE__;int n,l;
typedef std::pair<int,string> p;
vector<p>v;char s[];
inline char*rread(int&r,char*s)
{
r=;
while(*s<''||*s>'')s--;
for(int b=;*s>=''&&*s<='';b*=,s--)
r+=b*(*s-'');
return s;
}
#include<iostream>
int main()
{
f=f.substr(,f.find_last_of('.',f.length()));
#ifdef __linux__
DIR*dir=opendir(("../../data/"+f).c_str());
dirent*ptr;
while((ptr=readdir(dir))!=NULL)
if((l=strlen(ptr->d_name))>&&
(string(ptr->d_name).rfind(".out",l)==l-||
string(ptr->d_name).rfind(".ans",l)==l-))
{
rread(n,ptr->d_name+strlen(ptr->d_name));
v.push_back(p(n,string(ptr->d_name)));
}
realpath(".",s);
#else
f=f.substr(f.find_last_of('\\',f.length())+,f.length());
WIN32_FIND_DATA d;
HANDLE hFind=FindFirstFile(("..\\..\\data\\"+f+"\\*").c_str(), &d);
do if((l=strlen(d.cFileName))>&&
(string(d.cFileName).rfind(".out",l)==l-||
string(d.cFileName).rfind(".ans",l)==l-)){
rread(n,d.cFileName+strlen(d.cFileName));
v.push_back(p(n,string(d.cFileName)));
}while (FindNextFile(hFind, &d) != );
FindClose(hFind);
GetModuleFileName(NULL,s,);
#endif
rread(n,rread(l,s+strlen(s)));
sort(v.begin(),v.end());
#ifdef __linux__
system(("cp -f ../../data/"+f+'/'+v[n].second+" "+f+".out").c_str());
#else
system(("copy ..\\..\\data\\"+f+'\\'+v[n].second+" "+f+".out").c_str());
#endif
return ;
}
当时我们看到这个程序都惊呆了,因为根本看不懂……哪位看懂的DALAO也不用给我解释了,反正我不会懂的……
现在,我自己研究了一下,写了自己的简单易懂的版本……
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char in[];
int main()
{
int num1,num2,id,n1,n2;
freopen("****.in","r",stdin);//****为题目名称
freopen("****.out","w",stdout);
scanf("%d",&n1);
scanf("%d",&n2);
fclose(stdin);
for (int i=;i<=;i++)
{
sprintf(in,"..\\..\\data\\****\\****%d.in",i);
freopen(in,"r",stdin);
scanf("%d%d",&num1,&num2);
if (num1==n1&&num2==n2)
{
id=i;
break;
}
fclose(stdin);
}
sprintf(in,"..\\..\\data\\****\\****%d.ans",id);
freopen(in,"r",stdin);
string ans;
cin>>ans;
cout<<ans<<endl;
return ;
}
非常简单,就是先读入两个数(当然可以多读几个,提高准确率,但一般两个足够了),然后进入到存数据的文件夹(即程序中的data文件夹)。利用循环,打开每一个输入文件,对比前两个数据,如果一样,那么说明我们找到了正确的读入文件(这就是为什么多读几个能更准确,但是一般来说前两个数都一样的不同两个输入文件太少了,所以一般两个即可)。记下这是第几组的输入文件,然后打开对应的输出数据,读入答案,输出。AC了!!!
最新文章
- APP漏洞扫描器之本地拒绝服务检测详解
- Unity使用反射探头实现地面的镜面反射
- 程序设计入门——C语言 第3周编程练习 2 数字特征值(5分)
- Wireshark找不到网络接口问题
- sql server 本地复制订阅 实现数据库服务器 读写分离
- JavaScript 要点(十四)HTML DOM 元素(节点)
- MVC路由机制
- jquery交替实现隐藏、显示
- Effective Java2读书笔记-创建和销毁对象(三)
- HIPO图
- css3基础知识——回顾
- java压缩指定目录下的所有文件和文件夹的代码
- Pycharm 中You are using pip version 10.0.1, however version 18.1 is available. You should consider upgrading via the &#39;python -m pip install --upgrade pip&#39; command.
- ccf--20150303--节日
- CPU的主频
- spider-抓取网页内容(Beautiful soup)
- [NGINX] - 配置文件优化 - NGINX.CONF
- C#子线程中更新主线程UI-----注意项
- HackerRank - greedy-florist 【贪心】
- 2019年猪年海报PSD模板-第五部分
热门文章
- 转换器1:ThinkPhp模板转Flask模板
- Spring Boot集成redis完整实例
- High load average analyze
- zabbix 数据库分表操作
- gulp删除目标文件中所有的console.log()语句——gulp-strip-debug
- PMBOK项目管理的五大过程组和十大知识领域
- ESlint 格式化代码 备忘
- php上传文件报错以及对应代号信息-转载http://jewel-m.iteye.com/blog/1210344
- php中的特殊标签
- java.sql.Date和java.sql.Timestamp转换