首页 > 代码库 > 51nod1305(简单逻辑)

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 }

 

51nod1305(简单逻辑)