Created
December 14, 2014 09:19
-
-
Save orisano/aa7fc0fb5ecbe1b9618f to your computer and use it in GitHub Desktop.
JOI2015予選
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
typedef long long ll; | |
typedef long double ld; | |
typedef tuple<int, int> duo; | |
const int dx[] = {0, 0, 1, -1, 1, 1, -1, -1}; | |
const int dy[] = {1, -1, 0, 0, 1, -1, 1, -1}; | |
const int Mod = 1000000000 + 0; | |
//{{{ templates | |
#define TT_ template<typename T>inline | |
#define TTF_ template<typename T,typename F>inline | |
TT_ T sq(T x){return x*x;} | |
TT_ T In(){T x;cin>>x;return x;} | |
TT_ void Out(T&x){cout<<x;} | |
TT_ void sort(T&v){sort(begin(v),end(v));} | |
TT_ void revs(T&v){reverse(begin(v),end(v));} | |
TT_ void uniq(T&v){sort(v);v.erase(unique(begin(v),end(v)),end(v));} | |
TT_ int ubnd(T&v,typename T::value_type x){return upper_bound(begin(v),end(v),x)-begin(v);} | |
TT_ int lbnd(T&v,typename T::value_type x){return lower_bound(begin(v),end(v),x)-begin(v);} | |
TTF_ void inpt(T&v,int n,F f){for(v.reserve(n);n--;v.emplace_back(f()));} | |
TTF_ void show(T&v,F f,string d=" ",string e="\n"){int i=0;for(auto&x:v)i++&&(cout<<d),f(x);cout<<e;} | |
TT_ typename T::iterator minel(T&v){return min_element(begin(v),end(v));} | |
TT_ typename T::iterator maxel(T&v){return max_element(begin(v),end(v));} | |
inline void fast_io(){ios_base::sync_with_stdio(0);cin.tie(0);} | |
inline int in(){int x;scanf("%d",&x);return x;} | |
inline ll pow_mod(ll a,ll k,ll m){ll r=1;for(;k>0;a=a*a%m,k>>=1)if(k&1)r=r*a%m;return r;} | |
inline ll mod_inv(ll a,ll p){return pow_mod(a,p-2,p);} | |
//}}} priority_queue queue deque front stringstream max_element min_element insert count make_tuple | |
int main() | |
{ | |
int A, B, C, D, P; | |
cin >> A >> B >> C >> D >> P; | |
cout << min(A * P, B + max(0, P - C) * D) << endl; | |
return 0; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
typedef long long ll; | |
typedef long double ld; | |
typedef tuple<int, int> duo; | |
const int dx[] = {0, 0, 1, -1, 1, 1, -1, -1}; | |
const int dy[] = {1, -1, 0, 0, 1, -1, 1, -1}; | |
const int Mod = 1000000000 + 0; | |
//{{{ templates | |
#define TT_ template<typename T>inline | |
#define TTF_ template<typename T,typename F>inline | |
TT_ T sq(T x){return x*x;} | |
TT_ T In(){T x;cin>>x;return x;} | |
TT_ void Out(T&x){cout<<x;} | |
TT_ void sort(T&v){sort(begin(v),end(v));} | |
TT_ void revs(T&v){reverse(begin(v),end(v));} | |
TT_ void uniq(T&v){sort(v);v.erase(unique(begin(v),end(v)),end(v));} | |
TT_ int ubnd(T&v,typename T::value_type x){return upper_bound(begin(v),end(v),x)-begin(v);} | |
TT_ int lbnd(T&v,typename T::value_type x){return lower_bound(begin(v),end(v),x)-begin(v);} | |
TTF_ void inpt(T&v,int n,F f){for(v.reserve(n);n--;v.emplace_back(f()));} | |
TTF_ void show(T&v,F f,string d=" ",string e="\n"){int i=0;for(auto&x:v)i++&&(cout<<d),f(x);cout<<e;} | |
TT_ typename T::iterator minel(T&v){return min_element(begin(v),end(v));} | |
TT_ typename T::iterator maxel(T&v){return max_element(begin(v),end(v));} | |
inline void fast_io(){ios_base::sync_with_stdio(0);cin.tie(0);} | |
inline int in(){int x;scanf("%d",&x);return x;} | |
inline ll pow_mod(ll a,ll k,ll m){ll r=1;for(;k>0;a=a*a%m,k>>=1)if(k&1)r=r*a%m;return r;} | |
inline ll mod_inv(ll a,ll p){return pow_mod(a,p-2,p);} | |
//}}} priority_queue queue deque front stringstream max_element min_element insert count make_tuple | |
int main() | |
{ | |
int N, M; | |
vector<int> A; | |
N = in(), M = in(); | |
inpt(A, M, in); | |
vector<vector<int>> B(M); | |
for (int i = 0; i < M; i++) inpt(B[i], N, in); | |
vector<int> point(N); | |
for (int i = 0; i < M; i++){ | |
int X = 0; | |
for (int j = 0; j < N; j++){ | |
if (B[i][j] == A[i]) point[j]++; | |
else X++; | |
} | |
point[A[i] - 1] += X; | |
} | |
show(point, Out<int>, "\n"); | |
return 0; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
typedef long long ll; | |
typedef long double ld; | |
typedef tuple<int, int> duo; | |
const int dx[] = {0, 0, 1, -1, 1, 1, -1, -1}; | |
const int dy[] = {1, -1, 0, 0, 1, -1, 1, -1}; | |
const int Mod = 1000000000 + 0; | |
//{{{ templates | |
#define TT_ template<typename T>inline | |
#define TTF_ template<typename T,typename F>inline | |
TT_ T sq(T x){return x*x;} | |
TT_ T In(){T x;cin>>x;return x;} | |
TT_ void Out(T&x){cout<<x;} | |
TT_ void sort(T&v){sort(begin(v),end(v));} | |
TT_ void revs(T&v){reverse(begin(v),end(v));} | |
TT_ void uniq(T&v){sort(v);v.erase(unique(begin(v),end(v)),end(v));} | |
TT_ int ubnd(T&v,typename T::value_type x){return upper_bound(begin(v),end(v),x)-begin(v);} | |
TT_ int lbnd(T&v,typename T::value_type x){return lower_bound(begin(v),end(v),x)-begin(v);} | |
TTF_ void inpt(T&v,int n,F f){for(v.reserve(n);n--;v.emplace_back(f()));} | |
TTF_ void show(T&v,F f,string d=" ",string e="\n"){int i=0;for(auto&x:v)i++&&(cout<<d),f(x);cout<<e;} | |
TT_ typename T::iterator minel(T&v){return min_element(begin(v),end(v));} | |
TT_ typename T::iterator maxel(T&v){return max_element(begin(v),end(v));} | |
inline void fast_io(){ios_base::sync_with_stdio(0);cin.tie(0);} | |
inline int in(){int x;scanf("%d",&x);return x;} | |
inline ll pow_mod(ll a,ll k,ll m){ll r=1;for(;k>0;a=a*a%m,k>>=1)if(k&1)r=r*a%m;return r;} | |
inline ll mod_inv(ll a,ll p){return pow_mod(a,p-2,p);} | |
//}}} priority_queue queue deque front stringstream max_element min_element insert count make_tuple | |
int main() | |
{ | |
int H, W; | |
H = in(), W = in(); | |
vector<string> sfield; | |
inpt(sfield, H, In<string>); | |
vector<vector<int>> field(H, vector<int>(W, -1)); | |
for (int i = 0; i < H; i++){ | |
for (int j = 0; j < W; j++){ | |
if (sfield[i][j] == 'c'){ | |
field[i][j] = 0; | |
} | |
else if (j != 0 && field[i][j - 1] >= 0){ | |
field[i][j] = field[i][j - 1] + 1; | |
} | |
} | |
} | |
for (auto& v : field) show(v, Out<int>); | |
return 0; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
typedef long long ll; | |
typedef long double ld; | |
typedef tuple<int, int> duo; | |
const int dx[] = {0, 0, 1, -1, 1, 1, -1, -1}; | |
const int dy[] = {1, -1, 0, 0, 1, -1, 1, -1}; | |
const int Mod = 1000000000 + 0; | |
//{{{ templates | |
#define TT_ template<typename T>inline | |
#define TTF_ template<typename T,typename F>inline | |
TT_ T sq(T x){return x*x;} | |
TT_ T In(){T x;cin>>x;return x;} | |
TT_ void Out(T&x){cout<<x;} | |
TT_ void sort(T&v){sort(begin(v),end(v));} | |
TT_ void revs(T&v){reverse(begin(v),end(v));} | |
TT_ void uniq(T&v){sort(v);v.erase(unique(begin(v),end(v)),end(v));} | |
TT_ int ubnd(T&v,typename T::value_type x){return upper_bound(begin(v),end(v),x)-begin(v);} | |
TT_ int lbnd(T&v,typename T::value_type x){return lower_bound(begin(v),end(v),x)-begin(v);} | |
TTF_ void inpt(T&v,int n,F f){for(v.reserve(n);n--;v.emplace_back(f()));} | |
TTF_ void show(T&v,F f,string d=" ",string e="\n"){int i=0;for(auto&x:v)i++&&(cout<<d),f(x);cout<<e;} | |
TT_ typename T::iterator minel(T&v){return min_element(begin(v),end(v));} | |
TT_ typename T::iterator maxel(T&v){return max_element(begin(v),end(v));} | |
inline void fast_io(){ios_base::sync_with_stdio(0);cin.tie(0);} | |
inline int in(){int x;scanf("%d",&x);return x;} | |
inline ll pow_mod(ll a,ll k,ll m){ll r=1;for(;k>0;a=a*a%m,k>>=1)if(k&1)r=r*a%m;return r;} | |
inline ll mod_inv(ll a,ll p){return pow_mod(a,p-2,p);} | |
//}}} priority_queue queue deque front stringstream max_element min_element insert count make_tuple | |
ll dp[1028][1028]; // dp[M][N] = min_cost | |
int main() | |
{ | |
int N, M; | |
N = in(), M = in(); | |
vector<int> D, C; | |
inpt(D, N, in); | |
inpt(C, M, in); | |
const ll INF = 1ll << 50; | |
for (int i = 0; i < 1028; i++){ | |
for (int j = 0; j < 1028; j++){ | |
dp[i][j] = INF; | |
} | |
} | |
dp[0][0] = 0; | |
for (int i = 0; i < M; i++){ | |
for (int j = 0; j < N; j++){ | |
if (dp[i][j] == INF) continue; | |
dp[i + 1][j] = min(dp[i + 1][j], dp[i][j]); | |
dp[i + 1][j + 1] = min(dp[i + 1][j + 1], dp[i][j] + D[j] * C[i]); | |
} | |
} | |
ll mini = INF; | |
for (int i = 0; i <= M; i++){ | |
mini = min(mini, dp[i][N]); | |
} | |
cout << mini << endl; | |
return 0; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
typedef long long ll; | |
typedef long double ld; | |
typedef tuple<int, int> duo; | |
const int dx[] = {0, 0, 1, -1, 1, 1, -1, -1}; | |
const int dy[] = {1, -1, 0, 0, 1, -1, 1, -1}; | |
const int Mod = 1000000000 + 0; | |
//{{{ templates | |
#define TT_ template<typename T>inline | |
#define TTF_ template<typename T,typename F>inline | |
TT_ T sq(T x){return x*x;} | |
TT_ T In(){T x;cin>>x;return x;} | |
TT_ void Out(T&x){cout<<x;} | |
TT_ void sort(T&v){sort(begin(v),end(v));} | |
TT_ void revs(T&v){reverse(begin(v),end(v));} | |
TT_ void uniq(T&v){sort(v);v.erase(unique(begin(v),end(v)),end(v));} | |
TT_ int ubnd(T&v,typename T::value_type x){return upper_bound(begin(v),end(v),x)-begin(v);} | |
TT_ int lbnd(T&v,typename T::value_type x){return lower_bound(begin(v),end(v),x)-begin(v);} | |
TTF_ void inpt(T&v,int n,F f){for(v.reserve(n);n--;v.emplace_back(f()));} | |
TTF_ void show(T&v,F f,string d=" ",string e="\n"){int i=0;for(auto&x:v)i++&&(cout<<d),f(x);cout<<e;} | |
TT_ typename T::iterator minel(T&v){return min_element(begin(v),end(v));} | |
TT_ typename T::iterator maxel(T&v){return max_element(begin(v),end(v));} | |
inline void fast_io(){ios_base::sync_with_stdio(0);cin.tie(0);} | |
inline int in(){int x;scanf("%d",&x);return x;} | |
inline ll pow_mod(ll a,ll k,ll m){ll r=1;for(;k>0;a=a*a%m,k>>=1)if(k&1)r=r*a%m;return r;} | |
inline ll mod_inv(ll a,ll p){return pow_mod(a,p-2,p);} | |
//}}} priority_queue queue deque front stringstream max_element min_element insert count make_tuple | |
struct P { | |
int x, y; | |
P(int x, int y) : x(x), y(y) {} | |
}; | |
int life[1024][1024]; | |
int main() | |
{ | |
int H, W; | |
H = in(), W = in(); | |
vector<string> sfield; | |
inpt(sfield, H, In<string>); | |
queue<P> Q; | |
for (int y = 1; y < H - 1; y++){ | |
for (int x = 1; x < W - 1; x++){ | |
if (sfield[y][x] == '.'){ | |
life[y][x] = -1; | |
} | |
else { | |
life[y][x] = sfield[y][x] - '0'; | |
for (int d = 0; d < 8; d++){ | |
int nx = x + dx[d], ny = y + dy[d]; | |
life[y][x] -= sfield[ny][nx] == '.'; | |
} | |
life[y][x] = max(life[y][x], 0); | |
if (!life[y][x]) Q.push(P(x, y)); | |
} | |
} | |
} | |
int turn = 0; | |
while (!Q.empty()){ | |
queue<P> nQ; | |
while (!Q.empty()){ | |
auto p = Q.front(); | |
Q.pop(); | |
for (int d = 0; d < 8; d++){ | |
int nx = p.x + dx[d], ny = p.y + dy[d]; | |
if (life[ny][nx] == 1) nQ.push(P(nx, ny)); | |
life[ny][nx]--; | |
} | |
} | |
turn++; | |
swap(nQ, Q); | |
} | |
cout << turn << endl; | |
return 0; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
typedef long long ll; | |
typedef long double ld; | |
const int dx[] = {0, 0, 1, -1, 1, 1, -1, -1}; | |
const int dy[] = {1, -1, 0, 0, 1, -1, 1, -1}; | |
const int Mod = 1000000000 + 0; | |
//{{{ templates | |
#define TT_ template<typename T>inline | |
#define TTF_ template<typename T,typename F>inline | |
TT_ T sq(T x){return x*x;} | |
TT_ T In(){T x;cin>>x;return x;} | |
TT_ void Out(T&x){cout<<x;} | |
TT_ void sort(T&v){sort(begin(v),end(v));} | |
TT_ void revs(T&v){reverse(begin(v),end(v));} | |
TT_ void uniq(T&v){sort(v);v.erase(unique(begin(v),end(v)),end(v));} | |
TT_ int ubnd(T&v,typename T::value_type x){return upper_bound(begin(v),end(v),x)-begin(v);} | |
TT_ int lbnd(T&v,typename T::value_type x){return lower_bound(begin(v),end(v),x)-begin(v);} | |
TTF_ void inpt(T&v,int n,F f){for(v.reserve(n);n--;v.emplace_back(f()));} | |
TTF_ void show(T&v,F f,string d=" ",string e="\n"){int i=0;for(auto&x:v)i++&&(cout<<d),f(x);cout<<e;} | |
TT_ typename T::iterator minel(T&v){return min_element(begin(v),end(v));} | |
TT_ typename T::iterator maxel(T&v){return max_element(begin(v),end(v));} | |
inline void fast_io(){ios_base::sync_with_stdio(0);cin.tie(0);} | |
inline int in(){int x;scanf("%d",&x);return x;} | |
inline ll pow_mod(ll a,ll k,ll m){ll r=1;for(;k>0;a=a*a%m,k>>=1)if(k&1)r=r*a%m;return r;} | |
inline ll mod_inv(ll a,ll p){return pow_mod(a,p-2,p);} | |
//}}} priority_queue queue deque front stringstream max_element min_element insert count make_tuple | |
struct P { | |
ll x, y; | |
P(ll x, ll y) : x(x), y(y) {} | |
}; | |
int main() | |
{ | |
ll N, D; | |
cin >> N >> D; | |
vector<P> V; | |
for (int i = 0; i < N; i++){ | |
ll x, y; | |
cin >> x >> y; | |
V.emplace_back(x, y); | |
} | |
ll maxi = 0; | |
for (int bi = 0; bi < (1 << N); bi++){ | |
for (int bj = 0; bj < (1 << N); bj++){ | |
if ((bi & bj) != 0) continue; | |
ll wi, wj; | |
ll ri, rj; | |
wi = wj = 0; | |
ri = rj = 0; | |
for (int i = 0; i < N; i++){ | |
if (bi & (1 << i)){ | |
wi += V[i].x; | |
ri += V[i].y; | |
} | |
if (bj & (1 << i)){ | |
wj += V[i].x; | |
rj += V[i].y; | |
} | |
} | |
if (abs(wj - wi) <= D){ | |
maxi = max(maxi, abs(ri - rj)); | |
} | |
} | |
} | |
cout << maxi << endl; | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment