大家解決方案的數量,這是在參考,這一問題:http://www.spoj.pl/problems/DCEPC702 /.(Kindly看到有一個樣本輸入)。我翻譯的問題陳述這個尋找解決方案的數量,這種形式na + nb + nc <= newN
newN = N - (mina + minb + minc)
的方程,到+ B + C <= N
0<=na<=maxa - mina, 0<=nb<=maxb-minb, 0<=nc<=maxc-minc
。
我已經然後試圖容斥找到解決方案的數量。我對這個原則很陌生,因此我不確定我是否做得對。反正我的回答是不正確的。有人能告訴我在這種方法中我錯了嗎?這是我的代碼。
在此先感謝。
#include<iostream>
#include<cstdio>
using namespace std;
#define MOD 1000000007
#define ulli long long int
ulli f(int a)
{
if(a<0) return 0;
else
{
ulli n = (ulli)a;
return ((((n+3)*(n+2)*(n+1))/6))%MOD;
}
}
int N;
int minA, maxA;
int minB, maxB;
int minC, maxC;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&N);
scanf("%d %d",&minA , &maxA);
scanf("%d %d",&minB , &maxB);
scanf("%d %d",&minC , &maxC);
maxA -= minA;
maxB -= minB;
maxC -= minC;
int A = maxA;
int B = maxB;
int C = maxC;
N -= (minA + minB + minC);
ulli res = f(N) -f(N-A-1)-f(N-B-1)-f(N-C-1)+f(N-A-B-2)+f(N-C-B-2)+f(N-A-C-2)-f(N-A-B-C-3);
cout<<res%MOD<<endl;
}
return 0;
}
我想你應該添加到這個問題:「所有的約束都達到10^9。TL是1000個測試用例1」 – kilotaras