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\n",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\n",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\n",ans);
74         }
75         printf("%I64d\n",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\n",ans);
33     }
34     return 0;
35 }
时间: 2024-08-11 07:46:30

BestCoder Round #86 A B C的相关文章

HDU 5806 NanoApe Loves Sequence Ⅱ(尺取+思维)——BestCoder Round #86 1003

传送门 NanoApe Loves Sequence Ⅱ Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others)Total Submission(s): 514    Accepted Submission(s): 248 Problem Description NanoApe, the Retired Dog, has returned back to prepare for f

[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)

[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前点的一条出边走下去.有向无环图点有点权,任意时刻他们所在的三个点两两点权相差不超过K.他们可以在任意三个点同时结束.求合法的路径总数.N≤50. 分析 暴力的做法,设\(dp[i][j][k]\)表示第一个人在i,第二个人在j,第三个人在k的方案数,然后枚举三个人接着到的地方x,y,z,倒推\(dp

HDU5808Price List Strike Back (BestCoder Round #86 E) cdq分治+背包

严格按题解写,看能不能形成sum,只需要分割当前sum怎么由两边组成就好 #include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int N = 2e4+100; int f[N][105],g[N][105]

HDU5806 NanoApe Loves Sequence Ⅱ (BestCoder Round #86 C)二分

分析:大于等于m的变成1,否则变成0,预处理前缀和,枚举起点,找到第一个点前缀和大于m即可 找第一个点可以二分可以尺取 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; typedef long long LL; const int N = 2e5+5; int T,n,m,k,a[N],sum[N]; int mai

HDU5804 Price List (BestCoder Round #86 A)水题

分析:大于总和输出1 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; const int N = 1e5+5; int ret[N],T,n,m; int main(){ scanf("%d",&T); while(T--){ scanf("%d%d",&n,&a

HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp

#include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <algorithm> using namespace std; typedef long long LL; const int N = 50+2; const int mod = 998244353; int T,n,m,lim,q,tot,w[N],dp[N][N][N][3],he

BestCoder Round #86 1001

链接http://acm.hdu.edu.cn/showproblem.php?pid=5804 题意:给你一些商店和他的商品价格,然后给你一个记账本,问你记大了就是1,否则是0 解法:模拟,注意测试数据大小 #include<stdio.h> //#include<bits/stdc++.h> #include<string.h> #include<iostream> #include<math.h> #include<sstream&g

BestCoder Round #86 二,三题题解(尺取法)

第一题太水,跳过了. NanoApe Loves Sequence题目描述:退役狗 NanoApe 滚回去学文化课啦! 在数学课上,NanoApe 心痒痒又玩起了数列.他在纸上随便写了一个长度为 nnn 的数列,他又根据心情随便删了一个数,这样他得到了一个新的数列,然后他计算出了所有相邻两数的差的绝对值的最大值. 他当然知道这个最大值会随着他删了的数改变而改变,所以他想知道假如全部数被删除的概率是相等的话,差的绝对值的最大值的期望是多少. 输入描述 第一行为一个正整数 T,表示数据组数. 每组数

HDU 5805 - NanoApe Loves Sequence (BestCoder Round #86)

先找相邻差值的最大,第二大,第三大 删去端点会减少一个值, 删去其余点会减少两个值,新增一个值,所以新增和现存的最大的值比较一下取最大即可 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 using namespace std; 5 #define LL long long 6 const int N = 100005; 7 int t, n, p1, p2, p3; 8 LL a[N]; 9

HDU 5806 - NanoApe Loves Sequence Ⅱ (BestCoder Round #86)

若 [i, j] 满足, 则 [i, j+1], [i, j+2]...[i,n]均满足 故设当前区间里个数为size, 对于每个 i ,找到刚满足 size == k 的 [i, j], ans += n - j + 1 . i++ 的时候看看需不需要size-- 就可以更新了. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 #define