上午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……然后問題就縮小了……
之后的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,歷史最高……又黃回去了~~

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;
}
}
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,歷史最高……又黃回去了~~
