1. 程式人生 > >51Nod1305 Pairwise Sum and Divide(1和2的利用率)

51Nod1305 Pairwise Sum and Divide(1和2的利用率)

這道題就是找規律的問題。可以試試各種資料發現每次計算的值只有0,1,2。1和1計算是2,1和除1以外任何數,2和2計算是1,其他計算都是0.

所以只要記錄2和1的次數就能算出總和了。

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
int n;
ll fun(ll a[])
{
	ll i,sum=0;
	ll n2=0;
	for(i=0;i<n;i++)
	{
		if(a[i]==2)
			n2++;
		if(a[i]==1)
			sum+=n-1;
	}
	return sum+(n2-1)*n2/2;
}
ll a[100000];
int main()
{	
	
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>a[i];
	cout<<fun(a)<<endl;
	return 0; 
}