[NKU]sweet @ Google && TopCoder && CodeForces

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  33 Posts :: 1 Stories :: 15 Comments :: 0 Trackbacks
上午10:00,绝好的SRM时间……

250:给出一个字符串,长度为N(N<=50),由字母'D'和‘I’构成,‘D’表示 a[i]>a[i+1]; 'I' 表示 a[i]<a[i+1]; 根据这个字符串,求一个长度为N+1的排列,如果多解存在,求字典序最小的……
乍一看有点懵……然后自然想到想办法缩减问题规模……刚开始想给1定位,然后缩减成2~N的子问题,不太好想……
于是反过来给N定位,由于要求字典序最小,我们尽量把N往右边放;因为N是最大的,所以肯定是“I”上去的……于是找到最右边的I,让他=N……然后如果后面有D,则顺序的N-1,N-2……然后问题就缩小了……

class PermutationSignature {
    
public int[] reconstruct (String str){
        Str 
= "I"+str;
        
int n = str.length();
        
int[] ans = new int[n];
        
int right = n;
        
int now = n;
        
for (int i = n-1;i >= 0;i--){
            
if (str.charAt(i)=='I') {
                
for (int j = i;j<right;j++) {
                    ans[j] 
= now --;
                }
                right 
= i;
            }
        }
        
return ans;
    }
}

之后的550,一个小编译器式的问题……我表示这种题我最苦手了……战略放弃……
之后的1000,大概是给你A,B,N,K,Upper_bound 和Lower_bound(long 级别),问 A*K %N , (A+1)*K %N ....(B)*K%N这些数里面,有多少个<=Upper_bound 且 >=Lower_bound的,写了写……最后交了个样例都不过的程序,瞬间被cha……
看了看神人的程序,思路大方向没问题,但是计数上面我的方法太拙劣了……

然后,不幸的是数据似乎出了点问题,一直都在rejudge……
最后rating 1493->1565,历史最高……又黄回去了~~

posted on 2011-02-11 13:55 sweetsc 阅读(211) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: