SRM497 [乱中升黄]

SRM497 [乱中升黄]
上午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,历史最高……又黄回去了~~



你可能感兴趣的:(SRM497 [乱中升黄])