BestCoder Round #86 A B C

这次BC终于不像上次一样惨烈 终于A了三题……

终测ing……

发一波题解……

A.Price List

A题十分无脑 只要把所有数加起来存到sum里 询问的时候大于sum输出1 否则输出0就行了……

犹豫了好久 怎么会这么简单……

看群里好多人卡在了%I64d……

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<math.h>
 5 #include<string.h>
 6 #include<string>
 7 #include<map>
 8 #include<vector>
 9 #include<queue>
10 #define M(a,b) memset(a,b,sizeof(a))
11 using namespace std;
12 int main(){
13     int T;
14     scanf("%d",&T);
15     while(T--){
16         int n,m;
17         scanf("%d%d",&n,&m);
18         long long sum=0,a;
19         for(int i=0;i<n;i++){
20             scanf("%I64d",&a);
21             sum+=a;
22         }
23         for(int i=0;i<m;i++){
24             scanf("%I64d",&a);
25             if(a>sum) printf("1");
26             else printf("0");
27         }
28         puts("");
29     }
30     return 0;
31 }

B.NanoApe Loves Sequence

B题就是自行模拟一下就好了……

cha[i]是这个数和前一个数的差……

记录最大的差maxc和i的位置loc……

首先处理去掉开头和结尾的情况……

然后处理中间的情况……

处理到loc和loc-1单独处理……

边界没处理好 WA了6次……

感觉是做麻烦了……

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<math.h>
 5 #include<string.h>
 6 #include<string>
 7 #include<map>
 8 #include<vector>
 9 #include<queue>
10 #define M(a,b) memset(a,b,sizeof(a))
11 using namespace std;
12 int num[100005];
13 int cha[100005];
14 int main(){
15     int T;
16     scanf("%d",&T);
17     while(T--){
18         int n;
19         int loc;
20         int maxc=-1;
21         int maxn=-1;
22         long long ans=0;
23         scanf("%d",&n);
24         scanf("%d",&num[0]);
25         for(int i=1;i<n;i++){
26             scanf("%d",&num[i]);
27             cha[i]=abs(num[i]-num[i-1]);
28             if(cha[i]>maxc){
29                 maxc=cha[i];
30                 loc=i;
31             }
32         }
33         for(int i=2;i<n;i++){
34             if(cha[i]>maxn) maxn=cha[i];
35         }
36 //        printf("%d
",maxn);
37         ans+=maxn;
38         maxn=-1;
39          for(int i=1;i<n-1;i++){
40             if(cha[i]>maxn) maxn=cha[i];
41          }
42 //         printf("%d
",maxn);
43         ans+=maxn;
44         for(int i=1;i<n-1;i++){
45             if(loc==i){
46                 int used=-1;
47                 for(int j=1;j<n;j++){
48                     if(j==i+1) continue;
49                     if(j==i){
50                         if(used<abs(num[i+1]-num[i-1]))
51                             used=abs(num[i+1]-num[i-1]);
52                         }
53                     else if(cha[j]>used) used=cha[j];
54                 }
55                 ans+=used;
56                 continue;
57             }
58             if(loc-1==i){
59                 int used=-1;
60                 for(int j=1;j<n;j++){
61                     if(j==loc) continue;
62                     if(j==loc-1){
63                         if(used<abs(num[j+1]-num[j-1]))
64                             used=abs(num[j+1]-num[j-1]);
65                         }
66                     else if(cha[j]>used) used=cha[j];
67                 }
68                 ans+=used;
69                 continue;
70             }
71             if(maxc>abs(num[i+1]-num[i-1])) ans+=maxc;
72             else ans+=abs(num[i+1]-num[i-1]);
73 //            printf("%I64d
",ans);
74         }
75         printf("%I64d
",ans);
76     }
77     return 0;
78 }

C.NanoApe Loves Sequence Ⅱ

记录下当前位置是从开始第几大……
然后累加当前位置结尾的倒数第k大的位置……
讲道理这道题很看感觉……
 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<math.h>
 5 #include<string.h>
 6 #include<string>
 7 #include<map>
 8 #include<vector>
 9 #include<queue>
10 #define M(a,b) memset(a,b,sizeof(a))
11 using namespace std;
12 int num[200005];
13 int p[200005];
14 int main(){
15     int T;
16     scanf("%d",&T);
17     while(T--){
18         int n,m,k;
19         scanf("%d%d%d",&n,&m,&k);
20         int tmp=0;
21         long long ans=0;
22         for(int i=0;i<n;i++){
23             scanf("%d",&num[i]);
24             if(num[i]>=m){
25                 p[tmp++]=i;
26                 if(tmp>=k)
27                     ans+=(p[tmp-k]+1);
28             }
29             else if(i+1>=k&&tmp>=k)
30                 ans+=(p[tmp-k]+1);
31         }
32         printf("%I64d
",ans);
33     }
34     return 0;
35 }
原文地址:https://www.cnblogs.com/general10/p/5744908.html