BC\26\C

来源:互联网 发布:python运维开发教程 编辑:程序博客网 时间:2024/06/16 00:44

这次bc坑的很。。24分钟敲好B题结果输出超时被cha了,C题敲了好久敲好了发现公式推错了样例都过不了。。最后悲剧-200分

#pragma comment(linker, "/STACK:102400000,102400000")#include<iostream>#include<vector>#include<algorithm>#include<cstdio>#include<queue>#include<stack>#include<string>#include<map>#include<set>#include<cmath>#include<cassert>#include<cstring>#include<iomanip>#include<bitset>using namespace std;#define i64 long long#define foreach(c,itr)  for(__typeof((c).begin()) itr=(c).begin();itr!=(c).end();itr++)#define FOR(i,a,b)      for( int i = (a) ; i <= (b) ; i ++)#define FF(i,a)         for( int i = 0 ; i < (a) ; i ++)#define FFD(i,a,b)      for( int i = (a) ; i >= (b) ; i --)#define S64(a)          scanf(in64,&a)#define SS(a)           scanf("%d",&a)#define LL(a)           ((a)<<1)#define RR(a)           (((a)<<1)+1)#define pb              push_back#define pf              push_front#define X               first#define Y               second#define CL(Q)           while(!Q.empty())Q.pop()#define MM(name,what)   memset(name,what,sizeof(name))#define MC(a,b)            memcpy(a,b,sizeof(b))#define MAX(a,b)        ((a)>(b)?(a):(b))#define MIN(a,b)        ((a)<(b)?(a):(b))#define read            freopen("out.txt","r",stdin)#define write            freopen("out2.txt","w",stdout)#define lson l, m, rt << 1#define rson m+1, r, rt << 1 | 1#define MID ((l+r) >> 1)#define lc rt << 1#define rc rt << 1 | 1const i64 inf64 = 0x2f3f3f3f3f3f3f3fLL;const double oo = 10e9;const double eps = 10e-9;const double pi = acos(-1.0);const int maxn = 100111;const int mod = 1000000007;i64 gcd(i64 _a, i64 _b){if (!_a || !_b){return max(_a, _b);}i64 _t;while ((_t = _a % _b)){_a = _b;_b = _t;}return _b;}i64 ext_gcd(i64 _a, i64 _b, i64 &_x, i64 &_y){if (!_b) {_x = 1;_y = 0;return _a;}i64 _d = ext_gcd(_b, _a % _b, _x, _y);i64 _t = _x;_x = _y;_y = _t - _a / _b * _y;return _d;}i64 invmod(i64 _a, i64 _p) {i64 _ans, _y;ext_gcd(_a, _p, _ans, _y);_ans < 0 ? _ans += _p : 0;return _ans;}int T,n;i64 f[maxn];i64 invf[maxn];vector<i64>v;int num[maxn];vector<int>cnt;i64 c(i64 x, i64 y){i64 re = f[x];re *= invf[x - y];re %= mod;re *= invf[y];re %= mod;return re;}void init(){f[0] = 1;for (int i = 1; i < maxn; i++){f[i] = f[i - 1] * (i64)i;f[i] %= mod;}for (int i = 0; i < maxn; i++){invf[i] = invmod(f[i], mod);invf[i] %= mod;invf[i] += mod;invf[i] %= mod;}}i64 get(i64 x){i64 temp = f[n];temp *= invf[n - x];temp %= mod;temp *= f[n - x - 1];temp %= mod;return temp;}i64 start(){i64 ans = 0;i64 temp;for (int i = 0; i < v.size(); i++){temp = get(num[i])* (i64)v[i];temp %= mod;ans += temp;ans %= mod;}for (int i = 0; i < cnt.size(); i++){ans *= invf[cnt[i]];ans %= mod;}return ans;}int main(){init();cin >> T;for (int tt = 1; tt <= T; tt++){v.clear();cnt.clear();int temp;cin >> n;for (int i = 1; i <= n; i++){cin >> temp;//SS(temp);v.push_back(temp);}sort(v.begin(), v.end());for (int i = 0; i < n; i++){num[i] = -1;}num[v.size() - 1] = v.size() - 1;int jet = 1;for (int i = (int)v.size()-2;i>=0; i--){if (v[i] == v[i + 1]){num[i] = num[i + 1];jet++;}else{cnt.push_back(jet);jet = 1;num[i] = i;}}if (jet != 1){cnt.push_back(jet);}i64 ans = start();cout << "Case #" << tt << ": ";cout << ans << endl;}return 0;}


0 0
原创粉丝点击