結果
問題 | No.444 旨味の相乗効果 |
ユーザー |
![]() |
提出日時 | 2016-11-11 23:36:45 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 129 ms / 2,500 ms |
コード長 | 3,780 bytes |
コンパイル時間 | 1,432 ms |
コンパイル使用メモリ | 105,660 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-24 20:50:28 |
合計ジャッジ時間 | 2,399 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 23 |
ソースコード
#include <cstdlib>#include <cmath>#include <climits>#include <cfloat>#include <map>#include <set>#include <iostream>#include <string>#include <vector>#include <algorithm>#include <sstream>#include <complex>#include <stack>#include <queue>#include <cstdio>#include <cstring>#include <iterator>#include <bitset>#include <unordered_set>#include <unordered_map>#include <fstream>#include <iomanip>#include <cassert>//#include <utility>//#include <memory>//#include <functional>//#include <deque>//#include <cctype>//#include <ctime>//#include <numeric>//#include <list>//#include <iomanip>//#if __cplusplus >= 201103L//#include <array>//#include <tuple>//#include <initializer_list>//#include <forward_list>////#define cauto const auto&//#else//#endifusing namespace std;typedef long long ll;typedef pair<int,int> pii;typedef pair<ll,ll> pll;typedef vector<int> vint;typedef vector<vector<int> > vvint;typedef vector<long long> vll, vLL;typedef vector<vector<long long> > vvll, vvLL;#define VV(T) vector<vector< T > >template <class T>void initvv(vector<vector<T> > &v, int a, int b, const T &t = T()){v.assign(a, vector<T>(b, t));}template <class F, class T>void convert(const F &f, T &t){stringstream ss;ss << f;ss >> t;}#undef _P#define _P(...) (void)printf(__VA_ARGS__)#define reep(i,a,b) for(int i=(a);i<(b);++i)#define rep(i,n) reep((i),0,(n))#define ALL(v) (v).begin(),(v).end()#define PB push_back#define F first#define S second#define mkp make_pair#define RALL(v) (v).rbegin(),(v).rend()#define DEBUG#ifdef DEBUG#define dump(x) cout << #x << " = " << (x) << endl;#define debug(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl;#else#define dump(x)#define debug(x)#endif#define MOD 1000000007LL#define EPS 1e-8#define INF 0x3f3f3f3f#define INFL 0x3f3f3f3f3f3f3f3fLL#define maxs(x,y) x=max(x,y)#define mins(x,y) x=min(x,y)ll powmod(ll x,ll y){ll a=1;while(y){if(y&1) a=a*x%MOD;x=x*x%MOD;y>>=1;}return a;}struct mint{ll x;mint():x(0){}mint(ll x):x((x%MOD+MOD)%MOD){}mint operator+=(const mint& a){ if((x+=a.x)>=MOD) x-=MOD; return *this;}mint operator-=(const mint& a){ if((x+=MOD-a.x)>=MOD) x-=MOD; return *this;}mint operator*=(const mint& a){ (x*=a.x)%=MOD; return *this;}mint operator+(const mint& a)const{ return mint(*this) += a;}mint operator-(const mint& a)const{ return mint(*this) -= a;}mint operator*(const mint& a)const{ return mint(*this) *= a;}bool operator==(const mint& a)const{ return x == a.x;}};struct mat{typedef mint TT;int h, w;vector<vector<TT> > d;mat(){}mat(int h, int w, TT v=0):h(h),w(w),d(h,vector<TT>(w,v)){}void fil(TT v=0){ rep(i,h)rep(j,w) d[i][j] = v;}void uni(){ rep(i,h)rep(j,w) d[i][j] = (i==j);}mat operator*(const mat& a)const{ // w = a.hmat res(h,a.w);rep(i,h)rep(k,w)rep(j,a.w) res.d[i][j] += d[i][k]*a.d[k][j];return res;}mat power(ll a){ // h = wif(a == 0){mat res(h,w); res.uni();return res;}mat res = power(a/2);res = res*res;if(a&1) res = res*(*this);return res;}};void mainmain(){int n;cin>>n;ll c;cin>>c;vll a(n);rep(i,n) cin>>a[i];sort(ALL(a));mint ans(0);mat x(n,n);mat y(n,1);rep(i,n){rep(j,i+1){x.d[i][j].x=a[i];}}rep(i,n){y.d[i][0].x = a[i];}mat z = x.power(c-1)*y;rep(i,n){ans += z.d[i][0];}rep(i,n){ans -= mint(powmod(a[i], c));}cout<<ans.x<<endl;}signed main() {ios_base::sync_with_stdio(false);cin.tie(0);cout<<fixed<<setprecision(20);mainmain();}