0%

获取Java路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
INT GetJavaHomePathFromRegedit(wchar_t* retwstr) {
wchar_t str[MAX_PATH + 1];
INT flag = GetStrFromRegedit(L"SOFTWARE\\JavaSoft\\Java Runtime Environment\\", L"CurrentVersion", str);
wprintf(L"%ws\n", str);

WCHAR keyjp[MAX_PATH + 1] = L"\0";
swprintf_s(keyjp, MAX_PATH, L"%ws%ws", L"SOFTWARE\\JavaSoft\\Java Runtime Environment\\", str);
wprintf(L"%ws\n", keyjp);
flag = GetStrFromRegedit(keyjp, L"JavaHome", str);
wprintf(L"%ws\n", str);
swprintf_s(retwstr, MAX_PATH, L"%ws%ws", str, L"\\bin\\java.exe");
return TRUE;
}

INT GetStrFromRegedit(const wchar_t* hkey, const wchar_t* childkey, wchar_t* str) {
HKEY retKey;
BYTE retKeyVal[MAX_PATH + 1] = { 0 };
DWORD nSize = MAX_PATH + 1;
LONG ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, hkey, 0, KEY_QUERY_VALUE | KEY_READ, &retKey);
//记得加KEY_READ来读取多级子键
if (ret != ERROR_SUCCESS) {
return -1;
}
ret = RegQueryValueEx(retKey, childkey, NULL, NULL, (LPBYTE)retKeyVal, &nSize);
RegCloseKey(retKey);
if (ret != ERROR_SUCCESS) {
return -2;
}
int sum = 0;
wchar_t TEMPSTR[MAX_PATH + 1] = L"\0";
for (int i = 0; i < int(nSize); i += 1) {
if (retKeyVal[i + 1] == 0) {
TEMPSTR[i] = retKeyVal[i];
if (retKeyVal[i] == 0) break;
}
}
for (int i = 0; i < int(nSize); i += 1) {
if (retKeyVal[i + 1] == 0) {
*(str + sum) = retKeyVal[i];
sum++;
if (retKeyVal[i] == 0) break;
}
}
return TRUE;
}

免责声明:以下内容仅供学习使用

本文的工具成品下载见githubmythwarehelper仓库,附加资源也在内
已完成功能:杀死极域,获取极域安装路径,从注册表破解极域密码,重启极域,挂起极域,恢复极域,解除极域全屏窗口限制

搜索极域进程

极域主进程

极域的进程由StudentMain.exe启动,因此,只需要使用CreateToolhelp32Snapshot创建快照,遍历所有进程的所有模块,找到其中可执行文件为StudentMain.exe那一个进程即可。

以下是代码实现

阅读全文 »

挖矿 +

题目描述

有N名矿工在挖矿。工厂预先给第i名矿工支付了Mi元工资,他每挖一吨矿需要消费Ki元头 余下的钱不足Ki元,他就停止挖矿。他每挖一吨矿,工厂会立即奖励他2元钱。奖励的钱于挖矿的消费。

给出矿工的信息,请你计算一下矿工们总共可以挖出多少吨矿,以及哪个矿工挖的矿最多。

输入格式

阅读全文 »

字符串的展开

题目链接

luoguP1098

分析

简单模拟,按照题目要求来一步步实现即可

阅读全文 »

概念

二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。

存储

二叉堆是一种数组对象,它可以被视为一棵完全二叉树。树中每个结点与数组中存放该结点中值的那个元素相对应

二叉堆存储示意图

阅读全文 »

概念

区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来由很大的关系。令状态 $ f(i,j) $ 表示将下标位置 到 的所有元素合并能获得的价值的最大值,那么 $ f(i,j)=max{f(i,k)+f(k+1,j)+cost} $ ,$ cost $ 为将这两组元素合并起来的代价。

特点

合并 :即将两个或多个部分进行整合,当然也可以反过来;
特征 :能将问题分解为能两两合并的形式;
求解 :对整个问题设最优值,枚举合并点,将问题分解为左右两个部分,最后合并两个部分的最优值得到原问题的最优值。

练习题

阅读全文 »

概念

MapSTL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。

个人理解

map可以看做一个特殊的数组,其下标可以为任意类型,即key

基本操作

阅读全文 »

题目传送门

洛谷 P2814 家谱

思路

水的典型的并查集题目,但在建立关系时需要有一定的思考,因为名字都是字符串,所以这里采用了map以建立名字和名字之间的关系

AC代码

阅读全文 »

luoguP1356

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <cstdio>
#include <cstring>
#include <cmath>

const int MAXN = 1e4 + 5;

int t, n, k, s[MAXN];
bool f[MAXN][105];////f[i][j]表示前i个数字运算之后余数是否为j

int main() {
scanf("%d", &t);
while(t --) {
scanf("%d %d", &n, &k);
for(int i = 1; i <= n; i ++) {
scanf("%d", &s[i]);
s[i] = int(fabs(s[i])) % k;//s[i]为第i个元素模k的值
}
memset(f, 0, sizeof(f));//清除前一次的记录
f[1][s[1]] = 1;//初始化
for(int i = 2; i <= n; i ++) {
for(int j = k - 1; j >= 0; j --) {
if(f[i - 1][j]) {//如果前i - 1个元素模k等于j
f[i][(j + s[i]) % k] = 1;//那么前i-1个值的和加上第i个元素模k等于加上第i个元素后模k的值
f[i][((j - s[i]) % k + k) % k] = 1;//前i-1个值的和减去第i个元素模k的值为j减去第i个元素后模k再加k的值
}
}
}
if(f[n][0]) {//检查所有元素的和能否被k整除
printf("Divisible\n");
}
else {
printf("Not divisible\n");
}
}
return 0;
}