哈爾濱理工大學第七屆程式設計競賽決賽(網路賽-高年級組)A所有情況的和
所有情況的和
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld
題目描述
在acimo星球, tabris是一名勇敢的屠龍勇士,在上綠島屠龍前決定挑選N種裝備武裝自己,現在每種裝備有兩個,**但每種裝備tabris必須選擇拿一個**,**不能多也不能少**。
每件裝備有自己的屬性值,能給tabris屬性加成。
對於不同種類的裝備之間有疊加效果,如果選擇多件裝備,最終的屬性加成為他們的乘積。
若tabris初始屬性值為0,最後屬性加成的期望是多少。
輸入描述:
有多組測試樣例,輸入到檔案結束。
每組測試資料的第一行包含一個正整數NN,表示裝備的種類數。
接下來N行,每行兩個正整數ai
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); } }