按 ‘ 2005年10月 ’ 归档

单循环赛的算法问题

基本原理:
如第一轮
数组第一个与最后一个元素对应,第二个与倒数第二个对应,其余类推
如果遇到与自身对应,则定为自身与最后一个元素对应
以上为除最后一个元素外其他元素的对应,最后一个元素的对应算法等下再说

第二轮
数组第一个元素现在将与倒数第二个元素对应,相似,第2则与倒数第3对应,其他类推,与自己对应的时候仍然遵循第一轮说到的那个处理规则

说到这里,就可以写出获取最后一个元素以前的其他元素每一轮的对阵信息了

现在来说最后一个元素的对阵信息获取
最后一个元素每轮的对阵元素有一个规律,就是除了第一轮是固定与第一个元素对应后,从第二轮开始,将整个数组除了最后一个元素和第一个元素外的其他元素拆分成两个数组,都是以在原来数组中的index的降序排列,然后以一隔一的方式合并这两个数组,如10个元素为例,拆分的两个数组为5,4,3,2和9,8,7,6
再一隔一合并它们,变成5,9,4,8,3,7,2,6,这个8个元素就分别是原来数组中最后一个元素在除了第一轮后每轮的对阵对手了

所以,最后一个元素的对阵情况是这样获得的,如果是第一轮,它遵循其他元素的对阵获取规则,否则,按上面说的获取对阵队伍信息

以上为队伍数量为偶数时的算法,如果队伍数量为奇数的话,则给数组加一个元素,赋给它空值""以补奇为偶,然后每轮对阵此空值的则为轮空队伍

ASP代码:

<%
Dim d,L,Temp1(),Temp2(),Temp3(),LoopNum

d = array("国际米兰","尤文图斯","罗马","拉齐奥","切沃","博洛尼亚","锡耶纳","卡利亚里","布雷西亚","AC米兰","乌迪内斯")

L = Ubound(d)

If L mod 2 = 0 Then '单数补双

ReDim Preserve d(L+1)
d(L+1) = ""
L = L + 1
End If

LoopNum = Cint(Request("Loop")) - 1 '轮次-1
If LoopNum < 0 Or Not IsNumeric(LoopNum) Then LoopNum = 0 Function GetVs(Index,n) '根据index和轮次获取对于此index的d中元素在对应轮次的对阵对手
GetVs = ""
Dim i
i = L - n - Index + 1
If i < 0 Then i = L + i
GetVs = i
If i = Index - 1 Then GetVs = L
If Index = L + 1 And n > 0 Then
Redim Temp1((L - 1) / 2 - 1)
Redim Temp2((L - 1) / 2 - 1)
Redim Temp3(L - 1)
For i = 1 To (L - 1) / 2
Temp1(i - 1) = 9 - i
Next
For i = (L - 1) / 2 + 1 To L - 1
Temp2(i - ((L - 1) / 2 + 1)) = 9 - i
Next
Dim i1,i2
i1 = 0
i2 = 0
For i = 0 to n - 1
If i Mod 2 <> 0 And i <> 0 Then
Temp3(i) = Temp1(i1)
i1 = i1 + 1
Else
Temp3(i) = Temp2(i2)
i2 = i2 + 1
End If
Next
'for each a in temp3
'response.write n & "
"
'next
'response.end

GetVs = Temp3(n-1)

End If
End Function

'Response.write GetVs(10,LoopNum)
'response.end

If Request("d") = "" Or Not IsNumeric(Request("d")) Then
dIndex = L + 1
Else
dIndex = Cint(Request("d"))
End If

response.write "参加比赛的队伍有:"
for i = 0 to L
response.write d(i)
if i <> L Then
If d(i + 1) <> "" then response.write ","
End If
next
response.write "

选择查看 "

response.write " 在"

response.write " 的对阵情况 "
response.write "


第 [ " & LoopNum + 1 & " ] 轮的比赛"
If dIndex > L Then
response.write " [ 所有球队 ] "
Else
response.write " [ " & d(dIndex) & " ] "
End If

response.write "的对阵安排如下

"

dim Temp()
redim temp(L)
for i = 0 to L
temp(i) = "NoneMatch"
Next

If dIndex > L Then
for i = 0 to L
If temp(i) = "NoneMatch" Then
Vs = d(GetVs(i+1,LoopNum))
If Vs = "" Then
response.write "

"
Else
response.write "

"
End If

temp(GetVs(i+1,LoopNum)) = i
End If
next
Else
Vs = d(GetVs(dIndex+1,LoopNum))
If Vs <> "" Then
response.write "

"
Else
response.write "

"
End If
End If
response.write "

" & d(i) & " [ 本轮轮空 ]
" & d(i) & " VS " & Vs & "
" & d(dIndex) & " VS " & Vs & "
" & d(dIndex) & " [ 本轮轮空 ]

"
%>

不知道为了什么

打了一大段,一不小心把窗口给关掉了,哭ing…. [35]

明天再补上来吧,伤心的睡觉去了 [02]

============================
不知道为了什么,忧愁她围绕着我…..
我坦白,现在我已经没有什么心情去把昨天写的给补回来了
反正写出来也不一定会有人看,还是让我深埋在心底算了

PS:头一次去吃必胜客,看来还是KFC之流比较适合我的说(相比较而言)
唉…没办法,我本来就是一乡巴佬,还是吃点国产的米饭实在一点。

领带的打法10种

1、平结
平结为最多男士选用的领结打法之一,几乎适用于各种材质的领带。
要诀:领结下方所形成的凹洞需让两边均匀且对衬。

2、交叉结
  这是对于单色素雅质料且较薄领带适合选用的领结,对于喜欢展现流行感的男士不妨多加使用“交叉结”。

3、双环结
  一条质地细致的领带再搭配上双环结颇能营造时尚感,适合年轻的上班族选用。该领结完成的特色就是第一圈会稍露出于第二圈之外,可别刻意给盖住了。

4、 温莎结
  温莎结适合用于宽领型的衬衫,该领结应多往横向发展。应避免材质过厚的领带,领结也勿打得过大。

5、双交叉结
  这样的领结很容易让人有种高雅且隆重的感觉,适合正式之活动场合选用。该领结应多运用在素色且丝质领带上,若搭配大翻领的衬衫不但适合且有种尊贵感。

6、亚伯特王子结
  适用於浪漫扣领及尖领系列衬衫
  搭配浪漫质料柔软的细款领带
  正确打法是在宽边先预留较长的空间
  并在绕第二圈时尽量贴合在一起
  即可完成此一完美结型

7、四手结(单结)
  是所有领结中最容易上手的,适用於各种款式的浪漫系列衬衫及领带

8、浪漫结
  浪漫是一种完美的结型
  故适合用於各种浪漫系列的领口及衬衫
  完成後将领结下方之宽边压以绉摺可缩小其结型
  窄边亦可将它往左右移动使其小部份出现於宽边领带旁

9、简式结(马车夫结)
  适用於质料较厚的领带
  最适合打在标准式及扣式领口之衬衫
  将其宽边以180度由上往下翻转
  并将折叠处隐藏於後方
  待完成後可再调整其领带长度
  是最常见的一种结形

10、十字结(半温莎结)
  此款结型十分优雅及罕见
  其打法亦较复杂
  使用细款领带较容易上手
  最适合搭配在浪漫的尖领及标准式领口系列衬

唉…公司突然规定上班时间必须打领带,可怜我这个从来没有打过领带的人了
没办法,只好找来这个补补课 [21]

google adsense fraud clicks(欺骗点击作弊) 分析

随着在线广告的流行,pay by per click (每次点击付钱)的模式 逐渐被大家接受。可是随之而来的问题就是fraud clicking的预防迫在眉捷,因为这将直接关系到这种广告模式能否长久生存和能否成为一种真正的网站拥有者的收入来源。

下面介绍Google Adsense系统如何从系统角度出发防止点击欺骗,希望对其它的在线广告系统防止虚假点击能有很好的指导作用:

1] 点击率 = 点击次数/共浏览的次数。
点击率是一个判断是否有无fraud clicks的关键的方法,可以想像一个网站上的广告的点击率超过10%将意味这什么。

#of Click/# of Viewed

2] 点击覆盖率/独立IP ,这个分布里如果有;单个IP 的(点击/浏览)=点击覆盖率超出了3倍的系统误差范围内将有作弊的嫌疑。

例子,例如来自 129.119.200.1 的用户浏览了 16个网页,点击了4个广告,而整个广告的点击率「从[1]里计算的到」是5%,那么计算得到:
%5 X 16 =~ 1,方差为Sqrt(1) = 1,点击覆盖率=4/1 = 4 ,根据数学上高斯分布,这种概率小于万分之一。

Ratio VS IP distribution

3] 点击率『点击覆盖率』/IP/时间
根据时间序列对点击率进行分析,如果在某一个时间段上有明显的峰值,那么这将以为着有潜在的欺骗点击的可能。

Ratio VS time

4] 网页load的时间和 广告点击时间差的分析,以及每两次click之间时间差序列的分析
[网页load的时间和 广告点击时间差] 应该是一个泊松分布 possion distribution,而每两次click之间的时间差也应该是一个Possion distribution,如果这个时间用秒记,大于25秒的话基本上呈现高斯分布的形状。

[time of loading – time of click] distribution VS Possion
[time difference of two clicks] distribution VS Possion/Gaussion

5] 针对Proxy点击的分析
改变IP进行点击可以说在以往是最难以解决最难以发现作弊方式,大概国人进行Alexa的Boost时就多半采用了Proxy进行虚假点击的方法,可是这里只要通过反向监查IP的来源是否是带有Proxy功能的服务器就可以知道了。

Reverse Proxy check

6] 针对 http_agent的分析
Http_agent/时间 的时间序列的分析,峰值超过3方差需要审查

7] 针对 http_referral 的分析
referral/时间 的时间序列的分析 ,峰值超过3方差需要审查

8] 整体效果上还有一个非常有用的量:
所有用户的有效的每千次展示费用的均值/独立IP
这个将能更加直接找到spam clicking 的运行计算机并且予以封杀。

Overall Ratio VS IP

即便我在这里给出了以上的防止作弊的办法,但是不要忘记了:

邪恶的人永远比正义的人来的多,来的猛烈。

Google sitemap for LBS2

Google sitemap:https://www.google.com/webmasters/sitemaps/login
有gmail的可以用gmail直接登录.
登录后把提交 http://yourblogurl/sitemap.asp 就行了

sitemap.asp



<%
function outputSiteMap(arrArticle){
var postTime;
Response.ContentType="text/xml; charset="+globalEncoding;
%>"?>

<%for(var i=0;i var postTime = new Date(Number(arrArticle.log_posttime));
%>

<%=theCache.settings["baseURL"]%>article.asp?id=<%=arrArticle.log_id%>
<%=func.getDateTimeString("YY-MM-DD", postTime)%>
daily 1.0

<%}%>

<%}%>

source/src_sitemap.asp

<%
var articles;
var strSQL = "SELECT log_id, log_postTime FROM [blog_Article] WHERE log_mode=1 ORDER BY log_postTime DESC";
articles = connBlog.query(strSQL);
if(!articles) articles="";

outputSiteMap(articles);

%>

如何关闭任务管理器杀不了的进程

如果你在任务管理器中无法关闭某个可疑进程,可以使用下面的方法强行关闭,注意不要杀掉进程表中的系统核心进程:
  
  使用Windows XP/2000自带的工具
  
  从Windows 2000开始,Windows系统就自带了一个用户态调试工具Ntsd,它能够杀掉大部分进程,因为被调试器附着的进程会随调试器一起退出,所以只要你在命令行下使用Ntsd调出某进程,然后退出Ntsd即可终止该进程,而且使用Ntsd会自动获得Debug权限,因此Ntsd能杀掉大部分的进程。
  
  操作方法:单击“开始”/程序/附件/命令提示符,输入命令:ntsd -c q -p PID(把最后那个PID,改成你要终止的进程的PID)。在进程列表中你可以查到某个进程的PID,例如我们要关闭图1中的Explorer.exe进程,输入:ntsd -c q -p 408即可。
  
  以上参数-p表示后面跟随的是进程PID, -c q表示执行退出Ntsd的调试命令,从命令行把以上参数传递过去就行了。