pku1894-1903 Northeastern Europe 2003 解题报告

Solved ID Title Ratio(AC/att)
Yes Problem A Alternative Scale of Notation 50.0%(2/4) Submit
Problem B Bring Them There 0.0%(0/4) Submit
Yes Problem C Code Formatting 100.0%(2/2) Submit
Yes Problem D Data Mining 100.0%(3/3) Submit
Problem E Entropy 0.0%(0/0) Submit
Yes Problem F Farmer Bill's Problem 66.66%(2/3) Submit
Problem G Game 0.0%(0/0) Submit
Yes Problem H Hypertransmission 33.33%(3/9) Submit
Problem I Illumination 0.0%(0/0) Submit
Yes Problem J Jurassic Remains 66.66%(2/3) Submit
Yes Problem K King's Quest 40.0%(2/5) Submit

发现现在做比赛越来越窝囊了。。。一点状态没有
还是流水账一下
pku1894 Alternative Scale of Notation
记得秦九昭算法的思想?不说了,不断地提取系数

pku1895 Bring Them There
看输出以为是搜索,结果果断的TLE。。CW神牛说了一种分层+二分网络流方案,觉得可以。改天写好补上

pku1896 Code Formatting
注意换行的时候,当;和{在一起的时候;的换行特殊考虑。。设置一个标记事后换行就可以了。。

PKU1897 Data Mining
很简单的一题,枚举就可以。注意细节,总长度为(n-1)*newsizeB+sizeB
阴险的数据?当n=1?

pku1898 Entropy
我不想说什么,POJ的SPJ真是诡异啊。。。。。我原来写了个程序,自己写了个测试程序测试了下,没问题,一提交,WA,超级无奈之下,打了1M的表,提交上去,A。。。说下,不要随机化,动态逼近即可。。先设置2个点,一头一尾,肯定最小。然后试图调整达到最大值;调整不了再插入点。就是这样。。
  1 # include <cstdio>
  2    # include <cmath>
  3    # include <vector>
  4    # define N 1000
  5    using namespace std;
  6    # define abs(a) ((a)<0?-(a):(a))
  7    int num,now;
  8    int data[1001];
  9    vector<int> ans;
 10    bool upper()
 11    {
 12       for(int i=0;i<ans.size();i++)
 13         for(int j=i+1;j<ans.size();j++)
 14           if(now-data[ans[i]]-data[ans[j]]+data[ans[i]+1]+data[ans[j]-1]>now&&now-data[ans[i]]-data[ans[j]]+data[ans[i]+1]+data[ans[j]-1]<=num)
 15           {
 16             now=now-data[ans[i]]-data[ans[j]]+data[ans[i]+1]+data[ans[j]-1];
 17             ans[i]++;
 18             ans[j]--;
 19             return true;
 20           }

 21           else if(ans[i]>1&&ans[j]<1000&&now-data[ans[i]]-data[ans[j]]+data[ans[i]-1]+data[ans[j]+1]>now&&now-data[ans[i]]-data[ans[j]]+data[ans[i]-1]+data[ans[j]+1]<=num)
 22            {
 23             now=now-data[ans[i]]-data[ans[j]]+data[ans[i]-1]+data[ans[j]+1];
 24             ans[i]--;
 25             ans[j]++;
 26             return true;
 27           }

 28       return false;
 29    }
 
 30    bool lower()
 31    {
 32       for(int i=0;i<ans.size();i++)
 33         for(int j=i+1;j<ans.size();j++)
 34           if(now-data[ans[i]]-data[ans[j]]+data[ans[i]+1]+data[ans[j]-1]<now)
 35           {
 36             now=now-data[ans[i]]-data[ans[j]]+data[ans[i]+1]+data[ans[j]-1];
 37             ans[i]++;
 38             ans[j]--;
 39             return true;
 40           }

 41           else if(ans[i]>1&&ans[j]<1000&&now-data[ans[i]]-data[ans[j]]+data[ans[i]-1]+data[ans[j]+1]<now)
 42            {
 43             now=now-data[ans[i]]-data[ans[j]]+data[ans[i]-1]+data[ans[j]+1];
 44             ans[i]--;
 45             ans[j]++;
 46             return true;
 47           }

 48       return false;
 49    }
 
 50    void spilt()
 51    {
 52        for(int i=0;i<ans.size();i++)
 53          if(ans[i]>1)
 54          {
 55              now-=data[ans[i]];
 56              now+=data[ans[i]/2];
 57              now+=data[ans[i]-ans[i]/2];
 58              ans.push_back(ans[i]/2);
 59              ans[i]=ans[i]-ans[i]/2;
 60              return;
 61          }
   
 62    }

 63    int cal()
 64    {
 65        int tmp=0;
 66        for(int i=0;i<ans.size();i++)
 67           tmp+=data[ans[i]];
 68           return tmp;
 69           
 70    }

 71    int main()
 72    {
 73        //scanf("%lf",&num);
 74        for(int i=1;i<=1000;i++)
 75          data[i]=-i*log2(i/1000.0)+1e-6;
 76        double tnum;
 77        scanf("%lf",&tnum);
 78        num=tnum*1000+1e-6;
 79        if(num==0)
 80        {
 81          printf("\n");
 82          return 0;
 83        }

 84        ans.clear();
 85        now=data[1]+data[999];
 86        ans.push_back(1);
 87        ans.push_back(999);
 88        while(abs(num-now)>1)
 89        {
 90             while(num>now&upper());
 91             if(num>now)
 92             {
 93                  spilt();
 94                  while(now>num) lower();
 95             }

 96        }

 97        char map[]={"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789. "};
 98        int p=0;
 99        for(int i=0;i<ans.size();i++)
100        {
101            while(ans[i]--)
102              putchar(map[p]);
103            p++;
104        }

105        putchar('\n');
106        return 0;
107}

pku1899 Farmer Bill's Problem
无限迭代+并查集。复杂度?n2logn

pku1901 Hypertransmission
枚举所有可能的半径+离散化+树状数组统计

pku1903 Jurassic Remains
1e8的搜索+位运算,真是蛋疼,搜索无敌啊。。

pku1904 King's Quest
二分匹配的好题,在延伸独立轨时的特点。最终转化为求SSG

posted on 2011-02-04 01:08 yzhw 阅读(375) 评论(0)  编辑 收藏 引用 所属分类: searchgraphnumbericdata struct


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

公告

统计系统

留言簿(1)

随笔分类(227)

文章分类(2)

OJ

最新随笔

搜索

积分与排名

最新评论

阅读排行榜