20191101三道题题解
Posted guolq-1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20191101三道题题解相关的知识,希望对你有一定的参考价值。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 int n,p[28],ans=1,t,r=0,g,len;char a[525012]; 8 int main() 9 { 10 freopen("note.in","r",stdin); 11 freopen("note.out","w",stdout); 12 gets(a+1); 13 n=strlen(a+1); 14 for(int i=1;i<=26;i++) 15 { 16 p[i]=-30; 17 } 18 for(int i=1;i<=n;i++) 19 { 20 if(p[a[i]-‘a‘+1]>=r) 21 { 22 r=i; 23 ans++; 24 } 25 p[a[i]-‘a‘+1]=i; 26 } 27 cout<<ans; 28 return 0; 29 }
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<queue> 7 #define int long long 8 using namespace std; 9 int n,a,s,t,k,g,ans=999999999,f[152503]; 10 deque<int> q; 11 signed main() 12 { 13 memset(f,127,sizeof(f)); 14 scanf("%lld%lld%lld",&n,&k,&a); 15 if(k<=1) 16 { 17 puts("0"); 18 return 0; 19 } 20 q.push_back(1); 21 q.push_front(0); 22 f[0]=0; 23 f[1]=s=a; 24 for(int i=2;i<=n;i++) 25 { 26 scanf("%lld",&a); 27 s+=a; 28 f[i]=f[q.front()]+a; 29 while(q.size()>0&&q.front()<=i-k) 30 { 31 q.pop_front(); 32 } 33 while(q.size()>0&&f[q.back()]>=f[i]) 34 { 35 q.pop_back(); 36 } 37 q.push_back(i); 38 } 39 while(q.size()>0&&q.front()<=n-k) 40 { 41 q.pop_front(); 42 } 43 ans=s-f[q.front()]; 44 printf("%lld",ans); 45 return 0; 46 }
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #define l(x) (x&-x) 7 #define int long long 8 using namespace std; 9 int n,m,h[503],t[1010],nx[1010],d[1010],a[152503],b[503][503],eb[503][503],te,t1,t2,tv,t3,v[503],mxk=-1,r[503]; 10 void add() 11 { 12 te++; 13 t[te]=t2,nx[te]=h[t1],d[te]=t3; 14 h[t1]=te; 15 te++; 16 t[te]=t1,nx[te]=h[t2],d[te]=t3; 17 h[t2]=te; 18 return; 19 } 20 void s(int x) 21 { 22 r[x]=1; 23 b[x][1]=eb[x][1]=0; 24 v[x]=1; 25 for(int i=h[x];i;i=nx[i]) 26 { 27 if(v[t[i]]) continue; 28 s(t[i]); 29 for(int j=r[t[i]]+r[x];j>=1;j--) 30 { 31 for(int k=r[x];k>=1;k--) 32 { 33 //all:j this way:j-k used:k 34 eb[x][j]=min(eb[x][j],min(b[x][k]+eb[t[i]][j-k]+d[i],eb[x][k]+b[t[i]][j-k]+d[i]*2)); 35 } 36 for(int k=r[x];k>=1;k--) 37 { 38 //all:j this way:j-k used:k 39 b[x][j]=min(b[x][j],b[t[i]][j-k]+b[x][k]+d[i]*2); 40 } 41 } 42 r[x]+=r[t[i]]; 43 } 44 return; 45 } 46 signed main() 47 { 48 // freopen("cave3.in","r",stdin); 49 // freopen("cave31.out","w",stdout); 50 scanf("%lld",&n); 51 memset(h,0,sizeof(h)); 52 te=0; 53 for(int i=1;i<n;i++) 54 { 55 scanf("%lld%lld%lld",&t1,&t2,&t3); 56 add(); 57 } 58 memset(v,0,sizeof(v)); 59 memset(b,127,sizeof(b)); 60 memset(eb,127,sizeof(eb)); 61 scanf("%d",&m); 62 for(int i=1;i<=m;i++) 63 { 64 scanf("%lld",&a[i]); 65 } 66 s(1); 67 for(int i=1;i<=m;i++) 68 { 69 printf("%lld ",((upper_bound(eb[1]+1,eb[1]+n+1,a[i]))-eb[1]-1ll)); 70 } 71 return 0; 72 }
以上是关于20191101三道题题解的主要内容,如果未能解决你的问题,请参考以下文章