update on 2018.9.23 洛谷开启了通过题目难度的显示,现在这个爬虫已经没用了,也就看看吧。

本文中的代码转载于https://github.com/ACodreamer/Luogu-AC-Difficulty。

要注意的就是爬的用户必须是没有开启完全隐私,否则就挂了

#include <stdio.h>
#include <windows.h>
#include <conio.h>
#ifdef URLDownloadToFile
#undef URLDownloadToFile
#endif
typedef int(__stdcall *UDF)(LPVOID,LPCSTR,LPCSTR,DWORD,LPVOID);
UDF URLDownloadToFile = (UDF)GetProcAddress(LoadLibrary("urlmon.dll"),"URLDownloadToFileA");
char* strfind(char *text,char *temp)
{int i = -1,j,l = strlen(temp);while(text[++i]){for(j=0;j<l;j++)if(text[i+j] == 0 || text[i+j] != temp[j])break;if(j == l)return text+i+l;}return 0;
}
void UTF8ToANSI(char *str)
{int len = MultiByteToWideChar(CP_UTF8,0,str,-1,0,0);WCHAR *wsz = new WCHAR[len+1];len = MultiByteToWideChar(CP_UTF8,0,str,-1,wsz,len);wsz[len] = 0;len = WideCharToMultiByte(CP_ACP,0,wsz,-1,0,0,0,0);len = WideCharToMultiByte(CP_ACP,0,wsz,-1,str,len,0,0);str[len] = 0;delete []wsz;
}
HANDLE hOutput;
char name[32];
int count[8];
void problem(char *str)
{int i = 0,len;DWORD unused;char prob[32],url[128],*file,*ptr;HANDLE hFile;COORD pos = {0,2};while(*str != '<')prob[i++] = *str++;prob[i] = 0;sprintf(url,"https://www.luogu.org/problemnew/show/%s",prob);URLDownloadToFile(0,url,"download.tmp",0,0);hFile = CreateFile("download.tmp",GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);len = GetFileSize(hFile,0);file = ptr = new char[len+3];ReadFile(hFile,file,len,&unused,0);file[len] = file[len+1] = 0;CloseHandle(hFile);file = strfind(file,"\xE9\x9A\xBE\xE5\xBA\xA6");if(file == 0){delete []ptr;return;}file = strfind(file,"lg-bg-");if(file[0] == 'r')count[0]++;else if(file[0] == 'o')count[1]++;else if(file[0] == 'y')count[2]++;else if(file[0] == 'g' && file[2] == 'e')count[3]++;else if(file[0] == 'b' && file[4] == 'l')count[4]++;else if(file[0] == 'p')count[5]++;else if(file[0] == 'b' && file[4] == 'd')count[6]++;else if(file[0] == 'g' && file[2] == 'a')count[7]++;delete []ptr;SetConsoleCursorPosition(hOutput,pos);printf("%s 的统计:    %s        \n""入门难度:       %d\n""普及-:          %d\n""普及/提高-:     %d\n""普及+/提高:     %d\n""提高+/省选-:    %d\n""省选/NOI-:      %d\n""NOI/NOI+/CTSC:  %d\n""尚无评定:       %d\n",name,prob,count[0],count[1],count[2],count[3],count[4],count[5],count[6],count[7]);
}
int main()
{int uid,len,i = 0;DWORD unused;char url[128],user[16],*file,*ptr;HANDLE hFile;hOutput = GetStdHandle(STD_OUTPUT_HANDLE);printf("请输入你的洛谷UID: ");scanf("%d",&uid);sprintf(url,"https://www.luogu.org/space/show?uid=%d",uid);URLDownloadToFile(0,url,"download.tmp",0,0);hFile = CreateFile("download.tmp",GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);len = GetFileSize(hFile,0);file = new char[len+3];ReadFile(hFile,file,len,&unused,0);file[len] = file[len+1] = 0;CloseHandle(hFile);UTF8ToANSI(file);sprintf(user,"U%d ",uid);ptr = strfind(file,user);if(ptr){while(ptr[0] != '<' || ptr[1] != '/' || ptr[2] != 'h')name[i++] = *ptr++;printf("\n%s 的统计: ",name);ptr = strfind(file,"通过题目</h2>\n[<");if(ptr)while(*ptr != '<'){ptr = strfind(ptr,"\">");problem(ptr);ptr = strfind(ptr,"]\n");}else printf("还没有通过任何题目\n");}else printf("用户不存在\n");DeleteFile("download.tmp");delete []file;printf("\nPress any key to exit. . .");getch();return 0;
}

转载于:https://www.cnblogs.com/Xray-luogu/p/9652571.html

统计自己洛谷AC题目爬虫相关推荐

  1. 关于洛谷哪些题目(入门)

    在这里,给大家推荐一下洛谷中一些经典和有一些难度的题目. 顺便,在这里宣传一下我洛谷的博客. 好了,这是我找到的一些题目: 1. 模拟题 [NOIP2005 普及组] 陶陶摘苹果 [NOIP2006 ...

  2. 去空白符的大文本字符统计(洛谷P5015题题解,Java语言描述)

    题目要求 P5015题目链接 分析 字符串中的字符统计,不含换行符和空白字符,那就正好用Scanner的nextLine(),就自动去了换行符. 接下来每读进来一行String.就调用replaceA ...

  3. 超大容量文本的单词统计(洛谷P1308题题解,Java语言描述)

    题目要求 P1308题目链接 分析 这题本身的话,题意就挺烦人,下面分析一下. 本题标签"高性能",再看看数据范围,暴力匹配必死无疑.我讨厌用char[]慢慢墨迹,Java操作这个 ...

  4. 梦中的统计(洛谷P1554题题解,Java语言描述)

    题目要求 P1554题目链接 分析 其实本题是一道很简单的水题,但下面的AC代码由于很久很久之前写的,所以写的很low啊--看得我自己都觉得迷惑-- 其实思路可以是这样的:暴力扫描,然后把int转成S ...

  5. 欢乐的跳(洛谷P1152题目链接,Java语言描述)

    题目要求 P1152题目链接 分析 我们要判重,就可以用数组或者说HashSet,最近很久用Set和Map用的有点上头,没办法,就选HashSet吧. 思路是既然num个相邻数的差值要涵盖1~num- ...

  6. [背包DP] 洛谷相关题目整理与练习(74题-)

    题目 以背包为标签,搜出了这么多题,按难度排序,一道一道做: (*):下面有提到 TODO 题目 难度 备忘录 AC 采药 普及- 01背包模板 AC 开心的金明 普及- 01背包模板 AC 小A点菜 ...

  7. 洛谷p1200题目c语言代码,洛谷P1200 [USACO1.1]你的飞碟在这儿

    题目描述 众所周知,在每一个彗星后都有一只UFO.这些UFO时常来收集地球上的忠诚支持者.不幸的是,他们的飞碟每次出行都只能带上一组支持者.因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走 ...

  8. 【C语言】刷题计划第一期——洛谷编程题目集

    如果你已经掌握了一些C语言的基本语法,想练习自己写代码的能力,建议大家可以看一下博主整理题目,从入门到进阶都有.每个阶段需要的技能会有差异,大家要补充对应的基础知识.一起加油,那么一键三连我们开始发车 ...

  9. 信息学奥赛一本通 1239:统计数字 | 1847:【07NOIP提高组】统计数字 | OpenJudge NOI 2.4 7909 | 洛谷 P1097 [NOIP2007 提高组] 统计数字

    [题目链接] ybt 1239:统计数字 ybt 1847:[07NOIP提高组]统计数字 一本通中限制不许使用STL,那么引入头文件不能写<bits/stdc++.h>,只能写<i ...

最新文章

  1. Elixir: 开发和发布Elixir库
  2. 百词斩和扇贝打卡测试与评估
  3. php cdi_教程:编写自己的CDI扩展
  4. maven3.6.3 配置环境变量_JDK1.8简单配置环境变量---两步曲
  5. 【LeetCode】【HOT】98. 验证二叉搜索树(递归)
  6. wincc与第三方软件opc通讯_OPC 通讯不得不说的强大软件
  7. python的reader函数读取的信息包括抬头嘛_Python读取数据文件的方法
  8. C语言大数阶乘的求法
  9. 关于redis HSCAN count参数不生效的问题
  10. SQL Server行列转换
  11. sop流程图模板_SOP模板
  12. 一,FPGA配置及文件生成烧写
  13. 2018-09-11-二手车交易平台系统
  14. STM32+LTC6804/LTC6811采集电压温度电流/BMS储能采集板
  15. INSEC WORLD:世界信息安全西望成都
  16. 分布式数据库——分片透明、复制透明、位置透明、逻辑透明
  17. 步步为营-57-JQuery练习题
  18. 斯诺克台球比赛规则 (Snooker)
  19. vc2012\vc\include\stdlib.h(360): error C2381: “exit”: 重定义;__declspec(noreturn) 不同
  20. 用java设计节拍器_用 Swift 开发一个节拍器 App(三)设计篇

热门文章

  1. Python基础(8)素数输出
  2. oracle 中update select 和连接字符串配合使用
  3. css权威指南 note2
  4. 我做的相册视频,总结07年的生活!
  5. gbk转utf-8 iconv 编码转换
  6. 软考信息系统项目管理师_信息系统综合测试与管理---软考高级之信息系统项目管理师027
  7. C++_类和对象_C++多态_多态的基本语法_静态多态_动态多态_虚函数---C++语言工作笔记069
  8. ES6-ES11新特性_ECMAScript相关名词介绍_---JavaScript_ECMAScript工作笔记002
  9. k8s核心技术-命令行工具kubectl---K8S_Google工作笔记0017
  10. SpringCloud工作笔记030---使用java提供的keytool来生成证书