我叫张小黑
张小黑的挣扎生活
posts - 66,  comments - 109,  trackbacks - 0

solaris 10.0下的gaim并不支持qq~~不是很方便~~网页版的qq又实在太丑陋了~~而且很不方便~~安全性应该也不高~于是我还是下定决心装一个gaim的升级软件pidgin~~它支持更多的聊天模式
今天的最后一次尝试~~成功了~~happy
在网上搜了很久很久~~参考了大家的安装方法~但是还是有点些是要自己试一试的~~

首先下载一个pidgin的软件包~~我是下载的最新版本2.5.1
http://www.pidgin.im/download/source/(我是保存在桌面上)

下面执行解压缩命令

    # bunzip2 /Desktop/pidgin-2.5.1.tar.bz2
    # tar xvf /Desktop/pidgin-2.5.1.tar
    # cd pidgin-2.5.1

准备GCC编译器Solaris10以后,gcc缺省安装在/usr/sfw/bin目录下。因此,只需要设置好环境变量即可:

    # PATH=/usr/sfw/bin:/usr/ccs/bin:$PATH
    # export PATH
(这一步我不知道到底要不要~~参考的别人是说要的~~但是sun网页上提供的是没有的,反正我是敲了的)

下面是configure
在成功执行以上步緅后会在/pidgin-2.5.1包里找到一个configure文件
网上提供的资料都说这里需要注释一些个什么东西~~但是我在这个文件进行关键字查找都找不到他说的那些个东西~~我想可能是pidgin版本不同的原因


所以我们直接进行configure就好了

    # ./configure --disable-perl --with-ncurses-headers=/opt/csw/include/ncurses             --prefix=/opt/csw
(开始我是按照sun公司的敲的的~~但是check过后总会说一些东西需要disable掉,于是按照他说的一个一个的往命令行里面添加)
最后这行命令变成了
    #./configure --disable-perl --disable-gtkspell --disable-meanwhile --disable-nm         --disable-avahi --disable-tcl --with-ncurses-headers=/opt/csw/include/ncurses             --prefix=/opt/csw

成功后,再执行下面的编译命令:
# gmake
# gmail install
# alias gaim='/opt/csw/bin/pidgin > /dev/null 2>&1 &'
参考资料
就好啦~~

参考资料:
http://www.unix-center.net/bbs/viewthread.php?tid=5249
http://blogs.sun.com/mishuang/entry/how_to_use_qq_with
http://wiki.developers.sun.com.cn/index.php/Solaris%E4%B8%8B%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85gcc%E7%BC%96%E8%AF%91%E5%99%A8%3F
http://hi.baidu.com/i0n_p/blog/item/d96b6308ca2bfb900a7b82fa.html
posted @ 2008-09-16 13:02 zoyi 阅读(1620) | 评论 (3)编辑 收藏
     摘要: 这道题很烦。。我的代码也很烦。。我想也没人愿意会看下面是为我找错误提供方便的几个地方:http://blog.csdn.net/tiaotiaoyly/archive/2008/02/11/2087975.aspx他总结得很好。。但是对我帮助不大。。呵呵。。不过可以参考一下开始几个错误还是自己的数据测出来的。。我最致命的错误是横线的输出横线的长度其实取决于上下两个数的长度的。。我一直以为是取决于最...  阅读全文
posted @ 2008-07-15 22:29 zoyi 阅读(615) | 评论 (0)编辑 收藏
从昨天到今天。。。。
我不明白。。为什么一直错。。。我现在还是不明白。。
这是我写这类问题。。似乎都会出现的问题。。要把数组开单很多很多倍。。我到现在还是不明白这是为什么





还是第一次能在第一页的呢。。呵呵。。小安慰一下

#include<iostream>
#include
<algorithm>
#define MaxN 
300005
             
#define MaxM 
200005
using namespace std;
int N,M,res[MaxM];
struct node
{
    
int pri,n;
    friend bool operator
<(node a,node b)
    {
        return a.pri
<b.pri;
    }
}index[MaxN],ii[MaxN];
struct line
{
    
int b,e,k,n,ans;
    friend bool operator
<(line a,line b)
    {
        return a.b
<b.b;
    }
}Line[MaxM];
int cc[MaxN];
void inser_del(
int key,int flag)
{
    
int L=0,R=N-1,mid,v=1;
    
while(L<R)
    {
        cc[v]
+=flag;
        
mid=(L+R)/2;
        v
*=2;
        
if(key<=mid)
            R
=mid;
        
else
        {
            v
++;
            L
=mid+1;
        }
    }
    cc[v]
+=flag;
}
int solve(int k)
{
    
int L=0,R=N-1,mid,v=1;
    
while(L<R)
    {
        
mid=(L+R)/2;
        
if(cc[2*v]>=k)
        {
            R
=mid;
            v
*=2;
        }
        
else 
        {
            L
=mid+1;
            k
-=cc[2*v];
            v
=2*v+1;
        }
    }
    return index[L].pri;
}

int main()
{
    
int i,j;
    scanf(
"%d%d",&N,&M);

        
for(i=0;i<N;index[i].n=i++)
            scanf(
"%d",&index[i].pri);
        
for(i=0;i<M;Line[i].n=i++)
        {
            scanf(
"%d%d%d",&Line[i].b,&Line[i].e,&Line[i].k);
            
if(Line[i].b>Line[i].e)swap(Line[i].b,Line[i].e);
            
--Line[i].b;
            
--Line[i].e;
        }
        
//初始化-->cc为0
        sort(index,index
+N);
        sort(Line,Line
+M);
        
        
for(i=0;i<N;i++)
        {
            ii[index[i].n].pri
=index[i].pri;
            ii[index[i].n].n
=i;
        }

        
for(i=Line[0].b;i<=Line[0].e;i++)
            inser_del(ii[i].n,
1);

        
for(i=1;i<M;i++)
        {
            Line[i
-1].ans=solve(Line[i-1].k);
            
if(Line[i - 1 ].e>=Line[i].b)
             {
for  (j = Line[i - 1 ].b; j < Line[i].b; j ++ )
                inser_del(ii[j].n,
-1);
             
for  (j = Line[i - 1 ].e + 1 ; j <= Line[i].e; j ++ )
               inser_del(ii[j].n,
1);
             
            } 
            
else 
            {
             
for(j=Line[i - 1].b;j<=Line[i - 1 ].e;j ++ )
                 inser_del(ii[j].n,
-1);
             
for  (j = Line[i].b; j <= Line[i].e; j ++ )
                 inser_del(ii[j].n,
1);
            }
        }
        Line[i
-1].ans=solve(Line[i-1].k);
        
for(i=0;i<M;i++)
            res[Line[i].n]
=Line[i].ans;
        
for(i=0;i<M;i++)
            printf(
"%d\n",res[i]);

    return 
0;
}

posted @ 2008-07-15 13:46 zoyi 阅读(378) | 评论 (0)编辑 收藏
这个题真的好烦。。

别的就不写了。。贴几个数据

7
999
898
1
45221
452511
43349
808

只记得这么几个了。。。这几个都出过错。。

以下是代码。。。
坚持一点oj没错。。如果一直是wa。。那么出错的肯定是你!

#include<iostream>
#define MaxK 
2000005
char k[MaxK];
int down[MaxK];
void solve()
{
    
int len=(int)strlen(k),i,j,c;
    bool tag
=true;
    
for(i=0;i<len;i++)
        
if(k[i]!='9')
            break;
    
if(i>=len)
    {
        
for(i=1;i<len;i++)
            k[i]
='0';
        k[0]=k[len]='1';
        k[len+1]='\0';
        return;
    }
    
if(len%2)
        i
=len/2-1,j=i+2;
    
else
        i
=(len-1)/2,j=i+1;
    
while(i>=0&&j<len)
    {
        
if(k[i]>k[j])
            down[j]
=-1;//k[j]up
        
else if(k[i]<k[j])
            down[j]
=1;//k[j]down
        i
--,j++;
    }
    
if(len%2)
        i
=len/2+1;
    
else i=len/2;
    
for(;i<len;i++)
    {
        
if(down[i]==-1)
            break;
        
else if(down[i]==1)
        {
            tag
=false;
            break;
        }
    }
    
if(i>=len)tag=false;
    
for(len%2?i=len/2+1:i=len/2;i<len;i++)

        
if(down[i])
        {
            k[i]
=k[len-1-i];
    }
    
if(!tag)
    {
            i
=len/2,c=1;
            
while(i>=0&&c)
            {
                c
=(k[i]-'0'+1)/10;
                k[i]=((k[i]-'0')+1)%10+'0';
                k[len-1-i]=k[i];
                i
--;
            }
    }
}
    
int main()
{
    
int T;
    scanf(
"%d",&T);
    
while(T--)
    {
        memset(down,
0,sizeof(down));
        memset(k,
0,sizeof(k));
        scanf(
"%s",k);
        solve();
        printf(
"%s\n",k);
    }
    return 
0;
}
posted @ 2008-07-14 14:31 zoyi 阅读(385) | 评论 (1)编辑 收藏

一维情况:

 

设序列的元素存储在a[]中,a的下标是1..n的正整数,需要动态地更新某个a[x]的值,同时要求出a[x1]到a[y1]这一段所有元素的和。

如果要动态更新m次。。我们显然可以用o(mn)的暴力弄出来
其实可以o(mlogn)的;

在李睿的论文里提出了一种新的数据结构:
很巧妙,很强大:
对于序列a[],我们设一个数组C,其中 (k为i在二进制下末尾0的个数)。

c[i]=a[i]+a[i-1]+...+
a[i-2^k+1]//这一项的最后一位一定是0
包含a[x]的c序列:

c[x]=a[x]+a[x-1]+...+a[x-2^k+1]
c[x+2^k]=a[x+2^k]+a[x+2^k-1]...+a[x]+...+a[x-2^k+1]
....
一直加到<=S的状况


针对这个情况。。我们有两个实现。。一个是update(),另一个是统计的操作
如果针对上面的统计就是求给定区间的sum (x,y)=sum(1,y)-sum(1,x);

procedure UPDATA(x,A)
begin
     p←x
     
while (p<=n) do
     begin
         C[p]←C[p]
+A
            p←p
+LOWBIT(p)
     
end
end 

求a[1]-a[x]的和
function  SUM(x)
begin
    ans ← 
0
p ← x
while (p>0do
     begin
          ans←ans
+C[p]
          p←p
-LOWBIT(p)
     
end
return ans
end 

我们通过一维的可以扩展成二维的:(IOI  MOBILES
以下是我的这代码:

#include
<iostream>
#define MaxS 
1025
#define L(a) (a
&(a^(a-1)))
int S,x,y,A,L,B,R,T;
int c[MaxS][MaxS];
void update()
{
    
//x<=i<S的c[i][y]更新
    
int i,j;
    
for(i=x;i<=S;i+=L(i))
        
for(j=y;j<=S;j+=L(j))
            c[i][j]
+=A;
}
int compute(int x,int y)
{
    
int result=0,i,j;
    
for(i=x;i>0;i-=L(i))
        
for(j=y;j>0;j-=L(j))
            result
+=c[i][j];
    return result;
}
int main()
{
    
int oper,ans;
    
while(scanf("%d",&oper)&&oper!=3)
    {
        switch (oper)
        {
        
case 0:
            scanf(
"%d",&S);
            memset(c,
0,sizeof(c));
            break;
        
case 1:
            scanf(
"%d%d%d",&x,&y,&A);
            x
++,y++;
            update();
            break;
        
case 2:
            scanf(
"%d%d%d%d",&L,&B,&R,&T);
            L
++,B++,R++,T++;
            ans
=compute(R,T)-compute(L-1,T)-compute(R,B-1)+compute(L-1,B-1);
            printf(
"%d\n",ans);
            break;
        }
    }
    return 
0;
}
posted @ 2008-07-13 19:40 zoyi 阅读(279) | 评论 (0)编辑 收藏

今天居然一点都不想睡觉。。。。
昨天一夜。。。呵呵。。。
我们干了什么呢。。。
在大大的寝室里偷来了面条。。偷了火锅底料。。搬来了锅。。。
很久都没有煮东西吃了。。辣辣的火锅的底料。。。。
我。。麦兜。。秀怡(这个名字好久没叫了(*^__^*) 嘻嘻……)
我们都辣的满面通红。。。
我还很逞强的bs兜兜。。。。这个猪头一点用都没有。。。。。
o(∩_∩)o...哈哈...
秀逸的装备最齐全了。。呵呵我和兜兜是没碗没勺。。。
用贪婪的眼神在寝室里狂扫。。。看见了过年发的阿华田
呵呵。。还没怎么喝呢。。
要不都倒掉。。拿罐子当碗用。。呵呵。。我的perfect 建议
。。。。。被兜兜白眼了。。。
最后将用茶杯作碗。。。勺子动用了响响的生日礼物。。呵呵。。
我还顺便抱怨了一句怎么没人送碗做生日礼物呢。。呵呵。。。

/**********************************************************************************/

其实昨天本来睡得很早。。
很累。。很难受。
妈妈很晚的电话叫醒了在床上酣睡的我和麦兜。。。
以前和妈妈一直都有心灵感应的。。一般妈妈的电话如果我在的话。。总会有感觉的。。
这一次。。。是麦兜接的。。
麦兜把我喊下来。。
拿起电话。。。。妈妈的思念从另一边传来
妈妈问要不要妈妈来。。。
即使天气很热。。妈妈还是很想来的吧
我是个自私的人。。
“你来我更累。。。我没空陪你啊”
 我真的很自私。。我明白这一点。。我也很痛恨这样的我。。
我怎么能说出这么自私的话。。
妈妈。。真的。。对不起。。
我知道您想我。。您很孤独。。。
我和爸爸都不在你身边。。
对不起。。。
我渐渐长大。。。从你们的保护中悄悄飞走。。。
你们看着我越飞越远。。其实我也不知道家对我来说意味着什么

家是指你和爸爸。。还是我们曾经一起住过十年的小屋
如果是你和爸爸。。。。如果就只有我们三个人。。就算出门在外也会有家在一起的感觉么。。
我不知道。。。记得在今年的年三十。。第一个孤独过年的日子
对这上海的夜。。我想。。妈妈说我不回去过年。。你们就来上海陪我。。
如果真的是这样。。那我们一家三口真的好惨。。在上海这个陌生的城市。。
这是父爱母爱。。。我懂。。但是懂得好辛苦。。我能做什么呢。。。。
妈妈你说过在别人面前你很骄傲。。有个好孩子。。但是别人不懂得你心里的苦。。
每次你这么说。。。我知道你心里在哭。。
爸爸我总是那么少的想起你。。有一次妈妈说爸爸很开心我和爸爸发短信聊天。。
写不下去了。。
呵呵。。我是个没用的人。。
哭的一趟糊涂。。看不清了。。呵呵。。

我爱你们。。爸爸妈妈。。
真的。。我永远爱你们。。我对不起你们
我不知道我除了说对不起还能说什么
posted @ 2008-07-13 14:34 zoyi 阅读(433) | 评论 (6)编辑 收藏

在poi的列表上是easy。。。。
我倒。。这也easy。。。。。。
这道题多亏了javaman。。呵呵。。这一次。。他讲的挺清楚的。。。谢谢他一下

题目大意:
      根据输入,序列的长度,序列和,求这样一串序列
      序列满足以下情况:

  • for any k, such that 1 <= k < n : |ak - ak+1| = 1 and
  • a1 = 0

  如果没有如此序列则输出"No"

我们假设n-->序列长度,S-->序列和;

S=sigma a[i](1<=i<=n)
令bi=a[i+1]-a[i] (1<=i<n)

S=sigama b[i]+sigama a[i] (1<=i<n) ----> S= sgama (n-i)b[i]; (1<=i<n)//迭代加一下就能推出来

b[i]-->-1 or 1

S=sigama (n-i)(b[i]+1)-sigama(n-i)
   =2*sigama ((n-i)(b[i]+1)/2)  -  n*(n-1)/2

d[i]=(b[i]+1)/2-->0 or 1
根据上式得:
no-->
1: S+n*(n-1)/2 为奇数
2: abs(S)>n*(n-1)/2  //important ....我就是这里一直错...绝对值...没考虑....

#include<iostream>
#include
<math.h>
int N,S;
int main()
{
    
int std,i,d,pre;
    
int T;
    scanf(
"%d",&T);
    
for(int j=1;j<=T;j++)
    {
        scanf(
"%d%d",&N,&S);
        std
=(N*(N-1))/2;
        
if((S+std)%2||abs(S)>std)
        {
            printf(
"No\n");
            
if(j!=T)printf("\n");
            continue;
        }
        printf(
"0\n");
        
for(pre=0,std+=S,std/=2,i=1;i<N;i++)
        {
            
if(std>=N-i)
            {    
                d
=1;
                std
-=N-i;
            }
            
else d=0;
            printf(
"%d\n",pre=2*d-1+pre);
        }
        
if(j!=T)printf("\n");
    }
    return 
0;
}
posted @ 2008-07-12 12:08 zoyi 阅读(522) | 评论 (1)编辑 收藏

一道数学题。弱弱不会做。。

开始一直钻牛角尖。。用暴力把数据跑了一下。然后找规律。。发现好像是找n的互质的质因数对数。。
小的数据用手算是可以算出来的。。但是不知道怎么用程序来算。。

后面参考pc的。。。。知道了是怎么回事。。
我想以后如果有需要求质因数对数的个数。。可以用这种方法反过来求。。

下面是代码:

#include<iostream>
int N;
int solve(int N)
{
    
int i,ans=1,t;
    
for(i=2;i*i<=N;i++)
    {
        t
=0;
        
while(!(N%i))
        {
            t
++;
            N
/=i;
        }
        ans
*=2*t+1;
    }
    
if(ans==1||N!=1)ans*=3;
    return ans;
}
int main()
{
    
int T,cas,id;
    scanf(
"%d",&T);
    
for(cas=1;cas<=T;cas++)
    {
        scanf(
"%d",&N);
        id
=solve(N);
        
if(N==1)id=1;
        printf(
"Scenario #%d:\n%d\n\n",cas,(id+1)/2);
    }
    return 
0;
}
posted @ 2008-07-09 10:41 zoyi 阅读(490) | 评论 (1)编辑 收藏

这道题是zp推荐的,说是一道动态规划题,做完后觉得这就是我最不认为是dp的一种dp题,他的思想和那种给你一个地图,起始位置在左上角,终点位置在右下角,每个位置上都有一定的宝藏,规定了每次只能往右走一步,或是往下走一步。。然后问你最后能取得的宝藏最大值,开始我就不认为这种题是dp,他的状态只会和前一状态有关。而1029这个题就是这样子的。

下面是我做这个题之前别人的提示,有几个关键字:
2^n个状态,n为列数,我们做到按行更新,更新一行的时候我们按列来,如果更新到最后一列,则换下一行。
更新当前行时和上一行有关。

这两句话给了开始的模糊印象。。但是确实有点抽象

下面是cpg2001  

用横线来划分阶段,对于图一,虽然划分后很整齐,但把某些砖分成了两半,于是将他们也添加进来,于是变成了图二,其显得参差不齐,但最多也是向下突出一格,在图三中,我们将图二的空隙填满,则又转移到了下一种状态。

定义添砖小块状态为1,否则为0,则每行状态可以映射到一个数(0,2^h})于是可建立这样的状态a[ i j]:表示第i行填满,第i+1行对应状态为j时的不同方案数,a[I,j]=a[i-1,k],其中,状态k可导出状态j,初始化条件a[0,0]=1,最后a[w,0]即为所求。


的启发,再加上zp的讲解逐渐清晰起来:
行数我们默认是从0开始


第三行的赋值情况 :000011
第四行的赋值情况 :100100
第五行的赋值情况 :011000
图一:第三行填满了,第三行的第一个格子是一个竖形格子,这个竖形格子的上格子在第三行,下格子在第四行,于是在第四行需要补格子故置为1,第三行的第二个第三个格子是个横条,我们都置为0,紧接着又是一个竖形格子的上半个格子,同样是0,下面两个都是竖形格子的下半个置为1
同理将分别对第四行第五行赋值
比如图二的第四行,第二第三个两个连续的零,还有一种方案是摆一个横条。
其他的详见注释。

我的代码:
#include<iostream>
#define max(a,b) (a
>b?a:b)
int N,M,maxl=0;
__int64 ans[
3000],tmp[3000];
void solve(
int j,int last,int now)
{
    
if(j>M)
    {
        tmp[
now]+=ans[last];
        maxl
=max(maxl,now);
        return;
    }
    
int up=(1<<(M-j))&last,uprt;
    
//up-->头顶上的那个格子状态,uprt-->头顶上的右边的那个格子的状态
    
if(j==M)
    {
        
if(!up)solve(j+1,last,now*2+1);//就剩一个空了,并且上面的那个是0,那么显然是竖条
        
//这一行需要补一个小方格
        
//如果上面是1,显然下面仍然是要接着一个竖条,但是这个小方格是上面这半个,无需置1
        
else solve(j+1,last,now*2);
    }
    
else
    {
        uprt
=(1<<(M-j-1))&last;
        
if(!up)
        {
            solve(j
+1,last,now*2+1);
            
if(!uprt)//如果头顶上的不为0,头顶上右边的也不为0,下面的就可以放一个横条
                solve(j
+2,last,now*4);
        }
        
else//这个地方时很容易出错的,我这里认为是第j列置为0
            
//可以理解为是一个竖形条状的上半个格子,也可以认为是一个横行条状的左半个格子
            
//这里千万不能把这两种情况分开计算,这样会重复的
            solve(j
+1,last,now*2);
    }
}
            

int main()
{
    
int i,j;
    
while(scanf("%d%d",&N,&M)&&N)
    {
        
if((N*M)%2)
        {
            printf(
"0\n");
            continue;
        }
        memset(ans,
0,sizeof(ans));
        ans[
0]=1;
        
for(i=1;i<=N;i++)
        {
            memset(tmp,
0,sizeof(tmp));
            
for(j=0;j<=maxl;j++)
                
if(ans[j])solve(1,j,0);
            memcpy(ans,tmp,sizeof(tmp));
        }
        printf(
"%I64d\n",ans[0]);
    }
    return 
0;
}
posted @ 2008-07-08 14:01 zoyi 阅读(796) | 评论 (2)编辑 收藏
fighting~~
posted @ 2008-05-29 13:29 zoyi 阅读(540) | 评论 (7)编辑 收藏
仅列出标题
共7页: 1 2 3 4 5 6 7 
欢迎光临 我的白菜菜园

<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(8)

随笔分类

随笔档案

文章档案

相册

acmer

online judge

队友

技术

朋友

搜索

  •  

最新评论

阅读排行榜

评论排行榜