using namespace std; #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> #include<map> #include<set> #include<vector> #include<stack> #include<queue> #include<numeric> #include<algorithm> #define FOR(i, a, b) for(int i = (a), _b = (b); i < b; ++i) #define FORE(i, a, b) for(int i = (a), _b = (b); i <= b; ++i) #define FORD(i, a, b) for(int i = (a), _b = (b); i >= b; --i) #define RI ({int n; scanf(" %d ", &n); n;}) #define BG begin() #define ED end() #define ST first #define ND second #define MP make_pair #define PB push_back #define ITR(c) typeof(c.BG) #define TR(c, it) for(ITR(c) it = c.BG; it != c.ED; ++it) #define SZ size() #define EXIST(c, x) ( c.find(x) != c.ED ) typedef long long LL; typedef pair<int, int> II; typedef pair<int, II> III; typedef vector<int> VI; typedef vector<II> VII; typedef vector<VI> VVI; typedef vector<VII> VVII; const int MAXN = 2+10000; const int K = 1000000007; const int INF = int(1e9); int n; int a[MAXN]; int main(){ scanf("%d",&n); FOR(i,0,n) scanf("%d",&a[i]); sort(a,a + n); int kq = 1; FOR(i,0,n){ kq *= (a[i] - i); if (kq >= K) kq = kq % K; } printf("%d",kq); return 0; }
QUOTE:Hình như là bạn đặt sai giới hạn maxN.
- Đầu tiên sắp xếp lại dãy số (dùng Quick Sort). - res := 1; for i := 1 to n do res := res * (a[i] - i + 1) mod k; (Chú ý biến khai báo biến res là Int64).