모두의 해답의 수는이 문제와 관련되어 있습니다 : http://www.spoj.pl/problems/DCEPC702/.(샘플 입력에 대해 자세히 알려주십시오). 나는+ b + c <= n <= n
0<=na<=maxa - mina, 0<=nb<=maxb-minb, 0<=nc<=maxc-minc
,이 양식 na + nb + nc <= newN
newN = N - (mina + minb + 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;
}
"모든 제약 조건은 최대 9^9이며, TL은 1000 개의 테스트 사례에 대해 1s입니다."라는 질문에 추가해야한다고 생각합니다. – kilotaras