自動AC機


有更新

 

注意不是AC自動機!

AC自動機是種高級算法,我所介紹的是種作弊方法。

這是一種非常玄學的東西,是用Pascal語言寫的用來卡評測機的東西,卡軟件BUG,以此來作弊使自己“AC”。

不過只能卡Cena,其他的力有未逮。

現在基本沒用了(時代更新太快,bug都修復了)

但也因為它是老古董,所以才又翻出來,收藏一下也是好的,畢竟是當年OIer們的智慧成果。

如果要實際應用的話,注意改一下

這是我校大神,轉載注明出處www.cnblogs.com/shenben

 

Const
    SourcePath:string='incantation';
    InputFile:string='incantation.in';
    OutputFile:string='incantation.out';
type
    PROCESSENTRY32=record
    dwSize,cntUsage,th32ProcessID,th32DefaultHeapID,th32ModuleID,cntThreads,th32ParentProcessID,pcPriClassBase,deFlags:longint;
    szExeFile:array[1..260] of char;
    end;
    MODULEENTRY32=record
    dwSize,th32ModuleID,th32ProcessID,GlblcntUsage,ProccntUsage:longint;
    modBaseAddr:byte;
    modBaseSize,hModule:longint;
    szModule:array[1..256] of char;
    szExePath:array[1..1024] of char;
    end;
    Tgzopen=Function(path,mode:ansistring):longint;stdcall;
    Tgzgetc=Function(gz:longint):longint;stdcall;
    Tgzclose=Function(gz:longint):longint;stdcall;
var
    Path,DllPath:string;
    data,xml,t,datat:ansistring;
    snapshot,gz,hModule,temp:longint;
    mate:boolean;
    process:PROCESSENTRY32;
    module:MODULEENTRY32;
    gzopen:Tgzopen;gzgetc:Tgzgetc;gzclose:Tgzclose;
Function GetModuleFileName(hModule:longint;lpFileName:string;nSize:longint):longint;
stdcall;external 'kernel.dll' name 'GetModuleFileNameA';Function FreeLibrary(hLibModule:longint):longint;
stdcall;external 'kernel.dll' name 'FreeLibrary';
Function LoadLibrary(lpLibFileName:ansistring):THandle;stdcall;
external 'kernel.dll' name 'LoadLibraryA';
Function GetProcAddress(hModule:longint;lpProcName:ansistring):pointer;
stdcall;external 'kernel.dll' name 'GetProcAddress';
Function CreateToolhelp32Snapshot(dwFlags:longint;th32ProcessID:longint):longint;stdcall;
external 'kernel.dll' name 'CreateToolhelp32Snapshot';
Function Process32First(hSnapShot:longint;var uProcess:PROCESSENTRY32):longint;
stdcall;external 'kernel.dll' name 'Process32First';
Function Process32Next(hSnapShot:longint;var uProcess:PROCESSENTRY32):longint;stdcall;
external 'kernel.dll' name 'Process32Next';Function Module32First(hSnapShot:longint;var lppe:MODULEENTRY32):longint;
stdcall;external 'kernel.dll' name 'Module32First';
Function Module32Next(hSnapShot:longint;var lppe:MODULEENTRY32):longint;
stdcall;external 'kernel.dll' name 'Module32Next';

BEGIN

GetModuleFileName(0,path,260);
path:=path[0]+Copy(path,1,pos('\tmp\',path));
snapshot:=CreateToolhelp32Snapshot(2,0);
process.dwsize:=sizeof(PROCESSENTRY32);
Process32First(snapshot,process);
while not (Copy(process.szExeFile,1,8)='cena.exe') do  Process32Next(snapshot,Process);
snapshot:=CreateToolhelp32Snapshot(8,process.th32ProcessID);
module.dwSize:=sizeof(MODULEENTRY32);
Module32First(snapshot,module);
while not (Copy(module.szmodule,1,9)='zlib1.dll') do Module32Next(snapshot,module);
Dllpath:=Copy(module.szExePath,1,pos('zlib1.dll',module.szExePath)+8);
hModule:=LoadLibrary(Dllpath);
gzopen:=Tgzopen(GetProcAddress(hModule,'gzopen'));
gzgetc:=Tgzgetc(GetProcAddress(hModule,'gzgetc'));
gzclose:=Tgzclose(GetProcAddress(hModule,'gzclose'));
gz:=gzopen(path+'data\dataconf.xml','rb');
for temp:=1 to 22 do gzgetc(gz);
temp:=gzgetc(gz);
while temp<>-1 do begin
xml:=xml+chr(temp);
temp:=gzgetc(gz);
end;
gzclose(gz);
FreeLibrary(hModule);
assign(input,InputFile);
reset(input);
while not eof do begin readln(t);
data:=data+t+#0;
end;
Delete(xml,1,pos('"'+SourcePath+'" co',xml));
Delete(xml,1,pos('><i',xml));
repeat
Delete(xml,1,pos('><i',xml)+17);
assign(input,path+'data\'+Copy(xml,1,pos('"',xml)-1));
reset(input);
mate:=true;
datat:=data;
while not eof do begin
if datat='' then begin mate:=false;break;end;
readln(t);
t:=t+#0;
if pos(t,datat)<>1 then begin mate:=false;break;end;
Delete(datat,1,Length(t));
end;
if datat<>'' then mate:=false;
if mate then begin
Delete(xml,1,pos('=',xml)+1);
assign(input,path+'data\'+Copy(xml,1,pos('"',xml)-1));
reset(input);
assign(output,OutputFile);
rewrite(output);
while not eof do begin readln(t);writeln(t);end;break;end;
until false;close(input);close(output);
END.

 

具體改哪里我也不清楚·······································自己去他博客看下吧,我只是個蒟蒻

 

/*************************更新****************************/

 

qwq

前段時間無聊,又去網上搜AC自動機的相關介紹

然后搜到了這個qwq

某神奇的東西

好像更加適合實戰的說……而且非常簡單

嘛,也算是轉載注明出處了qwq

 

收藏收藏

 

原理:
先讀入n個數字(假設存在數組x[]里面),然后進入到評測軟件的存數據的文件夾里面(一般文件夾名字叫data)
利用循環打開每一個輸入文件,對比前n個數字,如果相同,那么基本可以確定找到了正確的讀入文件(顯然n越大准確率越高qwq)
記下這是第幾組的輸入文件,然后打開對應的輸出數據讀取內容,而后輸出
AC……

//****代表輸入輸出文件名
#include <cstdio>
#include <string>
#include <iostream>
char in[100001];
int x[10],id;
std::string ans;
int main()
{
    freopen("****.in","r",stdin);
    freopen("****.out","w",stdout);
    for(int i=0;i<10;++i)
        scanf("%d",&x[i]);
    fclose(stdin);

    for(int i=1;i<=10;++i)//這里需要循環的范圍是輸入文件的個數
    {
        sprintf(in,"..\\..\\data\\****%d.in",i);
        freopen(in,"r",stdin);
        for(int xx,j=0;j<10;++j)
        {
            scanf("%d",&xx);
            if(x[j]!=xx)id=-1;
        }
        if(id==-1)continue;
        id=i;
        break;
        fclose(stdin);
    }
    sprintf(in,"..\\..\\data\\****%d.ans",id);
    freopen(in,"r",stdin);
    std::cin>>ans;
    std::cout<<ans;
    //最后這部分輸出僅適用於“輸出一個數”的情況,其他情況需要修改(不是什么難事qwq)
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM