當(dāng)前位置:
首頁(yè) >
JZOJ 5183. 【NOIP2017提高组模拟6.29】小T的钢琴
發(fā)布時(shí)間:2025/3/15
58
豆豆
生活随笔
收集整理的這篇文章主要介紹了
JZOJ 5183. 【NOIP2017提高组模拟6.29】小T的钢琴
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Description
Input
Output
Sample Input
9 3
A1 B2 C3 D4 E5 D4.0 C3.0 B2.0 A1.0[nya]
3 A1 A1.0 E5[qwerty]
5 B1{poi} B2 C3 A2 A1
7 C3 D4 E5 D4.0 C3.0 B2.0 A1.0[nyanya]
Sample Output
0.666667
0.400000
1.000000
Data Constraint
Hint
Solution
解決這題的第一步就是先讀入數(shù)據(jù),繁瑣的數(shù)據(jù)真令人心煩。
Tip:讀入的每個(gè)音符可以轉(zhuǎn)化成一個(gè) int 型的整數(shù),方便處理之后的排序、二分。
接著我們就可以處理最長(zhǎng)公共子序列了,但 O(N2) 不能接受。
觀察到題目說(shuō)“每個(gè)音符都不會(huì)重復(fù)出現(xiàn)”,于是對(duì)每個(gè)音符賦一個(gè)編號(hào),
再按照它們的值進(jìn)行排序,從樂(lè)譜P中逐個(gè)拿數(shù)來(lái)匹配,二分從哪里查找。
這樣問(wèn)題就成了典型的LIS問(wèn)題(最長(zhǎng)上升子序列),可以 O(NlogN) 解決。
Code
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=100002; struct data {int v,id; }a[N]; int b[N<<1],ans[N]; char s[20]; inline int read() {int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w; } inline bool cmp(data x,data y) {return x.v<y.v; } int main() {int n=read(),m=read();for(int i=1;i<=n;i++){scanf("%s",&s);int x=strlen(s);a[a[i].id=i].v=(s[0]-'A'+1)*10+s[1]-'0';if(x>2 && s[2]=='.')for(int j=3;j<x;j++){if(s[j]=='(' || s[j]=='[' || s[j]=='{') break;a[i].v=a[i].v*10+s[j]-'0';}}sort(a+1,a+1+n,cmp);while(m--){int t=read();for(int i=1;i<=t;i++){scanf("%s",&s);int x=strlen(s);b[i]=(s[0]-'A'+1)*10+s[1]-'0';if(x>2 && s[2]=='.')for(int j=3;j<x;j++){if(s[j]=='(' || s[j]=='[' || s[j]=='{') break;b[i]=b[i]*10+s[j]-'0';}}ans[0]=0;for(int i=1;i<=t;i++){int l=1,r=n;while(l<r){int mid=(l+r)>>1;if(a[mid].v>=b[i]) r=mid; else l=mid+1;}if(a[l].v!=b[i]) continue;if(ans[ans[0]]<a[l].id) ans[++ans[0]]=a[l].id; else{int x=lower_bound(ans+1,ans+1+ans[0],a[l].id)-ans;ans[x]=a[l].id;}}printf("%.6lf\n",ans[0]*1.0/t);}return 0; }總結(jié)
以上是生活随笔為你收集整理的JZOJ 5183. 【NOIP2017提高组模拟6.29】小T的钢琴的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JZOJ 5182. 【NOIP2017
- 下一篇: JZOJ 5184. 【NOIP2017