結果
| 問題 |
No.1359 [Zelkova 3rd Tune] 四人セゾン
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-01-22 21:39:43 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 599 ms / 2,000 ms |
| コード長 | 2,454 bytes |
| コンパイル時間 | 1,067 ms |
| コンパイル使用メモリ | 107,048 KB |
| 最終ジャッジ日時 | 2025-01-18 04:00:18 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 75 |
ソースコード
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <utility>
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <limits>
#define rep(i,n) for(int i = 0; i < n; ++i)
#define rep1(i,n) for(int i = 1; i <= n; ++i)
using namespace std;
template<class T>bool chmax(T &a, const T &b) { if(a < b){ a = b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if(a > b){ a = b; return 1; } return 0; }
template<class T> inline int sz(T &a) { return a.size(); }
using ll = long long; using ld = long double;
using pi = pair<int,int>; using pl = pair<ll,ll>;
using vi = vector<int>; using vvi = vector<vi>;
using vl = vector<ll>; using vvl = vector<vl>;
const int inf = numeric_limits<int>::max();
const ll infll = numeric_limits<ll>::max();
// 任意MODが使えるModint
// 型宣言の前にmodint::set_mod(MOD) をしてね
struct modint{
long long x;
modint() : x(0) {}
modint(long long x):x(x%mod()){}
static int &mod() {
static int mod = 0;
return mod;
}
static void set_mod(int md) {
mod() = md;
}
modint& operator+=(const modint a){
if((x+=a.x)>=mod()) x-=mod();
return *this;
}
modint& operator-=(const modint a){
if((x += mod()-a.x)>=mod()) x-=mod();
return *this;
}
modint& operator*=(const modint a){
(x*=a.x)%=mod();
return *this;
}
modint operator+(const modint a) const{
modint res(*this);
return res+=a;
}
modint operator-(const modint a) const{
modint res(*this);
return res-=a;
}
modint operator*(const modint a) const{
modint res(*this);
return res*=a;
}
modint pow(long long t) const{
if(!t) return 1;
modint a = pow(t>>1);
a*=a;
if(t&1) a*=*this;
return a;
}
//for prime mod
modint inv() const{
return pow(mod()-2);
}
modint& operator/=(const modint a){
return (*this) *= a.inv();
}
modint operator/(const modint a) const{
modint res(*this);
return res/=a;
}
};
int main()
{
int n; cin >> n;
ll k,m; cin >> k >> m;
modint::set_mod(m);
vvl a(4, vl(n));
rep(i,4) {
rep(j,n) cin >> a[i][j];
}
rep(i,4) {
sort(a[i].begin(),a[i].end());
}
modint res;
rep(i,n) {
ll mx = -infll, mn = infll;
rep(j,4) {
chmax(mx, a[j][i]);
chmin(mn, a[j][i]);
}
modint tmp(mx - mn);
res += tmp.pow(k);
}
cout << res.x << "\n";
return 0;
}