TopCoder SRM287 DIV2 Report

TopCoder SRM287 DIV2 Report

match date:Saturday, February 4, 2006
report date:Thursday, February 09, 2006

Preface:
    这是第一次参加TopCoder,手法比较生疏。虽然三题都是赶在结束前提交的,但准确率很低,所以不但给了别人一次challenge,而且System test后只留下了一题。不过运气还好,因为problem-600是条件比较烦的题目,problem-1000是有点难度的dp,两题答对的人数很少,所以这次的排名是比较不错的。在room里是第二,得分276.36,包括第一题226.36和challenge 50分,rating是一下子拿了1521,爽哦。
   
Problem 250 - CustomerStatistics:
    最简单的模拟题,解决方法也很多样。我的方法是用Hashmap<String,Integer>记录每个字符串出现的频率。然后对输入的字符串数组排序,循环将出现频率大于1的字符串放入结果数组,并从map中删除该字符串。
看过别人的代码,觉得用Treemap是最省事的。

Problem 600 - TwoEquations:
    仔细~仔细~再仔细,这个一道很烦的数学题。这题我是在最后几分钟被chanlleng的,虽然整个DIV2 还没人是过的。
题目是求线形方程组解,容易忽略的是 0x+0y=2 和0x+0y=0 应该是无解,但如果没有提前判断会认为是有多解。
    对方程组 ax+by=c ex+fy=g 解题思路如下:
        提前判断 a=0 b=0 c!=0或者 e=0 f=0 g!=0 成立,成立则无解。
        求 t1=c * f - g * b,  t2=f * a - b * e,  t3=g* a - c * e
        t1-t2=0 并且 t3-t2=0 则多解
        t2=0 无解
        t2<0 则 t1=-t1 t2=-t2 t3=-t3
        取t1 t2 的 gcd,然后约去gcd,就得到 x= t1/ t2
        取t3 t2 的 gcd,然后约去gcd,就得到 y= t3/ t2

Problem 1000- FixedSizeSums:
    比较难的题目,要求会使用dp,在PKU上有类似的题目2522(序列有点不同)。
考虑c(n,k,m) 表示 n个数分成k份以m开头的个数,求到这个就能快速求得下标是index的划分了。
dp方程是 c(n,k,m)=∑ i=(1,n-m) c(n-m,k-1,i)  for all j c(j,1,j)=1
然后循环得比较index是在哪个c(n,k,m)内,取该m ,然后n-=m,k--再求,直到k=0。

Links:

My statistic:
     http://www.topcoder.com/stat?c=coder_room_stats&cr=20862220&rd=9808&rm=247563
    
SRM 287 - Problem Set & Analysis ('s' in Static should be capitalized)
    http://www.topcoder.com/tc?module=Static&d1=match_editorials&d2=srm287

PKU 2522
    http://acm.pku.edu.cn/JudgeOnline/showproblem?problem_id=2522

你可能感兴趣的:(c,Date,report,Integer,System,div)