NOIP2007小结

NOIP2007算是结束了,于是我以220这个很囧的程序结束了今年的征程。有些可惜,但也无憾,毕竟已经努力了。
第一题刚看,用了裸Hash,结果发现有些问题,写了二叉排序树,由于构造不好,最后以qsort+顺序处理搞定了。。。。
第二题赤裸裸的模拟啊。。唯一的遗憾就是没有直接输出,保存在字符数组中,数组不够大。。
第三题写了区间DP,挂掉了(什么RP,调了一个小时还是挂,更别提高精度了),于是最后裸搜索骗了40分。
至于第四题嘛,个人来不及看那长长的题目了,貌似是枚举,不过还是有些麻烦。
总结来看,总体发挥还算一般,老毛病又犯了Orz。。。不过没有当年普及组挂得那么惨,
不过目前也无心估计这么多了,毕竟已经结束了,又学会了很多,很高兴。
目前学习生活又要恢复正常了,有些不适应,但是又不得不适应,之前欠了很多课,又要去好好学习了。
其他开发依然照旧,没有了NOIP的紧张,学习上还是要努力,自己给自己加把劲吧,呵呵

系统再优化~

      最近发现机房的系统有些慢,于是把桌面清理了一下,因为一直找不到合适的工具,于是弄了一个工具条放在桌面 最上方先凑合用了。

      虽然说卡巴的速度不算慢,但是为了这台机器,经过再三考虑把卡巴卸了,装了NOD32 2.7+ZoneAlarm Pro,本来想直接装 ESET 的3.0的安全套装的,由于懒惰,还是先装旧版本的凑合用呢。

      不过今天用NOD32杀毒,却有以外收获。。但是貌似杀不掉。。。。。(如图)

      优化还是有效果了,这下开Delphi 2007啥就一点也不卡了,MC的搜索速度自动提升(嘎嘎)= =

       ZoneAlarm虽然专业,但还是找不回天网的感觉。

       曾经试过的几个杀毒软件组合,于是顺带也提提:

       金山毒霸+金山网镖:最初的时候因为某个病毒瑞星查不出杀不掉,但是金山干掉了,于是就选择了金山,加上金山毒霸的闪电杀毒确实给我留下了深刻影响,网镖简单易用,这套其实还是很不错的,据说目前的版本VB100认证也过了,赞一个

      瑞 星杀毒软件+瑞星个人防火墙:不知道瑞星是不是打造乌龟速度的,在我的映像里,瑞星是所有杀毒软件中最慢的,也许和他界面的华丽也有一些关系。所以只是偶 尔计算机没有杀毒软件用,或者帮朋友装杀毒的时候用用瑞星。 瑞星2008出了,有很多新功能,虽然不错,但是也因为升级的时候瑞星要关闭实时监控的缘故,让我差点中了某Autorun病毒(但是不够谨慎额),所以 也不是很喜欢瑞星。

      江民:上次买电脑报合订本的时候松的杀毒软件,在我P3的机器曾经帮了我很多忙,现在随着P3那他机器主板的挂掉,也一起退役了,运行速度不算慢,杀毒能力也相当不错,于是由于用得不是很经常,就不了解了。

      KAV6+ 天网:新买DELL台式电脑的时候,网易正在搞KAV的促销,于是就买了两年的KAV5的KEY,然后随着安全卫士附带的KAV6,于是我将其升级到了 KAV6,也许是新电脑,也许是当初倍受瑞星折磨,于是觉得运行速度非常快,因此非常喜欢卡巴,至于天网,由于最早用电脑的时候用的防火墙就是天网,于是 十分习惯了,为了配合卡巴,于是买了天网的零售版本。

      KIS7 : 因为天网不支持Vista的缘故,但又为了保证新系统没有问题,于是就把KAV升级成了KIS,又恰逢7.0发布,就更新到了7.0,卡巴的网络管理整合 到他朴素的界面中,不过用起来还是非常强大,不过强大到要用一段时间以后才能比较顺畅(防火墙都要和系统中的程序有一段时间的磨合,只是卡巴为了安全性, 磨合的时间可能长了一些)。于是现在我的本本就用KIS。

     McAfee SecurityCenter:买DELL电脑的时候买的15个月的安全套装,但是貌似反钓鱼和Vista有些冲突,于是就引发了曾经的网络不稳定事件, 不过现在在XP的机器上运行顺畅,需要设置的地方不多,速度不算慢,但是安全性确实很高,不得不佩服McAfee的能力了,对于那种不需要过多个人设置的 人来说,可是相当美。

     NOD32:目前给我的最好印象就是速度了,和没有装杀毒软件时候的速度差不多。也只需要用之前设置一次就很方便了,朴素的界面和瑞星的华丽形成鲜明的对比,还是相当不错的。于是先用了- –

于是图片嘛,还是发出来。。。。

  

'

11月1日了。。。。。。。。。

今天已经11月1日了,于是距离NOIP复赛不远了。。。。。
随着OI的临近,模拟赛也随之增多,重新找回了因为中考而失去的所谓手感。
于是最近更新比原先慢了,不过还是很感谢狐狸和炎说作出的努力。
最近的时间都花在OI上了,从早到晚,
确实是累,但是为了梦想,也只能不断前行。。。。。。。。
OIBH最近间隙性抽风,Vijos定期挂掉,无奈也。。。。。。
听说TS今天归来,于是向其要照片。。。。于是得知要准备好××相片交换,嘎嘎。
PJblog基本更新少了,于是曾想过自己写一套Blog程序,不过不很现实,于是最后的决定是进行修改。
由于内容的增多,虽然也不算很多,但是项目上还可能增加,于是今天写好了二级栏目功能。明天就可以加进来了 ^o^
顺带提一下,本站服务器前段偶尔挂掉问题,据说是硬件×××了,目前已经修复。速度有所提升。
Wiki将在OI后继续更新。 近来网络条件不好,学校机房充斥ARP攻击,于是很多测试也只能暂时作罢。
最后,也只有不断对自己说声加油,只为了在NOIP取得好成绩。

遇到几件比较RP的事情。

最近比较郁闷,总是出现比较神奇的问题。
First Thing:
在家里的本本上网,开机以后,系统貌似正在安装什么更新,随后显示正在 配置IE的设置,虽然一切都正常,但是打开Maxthon,本应有的自动登录消失,要重新输入用户名密码,然后正常访问。但是打开IE7,无论输入什么网 址都无法上网,QQ等均正常登录,Maxthon可以正常察看网页。
于是就在想,最近没有进行啥操作阿。。。。。便怀疑是系统更新的问题,于是baidu一下:
=======================================
用于 Windows Vista 中的 Internet Explorer 7 的累积安全更新程序 (KB939653)
下载大小: 7.0 MB
可能需要重新启动计算机,此更新才能生效。
更新类型: 重要
现已确认存在一些安全问题,攻击者可能会利用这些问题危及运行 Internet Explorer 的系统的安全并获取对系统的控制权。您可以通过安装本 Microsoft 更新程序来保护您的系统不受侵害。安装本更新程序后,可能需要重新启动计算机。
详细信息:
http://go.microsoft.com/fwlink/?LinkId=95045
帮助和支持:
http://support.microsoft.com
==============================================
但是貌似其他用户反映没有这个问题,不过我卸载了该更新后恢复正常,不知道是不是卡巴与其冲突,还是其他什么问题了。RP呀。。。。。
Second:
学校的机器,最近出现灵异现象:
首先是桌面右键菜单不断减少,先是没有了新建***的,然后第二天检查是否是优化问题的时候,就连排列图标等也不显示了,如图:

继而:

==================================
于是得到神奇的答复是:
删除了新建菜单,可以尝试使用兔子自带的还原功能恢复。

[Pascal]Move 在程序设计时的应用

System单元的move过程用来把指定内存段的数据整块复制到另一内存段中,它通常用来成批移动数组元素,使用move进行移动,往往比For一遍来得快些(个人感觉)Move的格式是 move(var Source, Dest; Count: Word)Source是数据源,Dest是目标内存段,Count是复制的字节数。你不必担心源内存段会和目标内存段重叠或者重合,在这种情况下move仍然能够正确工作,参考下面的样例:

非常感谢AI_Player介绍这种方法,copymem movemem在C语言中非常常见,其实其在Pascal中也很好用

var:

  I: Integer;

  P: array[0..9] of Longint;

begin

  for I := 0 to 9 do P[I] := I;

  move(P[4], P[2], 4 * 6);          P[2]6longint P[4]

  for I := 0 to 9 do Writeln(P[I]: 4);

0123456789 
0145678989

值得注意的是Count的大小,这与identifier的类型(所占字节数)有关,以下给出参考

byte,shortint

1

word,integer

2

longint

4

 

single

4

real

6

double,comp

8

extended

10

 

char

1

boolean

1

string

1(per char)*

\n

\n

* Var a:string  ''a:=''12345'';  move(a[4],a[1],2);  a="45345"

\n

 另外,所占字节数不同不能move(不是数组,Count选字节数大的,有时也是可以的),不同类型不能move,否则会搞得乱七八糟,而往往因move错误地使用造成的 答案错误、死循环 很难发现!

Digimon 全系列OP/ED DVD入手

Digimon 全系列OP/ED DVD,华盟磁物工坊之作,8GB的神物,今天终于收到Betamax从台湾寄来的DVD了,真是非常经典的内容啊。
==============以下为原介绍==================
1999…
激昂的旋律,扣响通往冒险的大门
开启了此后的辉煌历史……
2000…
神圣的装甲,打破了三年的沉寂
继承勇气的孩子续写了冒险……
2001…
一张想像中的怪兽图、下课后一起玩的游戏卡
激活了进化的力量……
2002…
神秘的短信、谜样的邀请
引领着斗士们的相会……
2006…
不打不相识的巧遇,敌我未明的处境
如何去一一化解……
跨越8年的感动…
醉心4年的收藏…
遍及全球的足迹…
值得回味的经典…
2007 铁盒磁物工坊年度巨献
Digimon 全OP、ED收藏集 (2003~2007)
On Betamax/VHS/DVD and CD
(Betamax/VHS仅供磁坊内部使用)
Credits:
计划发起:松本羽(铁盒磁物工坊/华人动漫联盟)
影片收集:松本羽、羽青星语、TurtleIzzy、苍空 翔(华人动漫联盟)、DMS(digimons.net)、AuroraSonicBoom、shadabad(个人)
歌曲收集:松本羽(铁盒磁物工坊)、Hirokage(个人)
介绍:松本羽、羽青星语(华人动漫联盟)
感谢:saya、张驰、TurtleIzzy、zipwinmax、羽青星语、DMS、
rainmon、AuroraSonicBoom、Shadabad、lovemimi、
triassicranger、fefisgbf13、MintMagic、Hirokage
光盘目录:
http://photo.163.com/photos/tpemail2002/131976465/
注意:目前只开放数据光盘索取,暂不提供可于播放机上直接播放之DVD与CD
详情请联系本人
QQ:54030881

警报 台风来袭

今天是军训的第三天,按照计划,军训的时间为6天,但是今天突然通知要会操,原因是:“圣帕”光临= =
虽然说台风来了,今天早上的太阳依然是照的我们脸、脖子、手发红发痛(也许是三天阳光的积累吧)
直到会操结束太阳依然没有退去的感觉,但是我们还是坐车回到学校,很遗憾,最后没有和我们的教官道别,因为他们提早去开关于防台的电视电话会议了。
回到福州,太阳才退去了,不过发现,此时也已经傍晚。晚上风便有些大了,加上下雨,已经有了一丝台风的感觉,电视台也出现了黄色预警,貌似还不是很近。不过据说那17级的风力还是有些可怕。
虽然台风来了,我们军训提早结束,可以貌似老师还不甘心,8月底还要补。。。。。。
不过训练一下也好,一直呆在家里真是闷了。。。。

[常用API收藏] 注册表编辑

这几天整理注册表相关的,于是收藏了此模块,相当完善的编辑方法。
标准模块代码:

Option Explicit
Option Compare Text
'---------------------------------------------------------------
'- 注册表 API 声明...
'---------------------------------------------------------------
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long
Private Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPriv As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long                'Used to adjust your program's security privileges, can't restore without it!
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As Any, ByVal lpName As String, lpLuid As LUID) As Long          'Returns a valid LUID which is important when making security changes in NT.
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
'---------------------------------------------------------------
'- 注册表 Api 常数...
'---------------------------------------------------------------
' 注册表创建类型值...
Const REG_OPTION_NON_VOLATILE = 0        ' 当系统重新启动时,关键字被保留
' 注册表关键字安全选项...
Const READ_CONTROL = &H20000
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_Create_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_Create_LINK = &H20
Const KEY_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL
Const KEY_WRITE = KEY_SET_VALUE + KEY_Create_SUB_KEY + READ_CONTROL
Const KEY_EXECUTE = KEY_READ
Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + KEY_Create_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + KEY_Create_LINK + READ_CONTROL
' 返回值...
Const ERROR_NONE = 0
Const ERROR_BADKEY = 2
Const ERROR_ACCESS_DENIED = 8
Const ERROR_SUCCESS = 0
' 有关导入/导出的常量
Const REG_FORCE_RESTORE As Long = 8&
Const TOKEN_QUERY As Long = &H8&
Const TOKEN_ADJUST_PRIVILEGES As Long = &H20&
Const SE_PRIVILEGE_ENABLED As Long = &H2
Const SE_RESTORE_NAME = "SeRestorePrivilege"
Const SE_BACKUP_NAME = "SeBackupPrivilege"
'---------------------------------------------------------------
'- 注册表类型...
'---------------------------------------------------------------
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type LUID
lowpart As Long
highpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges As LUID_AND_ATTRIBUTES
End Type
'---------------------------------------------------------------
'- 自定义枚举类型...
'---------------------------------------------------------------
' 注册表数据类型...
Public Enum ValueType
REG_SZ = 1                         ' 字符串值
REG_EXPAND_SZ = 2                  ' 可扩充字符串值
REG_BINARY = 3                     ' 二进制值
REG_DWORD = 4                      ' DWORD值
REG_MULTI_SZ = 7                   ' 多字符串值
End Enum
' 注册表关键字根类型...
Public Enum KeyRoot
HKEY_CLASSES_ROOT =\n&H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000003
HKEY_PERFORMANCE_DATA = &H80000004
HKEY_CURRENT_CONFIG = &H80000005
HKEY_DYN_DATA = &H80000006
End Enum
Private hKey As Long                   ' 注册表打开项的句柄
Private i As Long, j As Long           ' 循环变量
Private Success As Long                ' API函数的返回值, 判断函数调用是否成功
'-------------------------------------------------------------------------------------------------------------
'- 新建注册表关键字并设置注册表关键字的值...
'- 如果 ValueName 和 Value 都缺省, 则只新建 KeyName 空项, 无子键...
'- 如果只缺省 ValueName 则将设置指定 KeyName 的默认值
'- 参数说明: KeyRoot--根类型, KeyName--子项名称, ValueName--值项名称, Value--值项数据, ValueType--值项类型
'-------------------------------------------------------------------------------------------------------------
Public Function SetKeyValue(KeyRoot As KeyRoot, KeyName As String, Optional ValueName As String, Optional Value As Variant = "", Optional ValueType As ValueType = REG_SZ) As Boolean
Dim lpAttr As SECURITY_ATTRIBUTES                   ' 注册表安全类型
lpAttr.nLength = 50                                 ' 设置安全属性为缺省值...
lpAttr.lpSecurityDescriptor = 0                     ' ...
lpAttr.bInheritHandle = True                        ' ...
' 新建注册表关键字...
Success = RegCreateKeyEx(KeyRoot, KeyName, 0, ValueType, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, hKey, 0)
If Success <> ERROR_SUCCESS Then SetKeyValue = False: RegCloseKey hKey: Exit Function
' 设置注册表关键字的值...
If IsMissing(ValueName) = False Then
Select Case ValueType
Case REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ
Success = RegSetValueEx(hKey, ValueName, 0, ValueType, ByVal CStr(Value), LenB(StrConv(Value, vbFromUnicode)) + 1)
Case REG_DWORD
If CDbl(Value) < = 4294967295# And CDbl(Value) >= 0 Then
Dim sValue As String
sValue = DoubleToHex(Value)
Dim dValue(3) As Byte
dValue(0) = Format("&h" & Mid(sValue, 7, 2))
dValue(1) = Format("&h" & Mid(sValue, 5, 2))
dValue(2) = Format("&h" & Mid(sValue, 3, 2))
dValue(3) = Format("&h" & Mid(sValue, 1, 2))
Success = RegSetValueEx(hKey, ValueName, 0, ValueType, dValue(0), 4)
Else
Success = ERROR_BADKEY
End If
Case REG_BINARY
On Error Resume Next
Success = 1                             ' 假设调用API不成功(成功返回0)
ReDim tmpValue(UBound(Value)) As Byte
For i = 0 To UBound(tmpValue)
tmpValue(i) = Value(i)
Next i
Success = RegSetValueEx(hKey, ValueName, 0, ValueType, tmpValue(0), UBound(Value) + 1)
End Select
End If
If Success <> ERROR_SUCCESS Then SetKeyValue = False: RegCloseKey hKey: Exit Function
' 关闭注册表关键字...
RegCloseKey hKey
SetKeyValue = True                                       ' 返回函数值
End Function
'-------------------------------------------------------------------------------------------------------------
'- 获得已存在的注册表关键字的值...
'- 如果 ValueName="" 则返回 KeyName 项的默认值...
'- 如果指定的注册表关键字不存在, 则返回空串...
'- 参数说明: KeyRoot--根类型, KeyName--子项名称, ValueName--值项名称, ValueType--值项类型
'-------------------------------------------------------------------------------------------------------------
Public Function GetKeyValue(KeyRoot As KeyRoot, KeyName As String, ValueName As String, Optional ValueType As Long) As String
Dim TempValue As String      &nbs\np;                      ' 注册表关键字的临时值
Dim Value As String                                 ' 注册表关键字的值
Dim ValueSize As Long                               ' 注册表关键字的值的实际长度
TempValue = Space(1024)                             ' 存储注册表关键字的临时值的缓冲区
ValueSize = 1024                                    ' 设置注册表关键字的值的默认长度
' 打开一个已存在的注册表关键字...
RegOpenKeyEx KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey
' 获得已打开的注册表关键字的值...
RegQueryValueEx hKey, ValueName, 0, ValueType, ByVal TempValue, ValueSize
' 返回注册表关键字的的值...
Select Case ValueType                                                        ' 通过判断关键字的类型, 进行处理
Case REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ
TempValue = Left$(TempValue, ValueSize - 1)                          ' 去掉TempValue尾部空格
Value = TempValue
Case REG_DWORD
ReDim dValue(3) As Byte
RegQueryValueEx hKey, ValueName, 0, REG_DWORD, dValue(0), ValueSize
For i = 3 To 0 Step -1
Value = Value + String(2 - Len(Hex(dValue(i))), "0") + Hex(dValue(i))   ' 生成长度为8的十六进制字符串
Next i
If CDbl("&H" & Value) < 0 Then                                              ' 将十六进制的 Value 转换为十进制
Value = 2 ^ 32 + CDbl("&H" & Value)
Else
Value = CDbl("&H" & Value)
End If
Case REG_BINARY
If ValueSize > 0 Then
ReDim bValue(ValueSize - 1) As Byte                                     ' 存储 REG_BINARY 值的临时数组
RegQueryValueEx hKey, ValueName, 0, REG_BINARY, bValue(0), ValueSize
For i = 0 To ValueSize - 1
Value = Value + String(2 - Len(Hex(bValue(i))), "0") + Hex(bValue(i)) + " "  ' 将数组转换成字符串
Next i
End If
End Select
' 关闭注册表关键字...
RegCloseKey hKey
GetKeyValue = Trim(Value)                                                    ' 返回函数值
End Function
'-------------------------------------------------------------------------------------------------------------
'- 删除已存在的注册表关键字的值...
'- 如果指定的注册表关键字不存在, 则不做任何操作...
'- 参数说明: KeyRoot--根类型, KeyName--子项名称, ValueName--值项名称
'-------------------------------------------------------------------------------------------------------------
Public Function DeleteKey(KeyRoot As KeyRoot, KeyName As String, Optional ValueName As String) As Boolean
Dim tmpKeyName As String                            ' 注册表关键字的临时子项名称
Dim tmpValueName As String                          ' 注册表关键字的临时子键名称
' 打开一个已存在的注册表关键字...
Success = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey)
If Success <> ERROR_SUCCESS Then DeleteKey = False: RegCloseKey hKey: Exit Function
' 删除已打开的注册表关键字...
tmpKeyName = ""
tmpValueName = KeyName
If ValueName = "" Then                                    &\nnbsp;         ' 判断ValueName是否缺省, 如缺省作相应处理
If InStrRev(KeyName, "\\") > 1 Then
tmpValueName = Right(KeyName, InStrRev(KeyName, "\\") + 1)
tmpKeyName = Left(KeyName, InStrRev(KeyName, "\\") - 1)
End If
Success = RegOpenKeyEx(KeyRoot, tmpKeyName, 0, KEY_ALL_ACCESS, hKey)
Success = RegDeleteKey(hKey, tmpValueName)
Else
Success = RegDeleteValue(hKey, ValueName)
End If
If Success <> ERROR_SUCCESS Then DeleteKey = False: RegCloseKey hKey: Exit Function
' 关闭注册表关键字...
RegCloseKey hKey
DeleteKey = True                                    ' 返回函数值
End Function
'-------------------------------------------------------------------------------------------------------------
'- 获得注册表关键字的一些信息...
'- SubKeyName()      注册表关键字的所有子项的名称(注意:最小下标为0)
'- ValueName()       注册表关键字的所有子键的名称(注意:最小下标为0)
'- ValueType()       注册表关键字的所有子键的类型(注意:最小下标为0)
'- CountKey          注册表关键字的子项数量
'- CountValue        注册表关键字的子键数量
'- MaxLenKey         注册表关键字的子项名称的最大长度
'- MaxLenValue       注册表关键字的子键名称的最大长度
'-------------------------------------------------------------------------------------------------------------
Public Function GetKeyInfo(KeyRoot As KeyRoot, KeyName As String, SubKeyName() As String, ValueName() As String, ValueType() As ValueType, Optional CountKey As Long, Optional CountValue As Long, Optional MaxLenKey As Long, Optional MaxLenValue As Long) As Boolean
Dim f As FILETIME
Dim l As Long, s As String
' 打开一个已存在的注册表关键字...
Success = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey)
If Success <> ERROR_SUCCESS Then GetKeyInfo = False: RegCloseKey hKey: Exit Function
' 获得一个已打开的注册表关键字的信息...
Success = RegQueryInfoKey(hKey, vbNullString, ByVal 0&, ByVal 0&, CountKey, MaxLenKey, ByVal 0&, CountValue, MaxLenValue, ByVal 0&, ByVal 0&, f)
If Success <> ERROR_SUCCESS Then GetKeyInfo = False: RegCloseKey hKey: Exit Function
If CountKey <> 0 Then
ReDim SubKeyName(CountKey - 1) As String            ' 重新定义数组, 使用数组大小与注册表关键字的子项数量匹配
For i = 0 To CountKey - 1
SubKeyName(i) = Space(255)
l = 255
RegEnumKeyEx hKey, i, ByVal SubKeyName(i), l, 0, vbNullString, ByVal 0&, f
SubKeyName(i) = Left(SubKeyName(i), l)
Next i
' 下面的二重循环对字符串数组进行冒泡排序
For i = 0 To UBound(SubKeyName)
For j = i + 1 To UBound(SubKeyName)
If SubKeyName(i) > SubKeyName(j) Then
s = SubKeyName(i)
SubKeyName(i) = SubKeyName(j)
SubKeyName(j) = s
End If
Next j
Next i
End If
If CountValue <> 0 Then
ReDim ValueName(CountValue - 1) As String           ' 重新定义数组, 使用数组大小与注册表关键字的子键数量匹配
ReDim ValueType(CountValue - 1) As Long             ' 重新定义数组, 使用数组大小与注册表关键字的子键数量匹配
For i = 0 To CountValue - 1
ValueName(i) = Space(255)
l = 255
RegEnumValue hKey, i, ByVal ValueName(i), l, 0, ValueType(i), ByVal 0&, ByVal 0&
ValueName(i) = Left(ValueName(i), l)
Next i
' 下面的二重循环对字符串数组进行冒泡排序
For i = 0 To UBound(ValueName)
For j = i + 1 To UBound(ValueName)
If ValueName(i) > ValueName(j) Then
s = ValueName(i)
ValueName(i) = ValueName(j)
ValueName(j) = s
End If
&\nnbsp;  Next j
Next i
End If
' 关闭注册表关键字...
RegCloseKey hKey
GetKeyInfo = True                                   ' 返回函数值
End Function
'-------------------------------------------------------------------------------------------------------------
'- 导出注册表关键字的值
'- 参数说明: KeyRoot--根类型, KeyName--子项名称, FileName--导出的文件路径及文件名(原始数据库格式)
'-------------------------------------------------------------------------------------------------------------
Public Function SaveKey(KeyRoot As KeyRoot, KeyName As String, FileName As String) As Boolean
On Error Resume Next
Dim lpAttr As SECURITY_ATTRIBUTES                   ' 注册表安全类型
lpAttr.nLength = 50                                 ' 设置安全属性为缺省值...
lpAttr.lpSecurityDescriptor = 0                     ' ...
lpAttr.bInheritHandle = True                        ' ...
If EnablePrivilege(SE_BACKUP_NAME) = False Then
SaveKey = False
Exit Function
End If
Success = RegOpenKeyEx(KeyRoot, KeyName, 0&, KEY_ALL_ACCESS, hKey)
If Success <> 0 Then
SaveKey = False
Success = RegCloseKey(hKey)
Exit Function
End If
Success = RegSaveKey(hKey, FileName, lpAttr)
If Success = 0 Then SaveKey = True Else SaveKey = False
Success = RegCloseKey(hKey)
End Function
'-------------------------------------------------------------------------------------------------------------
'- 导入注册表关键字的值
'- 参数说明: KeyRoot--根类型, KeyName--子项名称, FileName--导入的文件路径及文件名(原始数据库格式)
'-------------------------------------------------------------------------------------------------------------
Public Function RestoreKey(KeyRoot As KeyRoot, KeyName As String, FileName As String) As Boolean
On Error Resume Next
If EnablePrivilege(SE_RESTORE_NAME) = False Then
RestoreKey = False
Exit Function
End If
Success = RegOpenKeyEx(KeyRoot, KeyName, 0&, KEY_ALL_ACCESS, hKey)
If Success <> 0 Then
RestoreKey = False
Success = RegCloseKey(hKey)
Exit Function
End If
Success = RegRestoreKey(hKey, FileName, REG_FORCE_RESTORE)
If Success = 0 Then RestoreKey = True Else RestoreKey = False
Success = RegCloseKey(hKey)
End Function
'-------------------------------------------------------------------------------------------------------------
'- 使注册表允许导入/导出
'-------------------------------------------------------------------------------------------------------------
Private Function EnablePrivilege(seName As String) As Boolean
On Error Resume Next
Dim p_lngRtn As Long
Dim p_lngToken As Long
Dim p_lngBufferLen As Long
Dim p_typLUID As LUID
Dim p_typTokenPriv As TOKEN_PRIVILEGES
Dim p_typPrevTokenPriv As TOKEN_PRIVILEGES
p_lngRtn = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, p_lngToken)
If p_lngRtn = 0 Then
EnablePrivilege = False
Exit Function
End If
If Err.LastDllError <> 0 Then
EnablePrivilege = False
Exit Function
End If
p_lngRtn = LookupPrivilegeValue(0&, seName, p_typLUID)
If p_lngRtn = 0 Then
EnablePrivilege = False
Exit Function
End If
p_typTokenPriv.PrivilegeCount = 1
p_typTokenPriv.Privileges.Attributes = SE_PRIVILEGE_ENABLED
p_typTokenPriv.Privileges.pLuid = p_typLUID
EnablePrivilege = (AdjustTokenPrivileges(p_lngToken, False, p_typTokenPriv, Len(p_typPrevTokenPriv), p_typPrevTokenPriv, p_lngBufferLen) <> 0)
End Function
'-------------------------------------------------------------------------------------------------------------
'- 将 Double 型( 限制在 0--2^32-1 )的数字转换为十六进制并在前面补零
'- 参数说明: Number--要转换的 Double 型数字
'-------------------------------------------------------------------------------------------------------------
Private Function DoubleToHex(ByVal Number As Double) As String
Dim strHex As String
strHex = Space(8)
For i = 1 To 8
Select Case Number - Int(Number / 16) * 16
Case 10
Mid(strHex, 9 - i, 1) = "A"
Case 11
Mid(strHex, 9 - i, 1) = "B"
Case 12
Mid(strHex, 9 - i, 1) = "C"
&nbs\np;        Case 13
Mid(strHex, 9 - i, 1) = "D"
Case 14
Mid(strHex, 9 - i, 1) = "E"
Case 15
Mid(strHex, 9 - i, 1) = "F"
Case Else
Mid(strHex, 9 - i, 1) = CStr(Number - Int(Number / 16) * 16)
End Select
Number = Int(Number / 16)
Next i
DoubleToHex = strHex
End Function

关于近期的模拟赛

于是,和往年一样,一到这个时候,大大小小的模拟赛都出来了,但是今年气氛很不同,以往喜欢都往Vijos塞的模拟赛,目前都喜欢邮件提交,难道都被Vijos那神奇的系统搞怕了。
于是还是收集了最近的两次,难能可贵的是,还有初赛的模拟赛,看来Oier的热情高涨呀。
2007年8月19日(农历七月初七) 晚7:00至10:00举办MM群2007七夕模拟赛,希望大家踊跃参加!
地址:http://rle.sqybi.com/
AboutMe:由于15日-20日军训,于是等到军训回来才能参加了= =
2007年8月25日 19:30—21:30(2小时) OIFans.cn第一次NOIP初赛模拟赛
地址:http://oifans.cn/
AboutMe:少有的初赛模拟赛,怎能错过。
另外上次在Vijos上办的《潘帕斯雄鹰比赛》,今年第一场不错的模拟赛,我整理成Cena的文档了。下面给出 下载:
下载文件 点击下载此文件