1. 程式人生 > >哈爾濱理工大學第七屆程式設計競賽決賽(網路賽-高年級組)A所有情況的和

哈爾濱理工大學第七屆程式設計競賽決賽(網路賽-高年級組)A所有情況的和

所有情況的和

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld

題目描述

在acimo星球, tabris是一名勇敢的屠龍勇士,在上綠島屠龍前決定挑選N種裝備武裝自己,現在每種裝備有兩個,**但每種裝備tabris必須選擇拿一個**,**不能多也不能少**。
每件裝備有自己的屬性值,能給tabris屬性加成。
對於不同種類的裝備之間有疊加效果,如果選擇多件裝備,最終的屬性加成為他們的乘積。
若tabris初始屬性值為0,最後屬性加成的期望是多少。

輸入描述:

有多組測試樣例,輸入到檔案結束。
每組測試資料的第一行包含一個正整數NN,表示裝備的種類數。
接下來N行,每行兩個正整數ai

、bi,表示兩個不同的第ii種裝備的屬性加成值。

N∈[1,103]
ai,bi∈[1,106]

輸出描述:

對於每組測試資料輸出一個整數,為了方便輸出最終的結果先乘2N再對1e9+7取模後的值。

示例1

輸入

4

1 2

3 4

5 6

7 8

輸出

3465

說明

3465 = (1*3*5*7) + (1*3*5*8) +(1*3*6*7) + (1*3*6*8) +(1*4*5*7) + (1*4*5*8) + (1*4*6*7) + (1*4*6*8) + (2*3*5*7) + (2*3*5*8) +(2*3*6*7) + (2*3*6*8) + (2*4*5*7) + (2*4*5*8) + (2*4*6*7) + (2*4*6*8) ;

題目大意:

         中文題目意思,不解釋了

解題思路:

         通過題目來看,就是叫你求各種組合的和,最後在Mod 1e9+7;題目說的先乘2N可以不用乘。

一開始想到的上用搜索寫,這些順序就像是一個深度優先搜尋。

後來突然想到可以手動化簡下

先出三種情況 A1  A2

                           B1  B2

                          C1  C3

把所有情況列出來,提取公因式,最後結果就是(A1-A2)*(B1-B2)*(C1-C2)

那這個題目就很簡單處理了,輸入處理,取個模就行

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<functional>
#define ll long long
#define mod 1000000007
using namespace std;
#define ll long long
int main()
{
	int n;
	ll a,b,sum;
	while(scanf("%d",&n)!=EOF)
	{
		sum=1;
		for(int i=0;i<n;i++)
		{
			scanf("%lld%lld",&a,&b);
			sum=(sum*((a+b)%mod))%mod;
		}
		printf("%lld\n",sum);
	}
}