指標A - 簽到題(順序三元組)
阿新 • • 發佈:2019-01-11
給定一個長度為N的陣列A=[A1, A2, ... AN],已知其中每個元素Ai的值都只可能是1, 2或者3。
請求出有多少下標三元組(i, j, k)滿足1 ≤ i < j < k ≤ N且Ai < Aj < Ak。
Input第一行包含一個整數N
第二行包含N個整數A1, A2, ... AN。(1 ≤ Ai ≤ 3)
對於30%的資料,1 ≤ N ≤ 100
對於80%的資料,1 ≤ N ≤ 1000
對於100%的資料,1 ≤ N ≤ 100000
Output一個整數表示答案
Sample Input
6 1 3 2 1 2 3
Sample Output
3
程式碼:
#include<stdio.h> #define MAX 100005 long long int n; long long int digit[MAX],a,c; long long int sum=0; int main() { int i; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&digit[i]); if(digit[i]==3) c++; } for(i=1;i<=n;i++) { if(digit[i]==1) a++; if(digit[i]==3) c--; if(digit[i]==2) sum+=a*c; } printf("%lld\n",sum); return 0; }
思路:
比如 10 1 2 3 1 2 3 1 2 3 3 ==16
3有四個 然後剛開始找到第一個2時 ans=ans+1*4 之後4--===3了 然後i=2 之後找到第二個2此刻利用這個2得是2*3==6+4==10
然後3有兩個了 之後1有三個了 然後利用第三個2得有3*2==6
轉載來自http://blog.csdn.net/islittlehappy/article/details/77963099
自己寫的怎麼改都沒通過,最後copy了下大佬的程式碼過掉了,我的答案都是對的,估計是哪裡的格式沒有注意到,小問題。刷題傷腦子。。。