2020训练赛1

A-C:

A:起初将n%21,觉得只需要考虑21以下的数就可以,结果WA了,后来发现22、42都是YES,但是这样输出NO,还是不处理了,直接暴力就行了。

B:血不够就加血,够就攻击,保存一份副本来输出字符串,一份来计算次数

C:因为不允许一个盒子里面同时放两个盒子,(比如4*4的放两个2*2的不可以),所以只需要计数出现次数最多的就可

补题:

D:对于a[i],每一次用map[a[i]]计数当前数字出现的次数,正常计算所有a[i]-a[j](j<i),再利用map[a[i]-1]和map[a[i]+1]就是1和-1的个数,减去‘1’的个数,加上‘-1’的个数。long long会爆,用long double

 1 #include<iostream>
 2 #include<bits/stdc++.h>
 3 #include<algorithm>
 4 #include<map>
 5 #define ld long double
 6 using namespace std;
 7 
 8 ld a[200010];
 9 int n;
10 map<ld,ld> ma;
11 
12 int main()
13 {
14     cin>>n;
15     for(int i=1;i<=n;i++) cin>>a[i];
16     ld ans=0;
17     ld sum=0;
18     for(int i=1;i<=n;i++)
19     {
20         ld b=(i-1)*a[i]-sum;
21         sum+=a[i];
22         ans+=(b-ma[a[i]-1]+ma[a[i]+1]);
23         ma[a[i]]++;
24     }
25     cout << fixed << setprecision(0) << ans << endl;
26     return 0;
27 }
View Code

E:https://blog.csdn.net/yqdjl6/article/details/78808902讲的很好

猜你喜欢

转载自www.cnblogs.com/xxxinnn/p/12950387.html