CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
Sim Card
#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> v{{30, 40}, {35, 30}, {40, 20}};
int main()
{
for (int c, d; ~scanf("%d%d", &c, &d) && (c || d);)
{
int ans = 1e9;
for (auto p : v)
ans = min(ans, c * p.first + d * p.second);
printf("%d\n", ans);
}
}
Bank Card Verifier
#include <bits/stdc++.h>
using namespace std;
int main()
{
for (char s[31]; ~scanf("%s%s%s%s", s, s + 4, s + 8, s + 12) && strcmp(s, "0000000000000000");)
{
int sum = 0;
for (int i = 0; s[i]; ++i)
{
int t = s[i] - '0';
if (i % 2 == 0)
t <<= 1;
if (t > 9)
t -= 9;
sum += t;
}
printf(sum % 10 ? "No\n" : "Yes\n");
}
}
World Cup Draw
#include <bits/stdc++.h>
using namespace std;
unordered_map<string, pair<int, string>> mp{
{"Russia", {65, "UEFA"}},
{"Spain", {8, "UEFA"}},
{"Denmark", {19, "UEFA"}},
{"Serbia", {38, "UEFA"}},
{"Germany", {1, "UEFA"}},
{"Peru", {10, "CONMEBOL"}},
{"Iceland", {21, "UEFA"}},
{"Nigeria", {41, "CAF"}},
{"Brazil", {2, "CONMEBOL"}},
{"Switzerland", {11, "UEFA"}},
{"CostaRica", {22, "CONCACAF"}},
{"Australia", {43, "AFC"}},
{"Portugal", {3, "UEFA"}},
{"England", {12, "UEFA"}},
{"Sweden", {25, "UEFA"}},
{"Japan", {44, "AFC"}},
{"Argentina", {4, "CONMEBOL"}},
{"Colombia", {13, "CONMEBOL"}},
{"Tunisia", {28, "CAF"}},
{"Morocco", {48, "CAF"}},
{"Belgium", {5, "UEFA"}},
{"Mexico", {16, "CONCACAF"}},
{"Egypt", {30, "CAF"}},
{"Panama", {49, "CONCACAF"}},
{"Poland", {6, "UEFA"}},
{"Uruguay", {17, "CONMEBOL"}},
{"Senegal", {32, "CAF"}},
{"SouthKorea", {62, "AFC"}},
{"France", {7, "UEFA"}},
{"Croatia", {18, "UEFA"}},
{"Iran", {34, "AFC"}},
{"SaudiArabia", {63, "AFC"}}};
void split(const string &s, char c, vector<string> &v)
{
istringstream sin(s);
for (string s; getline(sin, s, c);)
{
for (int n; n = s.find(' '), n != s.npos;)
s.erase(n, 1);
if (!s.empty())
v.push_back(s);
}
}
bool dfs(int x, int y, const vector<vector<string>> &s, vector<vector<string>> &t)
{
if (y >= s[0].size())
return dfs(x + 1, 0, s, t);
if (x >= s.size())
{
vector<pair<int, char>> ans(s[0].size());
for (int i = 0; i < ans.size(); ++i)
{
for (int j = 0; j < t.size(); ++j)
ans[i].first += mp[t[j][i]].first;
ans[i].second = i + 'A';
}
sort(ans.begin(), ans.end());
for (auto p : ans)
cout << p.second << ' ' << p.first << '\n';
return 1;
}
for (int i = 0; i < t[x].size(); ++i)
if (t[x][i].empty())
{
int cnt = mp[s[x][y]].second != "UEFA";
for (int j = 0; j < x; ++j)
if (mp[t[j][i]].second == mp[s[x][y]].second)
++cnt;
if (cnt < 2)
{
t[x][i] = s[x][y];
if (dfs(x, y + 1, s, t))
return 1;
t[x][i].clear();
}
}
return 0;
}
int main()
{
for (string s; getline(cin, s), s != "End";)
{
vector<vector<string>> v(4), vv(4, vector<string>(8));
split(s, ',', v[0]);
for (int i = 1; i < v.size(); ++i)
getline(cin, s), split(s, ',', v[i]);
dfs(0, 0, v, vv);
}
}
Barareh on Fire
#include <bits/stdc++.h>
using namespace std;
const int N=1e2+10;
int n, m, k;
char a[N][N];
int dx[]= {-1, 1, 0, 0,-1,-1, 1, 1};
int dy[]= { 0, 0,-1, 1, 1,-1,-1, 1};
int first, Extended, ans;
struct Node {
int x, y, w;
};
queue<Node> Q, F;
int people() {
int up;
if (first==1) {
up=k-1;
first=0;
Extended=1;
}
else {
up=k;
}
for(int i=1; i<=up; i++) {
int sz=Q.size();
if (!sz) break;
for(int i=1; i<=sz; i++) {
Node u=Q.front();Q.pop();
for(int i=0; i<4; i++) {
int Nx=u.x+dx[i];
int Ny=u.y+dy[i];
int Nw=u.w+1;
if (Nx<1||Nx>n||Ny<1||Ny>m) continue;
if (a[Nx][Ny]=='t') return Nw;
if (a[Nx][Ny]!='-') continue;
a[Nx][Ny]='#';
Q.push(Node{Nx, Ny, Nw});
Extended=1;
}
}
}
return 0;
}
void fire() {
int sz=F.size();
if (!sz) return;
for(int i=1; i<=sz; i++) {
Node u=F.front();F.pop();
for(int i=0; i<8; i++) {
int Nx=u.x+dx[i];
int Ny=u.y+dy[i];
int Nw=u.w+1;
if (Nx<1||Nx>n||Ny<1||Ny>m) continue;
if (a[Nx][Ny]=='f') continue;
a[Nx][Ny]='f';
F.push(Node{Nx, Ny, Nw});
Extended=1;
}
}
}
int main() {
//freopen("e.in", "r", stdin);
while(scanf("%d %d %d", &n, &m, &k)) {
if (!n&&!m&&!k) break;
while(!Q.empty()) Q.pop();
while(!F.empty()) F.pop();
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin>>a[i][j];
if (a[i][j]=='s') {
Q.push(Node {i, j, 0});
}
if (a[i][j]=='f') {
F.push(Node {i, j, 0});
}
}
}
first=1;
Extended=1;
while(Extended) {
Extended=0;
ans=people();
// cout<<"ans="<<ans<<endl;
if (ans) break;
fire();
}
// for(int i=1; i<=n; i++) {
// for(int j=1; j<=m; j++) {
// cout<<a[i][j];
// }
// cout<<endl;
// }
if (ans) cout<<ans<<endl;
else cout<<"Impossible"<<endl;
}
return 0;
}
Column Addition
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int n;
char A[N], B[N], C[N];
int a[N], b[N], c[N];
int dp[N][2];
int main()
{
// freopen("h.in", "r", stdin);
while (scanf("%d", &n))
{
if (!n)
break;
scanf("%s", A + 1);
scanf("%s", B + 1);
scanf("%s", C + 1);
for (int i = 1; i <= n; i++)
{
a[i] = A[i] - '0';
b[i] = B[i] - '0';
c[i] = C[i] - '0';
}
memset(dp, 0x3f, sizeof(dp));
dp[n + 1][0] = 0;
for (int i = n; i >= 1; i--)
{
dp[i][1] = min(dp[i][1], dp[i + 1][1] + 1);
dp[i][0] = min(dp[i][0], dp[i + 1][0] + 1);
if (a[i] + b[i] == c[i] + 10)
{
dp[i][1] = min(dp[i][1], dp[i + 1][0]);
}
else if (a[i] + b[i] + 1 == c[i] + 10)
{
dp[i][1] = min(dp[i][1], dp[i + 1][1]);
}
else if (a[i] + b[i] == c[i])
{
dp[i][0] = min(dp[i][0], dp[i + 1][0]);
}
else if (a[i] + b[i] + 1 == c[i])
{
dp[i][0] = min(dp[i][0], dp[i + 1][1]);
}
}
cout << dp[1][0] << endl;
}
return 0;
}
Cafe Bazaar
#include <bits/stdc++.h>
#define L first
#define R second
using namespace std;
typedef long long ll;
ll trans(ll a[])
{
ll r = 0;
for (ll i = 0; i < 5; ++i)
r = r * 256 + a[i];
return r;
}
int main()
{
for (ll n; ~scanf("%lld", &n) && n;)
{
vector<pair<ll, ll>> v;
for (ll a[5], t, m; n--;)
{
char c;
scanf("%lld.%lld.%lld.%lld.%lld%c", &a[0], &a[1], &a[2], &a[3], &a[4], &c);
t = trans(a);
if (c == '-')
{
scanf("%lld.%lld.%lld.%lld.%lld", &a[0], &a[1], &a[2], &a[3], &a[4]);
v.push_back({t, trans(a)});
}
else
{
scanf("%lld", &m);
v.push_back({t, t + (1LL << 40 - m) - 1});
}
}
sort(v.begin(), v.end());
vector<pair<ll, ll>> vp(1, v[0]);
for (auto p : v)
{
if (p.L > vp.back().R + 1)
vp.push_back(p);
else
vp.back().R = max(vp.back().R, p.R);
}
v.clear();
for (auto p : vp)
while (p.L <= p.R)
for (ll i = 40; ~i; --i)
if (p.L >> i << i == p.L && p.L + (1LL << i) - 1 <= p.R)
{
v.push_back({p.L >> i << i, 40 - i});
p.L += 1LL << i;
break;
}
printf("%d\n", v.size());
for (ll i = 0, a[5]; i < v.size(); ++i)
{
for (ll j = 0; j < 5; ++j)
a[j] = v[i].L % 256, v[i].L /= 256;
for (ll j = 4; ~j; --j)
printf("%lld%c", a[j], j ? '.' : '/');
printf("%lld\n", v[i].R);
}
}
}
Mars
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e5 + 7, M1 = 1e7 + 3, M2 = 998244353;
int tot, ans;
bool p[N];
char s[N];
ll b[N], c[N], an[N], f[N], g[N];
ll h[M1 + 7], to[M1 + 7];
struct Node
{
int x, y, z, f;
bool operator<(const Node &b) const
{
return z != b.z ? z < b.z : y < b.y;
}
} a[N];
void ins(ll x, ll y)
{
ll t = x;
while (h[t] != -1 && h[t] != y)
t = (t + 1) % M1;
if (h[t] == -1)
{
to[++tot] = t;
h[t] = y;
}
}
bool check(ll x, ll y)
{
ll t = x;
while (h[t] != -1 && h[t] != y)
t = (t + 1) % M1;
if (h[t] == -1)
return 1;
else
return 0;
}
void dfs(int x, int n, ll t1, ll t2, int y, int z)
{
if (ans)
return;
if (check(t1, t2))
{
ans = y;
return;
}
if (x > y)
return;
for (int i = z; i <= n; i++)
{
if (p[i])
continue;
ll tt1 = (t1 - c[i] * 1LL * f[n - i] % M1 + M1) % M1, tt2 = (t2 - c[i] * 1LL * g[n - i] % M2 + M2) % M2;
p[i] = 1;
c[i] ^= 1;
tt1 = (tt1 + c[i] * 1LL * f[n - i] % M1) % M1;
tt2 = (tt2 + c[i] * 1LL * g[n - i] % M2) % M2;
dfs(x + 1, n, tt1, tt2, y, i + 1);
p[i] = 0;
c[i] ^= 1;
}
}
void bfs(int n)
{
ll t1 = 0, t2 = 0;
ans = 0;
for (int i = 1; i <= n; i++)
t1 = (t1 * 1LL * 2 % M1 + c[i]) % M1, t2 = (t2 * 1LL * 2 % M2 + c[i]) % M2;
for (int i = 1; i <= n; i++)
{
dfs(1, n, t1, t2, i, 1);
if (ans)
break;
}
}
int main()
{
f[0] = g[0] = 1;
for (int i = 1; i <= 100000; i++)
f[i] = f[i - 1] * 1LL * 2 % M1, g[i] = g[i - 1] * 1LL * 2 % M2;
for (int i = 0; i < M1; i++)
h[i] = -1;
for (int n, m; ~scanf("%d%d%s", &n, &m, s + 1) && (n || m);)
{
for (int i = 1; i <= n; i++)
b[i] = s[i] - '0';
for (int i = 1; i <= m; i++)
{
scanf("%d%d", &a[i].x, &a[i].y);
a[i].z = a[i].y - a[i].x + 1;
a[i].f = i;
}
sort(a + 1, a + 1 + m);
for (int i = 1; i <= m;)
{
int j = 1;
while (a[i].z == a[i + j].z)
j++;
ll t = a[i].z, t1 = 0, t2 = 0;
for (int k = 1; k <= t; k++)
t1 = (t1 * 1LL * 2 % M1 + b[k]) % M1, t2 = (t2 * 1LL * 2 % M2 + b[k]) % M2;
tot = 0;
ins(t1, t2);
for (int k = t + 1; k <= n; k++)
{
t1 = ((t1 * 1LL * 2 % M1 + b[k]) % M1 - f[t] * 1LL * b[k - t] % M1 + M1) % M1;
t2 = ((t2 * 1LL * 2 % M2 + b[k]) % M2 - g[t] * 1LL * b[k - t] % M2 + M2) % M2;
ins(t1, t2);
}
for (int k = i; k < i + j; k++)
{
int tt = 0;
for (int l = a[k].x; l <= a[k].y; l++)
c[++tt] = b[l];
bfs(tt);
an[a[k].f] = ans;
}
for (int k = 1; k <= tot; k++)
h[to[k]] = -1;
i += j;
}
for (int i = 1; i <= m; i++)
{
if (an[i])
printf("%lld\n", an[i]);
else
printf("Impossible\n");
}
}
}