Test on 11/10/2016
@kaike
1.進制
? (spehex.pas/c/cpp)
【問題描述】
現在給定一個特殊的計數方式,混合進制數。也就是給定一個多位數,每位數上的進制都是不一樣的。
比如給定一個三位數:這三位數的進制分別是2 3 2.也就是最小的位數逢2進1,次小位數逢3進制,最高位逢2進1.
那么,這個混合進制數最小數是0,最大數是121。一共有2*3*2=12個數。
分別是:000,001,010,011,020,021,100,101,110,111,120,121。
如果我想知道第7大的數,就是100.
現在的問題就是,給你每個位數上的進制,你找出從0開始,第k個數是多少?
【輸入】
第一行 一個整數n,表示這個數有n位 n<=30
第二行,n個用空格隔開的整數,依次為最高位到最低位的進制。 保證進制都在十進制以內。
保證這個混合進制數的最大數的編號在int范圍內。
第三行為m,表示m次查詢。m<=6
接下來m行,每行一個整數k,表示要查詢的混合進制數的第k小的數
保證k在int范圍內。
?
【輸出】
?????? m行。每行一個數,表示要查詢的混合進制數的第k小的數在這個混合進制數里的值是多少。
如果超過要求的位數,那么輸出-1
【輸入輸出樣例1】
| spehex.in | spehex.out |
| 3 2 3 2 3 7 9 14 | 100 110 -1 |
?
抓狂了兩小時,最后A了?
數據太弱了。
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int n,b[20],m,k,s[20]; 5 long long sum=1; 6 int main() 7 { 8 freopen("spehex.in","r",stdin); 9 freopen("spehex.out","w",stdout); 10 cin>>n; 11 for(int i=n;i>0;i--) 12 { cin>>b[i]; 13 sum*=b[i]; 14 } 15 cin>>m; 16 for(int i=1;i<=m;i++) 17 { 18 string s1; 19 int j=1; 20 cin>>k; 21 if(k==1) cout<<0<<endl; 22 else if(k>sum) cout<<-1<<endl; 23 else{ 24 k--; 25 while(k) 26 { 27 s[j]=k%b[j]; 28 k/=b[j]; 29 j++; 30 } 31 for(int c=j-1;c>0;c--) 32 cout<<s[c]; 33 cout<<endl; 34 } 35 } 36 return 0; 37 }= =
1.旅行
? (fule.pas/c/cpp)
【問題描述】
??? 小x要去旅游了。他決定開一輛耗油量很高的巨大的拉風的tank去旅游了。
??? 這輛tank有一個巨大的油箱,可以裝滿G升燃油。tank是很費油的,每升燃油只夠tank跑一公里,而小x的旅程要有D公里要跑。
??? 雖然油箱很大,但是,顯然旅途中是需要加油的。
??? 小x得到了旅途中加油站的信息,一共有N個加油站,第i個加油站距離起點的距離為X_i(0 <= X_i <= D),每公升燃油價格為Y_i元(1 <= Y_i <= 1,000,000)。
??? 現在小x想知道,如果出發時,tank里已經有B公升燃油(0 <= B <= D),那么,他最少花費多少錢,可以完成整個旅途。
??? 如果中間因為燃油不夠而無法完成旅程,那么你需要輸出-1.?
【輸入】
第一行4個整數:N,G,B和D
接下來N行,每行兩個整數表示X_i和 Y_i。
?
【輸出】
一個整數,表示完成旅行的最小花費,或者-1。
?
【輸入輸出樣例1】
| fule.in | fule.out |
| 4 10 3 17 2 40 9 15 5 7 10 12 | 174 |
在第一個加油點 加2升,在第5個加油點加滿10升,再到第10個加油點加2升,一共花費174.
?
【數據范圍】
30% ?數據保證? N<=100 ??G<=1000? D<=10000??
60%? 數據保證? N<=5000 ?G<=1000? D<=10000000?
100% 數據 1 <= G <= 1,000,000? 1 <= D <= 1,000,000,000? 1 <= N <= 50,000
?
輸出-1得30哈哈哈哈
看不懂我放棄了,回來找找貪心的做法。
?
1.旅程
? (journey.pas/c/cpp)
【問題描述】
給出一個長度為 N 的由小寫字母’a’~’z’和’*’組成的字符串 A,一個長度為 M 的僅由小
寫字母’a’~’z’組成的字符串 B。一個’*’可以匹配任意多個字符(包括 0 個)。求在 B 的所有 循環同構串中,有多少個能夠與 A 匹配。
循環同構串:就是把 B 的前 k 個字母(0<=k<M)移到結尾所得到的字符串。例如 abc 的 循環同構串有 abc、bca 和 cab。
A 與 B 匹配:若除了 A 中的’*’號可以匹配 B 中的任意多個字符外,其余字符一一對應, 則稱 A 與 B 匹配。例如 a*b*c 與 aadbc 是匹配的,其中第一個*對應 ad,第二個*對應空串。
?
?
【輸入】
第一行為字符串 A。
第二行為字符串 B。
?
【輸出】
輸出在 B 的所有循環同構串中,有多少個能夠與 A 匹配
?
【輸入輸出樣例1】
| journey.in | journey.out |
| aaaa aaaa | 4 |
?
【輸入輸出樣例2】
| journey.in | journey.out |
| a*a aaaaaa | 6 |
【輸入輸出樣例3】
| journey.in | journey.out |
| *a*b*c* abacabadabacaba | 15 |
?
【數據范圍】
對于 30% 的測試點,M≤20。
對于 80% 的測試點,M≤200。
對于 100% 的測試點,1<=N<=100,1≤M≤100000。
?
這題有好多個題解...然而我不會...
?
轉載于:https://www.cnblogs.com/Kaike/p/6063163.html
總結
以上是生活随笔為你收集整理的Test on 11/10/2016的全部內容,希望文章能夠幫你解決所遇到的問題。