51nod1305(简单逻辑)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1305
题意:中文题诶~
思路:1e5的数据直接暴力肯定是不行的,我们不难想到:
(a+b)/(a*b)的结果只有4种情况:
1.a=b=1, 结果为2;
2. a=1, b!=1, 结果为1;
3. a==b==2, 结果为1;
4. 其他情况, 结果为0;
代码:
1 #include <bits/stdc++.h>
2 #define MAXN 100010
3 using namespace std;
4
5 int a[MAXN], gg1[MAXN], gg2[MAXN];
6
7 int main(void){
8 int n, ans=0;
9 cin >> n;
10 for(int i=0; i<n; i++){
11 cin >> a[i];
12 }
13 for(int i=n-1; i>=0; i--){
14 gg1[i]=gg1[i+1]+(a[i]==1); //gg1[i]存储i后面1的数目(包括第i个数)
15 gg2[i]=gg2[i+1]+(a[i]==2); //gg1[i]存储i后面2的数目(包括第i个数)
16 }
17 for(int i=0; i<n; i++){
18 if(a[i]==1){
19 ans+=gg1[i+1]+(n-i-1);
20 }else if(a[i]==2){
21 ans+=gg1[i+1]+gg2[i+1];
22 }else{
23 ans+=gg1[i+1];
24 }
25 }
26 cout << ans << endl;
27 }
我就是我,颜色不一样的烟火 --- geloutingyu