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\n",((upper_bound(eb[1]+1,eb[1]+n+1,a[i]))-eb[1]-1ll));
70     }
71     return 0;
72 }
展开

猜你喜欢

转载自www.cnblogs.com/GUOLQ-1/p/11779099.html