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 }
E:https://blog.csdn.net/yqdjl6/article/details/78808902讲的很好