两个梦。。

       很无聊的两个梦。。没我无聊就别看了。。
       由于我放寒假以来没有一天不是熬到4点钟以上的。。
昨天我的神经终于吃不消了。。又加上跟别人拼酒。终于倒了。。
7点就睡了。一直睡到今天中午12点才起来。。
N多天没有做梦的我终于做梦了。。
怎么说呢。。我记得我做了2个梦。第一个梦差不多忘光了。第二个梦记得还算清楚。。
由于记得不是很清楚。。有些地方只好自己乱DIE了。。
第一个梦我是梦见我没有任何原因(也许是有的。。但我忘了。。)来到了一个很SB的地方。。
那个地方好像是清朝初期跟8年前的安吉的混合体(汗。。)。。因为一开始还是一个小村落。。
走着走着就变成一个小城市了。。然后印象最深的就是我进了一个学校。。看到了很多小学的童鞋
然后我说你们怎么不回去。。他们说这里特自由。。不想走。。最后我还是逛了回儿。。然后乘地铁
走了(怎么会有地铁。。搞什么。。瀑布汗。。)。。
接下来就诡异了。。也可能是第二个梦。。就是我在坐地铁的时候。。地铁突然要翻了了。我敏锐的察觉到。。从天窗逃走了。。我们寝室的四个人也逃了还有一些人。。包括几个女生吧。。
地铁爆炸了。。人死光了。。
没错。。这就是死神来了的翻版。。然后WW莫名其妙死掉了(忘了死因)。。有个女的好像是看雪的时候被绊倒后被倒下来的杂货堆压住。。然后我和奔奔去救她。。结果等我翻出她。。她已经冻死了。。
我感觉不对了。。就打电话去叫另一个男的。。结果我看到一个人被烟火炸上了天。。掉下去摔死了。。
我们3个人(我奔奔和老大吧)。。吓个半死。。老大说自杀算了。。奔奔说好的。。
他们两个就自杀了(好像老大是盯着墙壁看了半天然后就莫名奇妙的死掉了。。奔奔是吼了声baidu你和谐我啊然后天上一道雷下来把他和谐了——就是不见了)。。。然后我也想自杀。。没有成功。。怎么也成功不了。。然后我就醒了。。

KLZ 毕业了。。

最近我沉迷于百度贴吧不能自拔。。经常熬夜在贴吧上闲逛。。
导致OI都没怎么搞。。实在很NC。。
不过由于我积极发帖。。所以在WOW得到了会员。。就是KLZ毕业了!
但是又由于我加入了刷2L党。。。就是看到2L就抢。被封ID封了10天。。
我真是该啊。。没事抢什么2L。。支持SJB!。。封我吧。。
不逛贴吧了。。搞搞OI了。。

SPOJ Select Teams

www.spoj.pl/problems/SELTEAM/
鄙视这种猥琐题。。
就是说从N个人中选择最多K个人组一个组,然后在这些人中选出一些人组成一个队。。再在这个队中选一个队长。。共有多少种办法。。
首先写一个暴力的。。是这样的。。

关键就在于后面那个式子。。按组合的意义就是说从i个数中选一个子集,并在子集中找一个队长。。
那么枚举这个队长。。其他的数就可以随便选。。所以:

我还是没有别的办法。。想了半天。。最后发现他要我们mod8388608
我分解了这个数。。发现

无语。。绝对的无语。。出题人太恶心了。。
那么只要枚举i-1到22就可以了。。23以上直接mod光了。。
代码:http://ideone.com/fgLc5VnR
提示:有时间一定要背2的乘方表了。。

写在情人节的。。

今天我TopCoder和COCI都悲剧之后。。非常郁闷。。去百度看直播了。。一直到现在。。
看到个男的在直播他的感情经历。。很有兴趣的看了看。。
结果一看就是3个小时。。。我真的有点怕了。。
他说的很对。。玩啥都行不要完感情。。被套牢了就追悔莫及了。。
爱情就是无中生有么。。人说到底就是只有自己的。。什么爱情即使在为对方也还是为自己。。
终究是矛盾的。。爱情如果搞到后面就是互相折磨了。。两个人真的不可能变成一个人的。。
知道这种也没用啊。。人也不是机器。。即使是幻影也还是蛮迷人的。。麻痹一下或许也可以吧。。
玩啥不要玩感情。。否则到头来被玩的只能是自己。。
o(︶︿︶)o 唉。。哥大学前坚决不谈恋爱了。。一心学习搞编程吧。。

TopCoder SRM Level 3

DP确实可以做。。但我无法debug。。
是这个样子的。。
设F[i][x]是name序列到第i个的时候。当前在input的x时的最短时间。。
为了简单起见只写F[x]
分四种情况
F[x]=(x-y)+F[y]=x+(F[y]-y)(y<x)
F[x]=(y-x)+F[y]=-x+(F[y]+y)(y>x)
F[x]=n-(x-y)+….
……
每种情况都可以弄的与x无关。。然后扫描四遍。。
但我无法Debug啊。。不知道怎么搞的

COCI 2010-4- 3:iks

就是说有N个数。。然后每次可以把一个数的质因子扔给另一个数。。让最终全体数gcd尽量大。。并求出最小步数。。 很明显分质因子讨论。。每个因子算出平均拥有次数(round down)。。然后对每个不够的全部补上就可以了。。 但我0分。。为什么呢?我很迷惑。。后来发现我少写了一行。。该死的样例!
现在直接A掉了。。。555
#include<iostream>
#include<string>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
typedef long long ll;
const int maxn=100;
int n,minstep=0;
set<int> Prime;
int A[maxn];
void getPrime(int x)
{
if(x%2==0)    Prime.insert(2);
while(x%2==0) x/=2;
int p=x;
for(int i=3;i*i<=p&&x!=1;i+=2)
while(x%i==0)
{
Prime.insert(i);
x/=i;
}
if(x!=1) Prime.insert(x);
}
vector<int> Ps;
void init()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>A[i],getPrime(A[i]);
Ps=vector<int>(Prime.begin(),Prime.end());
}
int CalAPrime(int x)
{
static int con[maxn];
memset(con,0,sizeof(con));//这行没写。。全部算错。。0分。。TMD
int sum=0;
memset(con,0,sizeof(0));
for(int i=0;i<n;i++)
{
int t=A[i];
while(t%x==0)
con[i]++,t/=x,sum++;
}
int a=sum/n;
for(int i=0;i<n;i++)
if(con[i]<a)
minstep+=a-con[i];
int res=1;for(int i=0;i<a;i++) res*=x;
return res;
}
int main()
{
//freopen("in","r",stdin);
//freopen("out","w",stdout);
init();ll ans=1;
for(int i=0;i<Ps.size();i++)
ans*=CalAPrime(Ps[i]);
cout<<ans<<" "<<minstep<<endl;
}

TopCoder SRM 461 And COCI 2010-4

God今天两场比赛中间一分钟休息都没有。。做的脑子都昏了。。COCI我很悲剧啊。。简单题A掉了。。难的只拿了50分囧。。TopCoder 我居然拿了房间的第一名。。因为Level3的都被Cha掉了。。我Level3写的脑子都晕了。。最后还是没有搞定。。Cha的时候我想Cha别人时发现能Cha的都被Cha掉了。。Level2的程序我自己看的都晕。。根本Cha不了。。Level1太水了。也没人错囧。。Level3被别人眼疾手快Cha掉了。。见鬼了。。我第二题也被System Test搞悲剧掉了。。200多名。。居然直接变成蓝色了。。怎么搞的?

SGU 149

求出一棵树中离每个点最远的点。。 典型的树形DP。。老题了。。看程序吧。。 Java太难写这种题目了。。只好用c++了。。
#include<cstdio>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;
typedef pair<int,int> pi;
struct edge
{
int t,c;
edge(int _t,int _c):t(_t),c(_c){}
};
const int maxn=10000;
pi ch[maxn];
int f[maxn];
vector<edge> E[maxn];
typedef vector<edge>::iterator it;
void add_edge(int s,int t,int c)
{
E[s].push_back(edge(t,c));
E[t].push_back(edge(s,c));
}
void Renew(pi&o,int x)
{
if(o.second<x)
{
o.second=x;
if(o.first<o.second)
swap(o.first,o.second);
}
}
void Renew(int&x,int c)
{
x=max(x,c);
}
void dfsch(int x,int fa)
{
ch[x]=pi(0,0);
for(it i=E[x].begin();i!=E[x].end();i++)
if(i->t!=fa)
{
dfsch(i->t,x);
Renew(ch[x],ch[i->t].first+i->c);
}
}
void dfsf(int x,int fa)
{
for(it i=E[x].begin();i!=E[x].end();i++)
if(i->t!=fa)
{
Renew(f[i->t],f[x]+i->c);
if(ch[x].first==ch[i->t].first+i->c)
Renew(f[i->t],ch[x].second+i->c);
else
Renew(f[i->t],ch[x].first+i->c);
dfsf(i->t,x);
}
}
int n;
void init()
{
scanf("%d",&n);
for(int s=1,t,c;s<n;s++)
{
scanf("%d %d",&t,&c);
add_edge(s,t-1,c);
}
}
int main()
{
//freopen("in","r",stdin);
//freopen("out","w",stdout);
init();f[0]=0;
dfsch(0,-1);
dfsf(0,-1);
for(int i=0;i<n;i++)
printf("%dn",max(ch[i].first,f[i]));
}