随笔 - 2  文章 - 2 评论 - 2 trackbacks - 0
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

昵称:冬虫草
园龄:4年5个月
粉丝:0
关注:1

搜索

 

常用链接

随笔分类

随笔档案

学习

最新评论

  最近做一个项目,需要从服务器端通过webservice获取数据,然后再在客户端处理。数据是通过字节流发送的,为了减少带宽,我先在服务器端压缩,用.net的GZipStream压缩数据,客户端接收数据,解压。但是客户端能拿到数据,却老是解压的时候读不到...

  研究了两天,排除了很多因素,最后发现问题出在GZipStream类上,原来GZipStream存取数据的时候是以4K为块进行存取的。所以在压缩的时候,在返回stream.ToArray()前应该先gZipStream.Close()。

  这种问题,谁碰到谁倒霉,完全不是常规逻辑....


posted @ 2009-06-03 00:31 冬虫草 阅读(124) 评论(0) 编辑
推公式:POJ 1701 Dissatisfying Lift

这到题的通过率不高,首先难度在于推公式,再次是高精度,幸好这个题可以直接用__int64,就过了。
下午看到这道题的时候,比较懒,想直接一个个遍历,求出下楼的不满总数&上楼的不满总数,时间复杂是O(N^2);而且没有考虑道高精度,所以直接就WA和TLE了。
推导如下:
令: pi = f[1] + f[2] ...... f[i]
          down[0] = 0;
          down[i+1] = down[i] + b*pi + (p1+p2 ....+ pi-1);
    
          qi = f[m] + f[m-1] + ...f[m-i];
          up[m] = 0;
          up[i-1] = up[i] + a* qi + (q1 + q2 ...+qi-1);
这个公式的和行就是后面的求和部分,(q1 + q2 ...+qi-1);这个也是我用两个求差,无意中发现的,
f[1]
f[1]  f[2]
f[1]  f[2]   f[3]
f[1]  f[2]   f[3]    f[4]
......................................
回来花了20分钟写出了代码,出现了2个WA,是因为我的min值设的不够大,取道99999999999999999,就过了。
代码如下:
#i nclude <iostream>
using namespace std;
const int MAX = 10001;
int f[MAX];
__int64 down[MAX],up[MAX],min;
int main()
{
 int t,m,a,k, b;
 cin>>t;
 while(t--)
 {
  memset(f,0,sizeof(f));
  memset(down,0,sizeof(down));
  memset(up,0,sizeof(up));
  cin>>m>>a>>b;
  for(int i=1; i<=m; i++)
  {
   cin>>k;
   f[i] = k;
  }
  __int64 p=f[1],q=f[m], sum = 0;
  int besti = -1;
  down[1] = 0;
  for(i=2; i<=m; i++)
  {
   down[i] = down[i-1]+b*p+sum;
   sum += p;
   p += f[i];
  }
  sum = 0; up[m] = 0;
  for(i=m-1; i>=1; i--)
  {
   up[i] = up[i+1]+a*q+sum;
   sum += q;
   q += f[i];
  }
  min=999999999999999;
  for(i=1; i<=m; i++)
  {
   if(min>(down[i]+up[i]) )
   {
    min = down[i]+up[i];
    besti = i;
   }
  }
  cout<<besti<<endl;
 }
 return 0;
posted @ 2007-10-07 11:16 冬虫草 阅读(268) 评论(0) 编辑