2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)
思路:
A Exam
思路:水题
代码:
#include<bits/stdc++.h> using namespace std; int main(){int k;scanf("%d",&k);char s1[1010],s2[1010];scanf("%s%s",s1,s2);int same=0;int n=strlen(s1);for(int i=0;i<n;i++){same+=s1[i]==s2[i];}cout<<min(same,k)+min(n-same,n-k)<<endl;return 0; }
B Coprime Integers
思路:容斥
代码:
#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb push_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1, r #define ULL unsigned LL #define pll pair<LL, LL> #define pli pair<LL, int> #define pii pair<int, int> #define piii pair<pii, int> #define mem(a, b) memset(a, b, sizeof(a)) #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout); //headconst int N = 1e7 + 5; LL g[N]; LL solve(int a, int b) {if(a > b) swap(a, b);if(a == 0) return 0;for (int i = a; i >= 1; i--) {g[i] = 1LL * (a/i) * (b/i);for (int j = i+i; j <= a; j += i) g[i] = g[i] - g[j];}return g[1]; } int main() {int a, b, c, d;scanf("%d %d %d %d", &a, &b, &c, &d);printf("%lld\n", solve(b, d) - solve(b, c-1) - solve(a-1, d) + solve(a-1, c-1));return 0; }
C Contest Setting
思路:dp
dp[i][j]表示前i种选j个的方案数
代码:
#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb push_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1, r #define ULL unsigned LL #define pll pair<LL, LL> #define pli pair<LL, int> #define pii pair<int, int> #define piii pair<pii, int> #define mem(a, b) memset(a, b, sizeof(a)) #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout); //headconst int MOD = 998244353; const int N = 1e3 + 5; LL dp[N][N]; int cnt[N], a[N], tot = 0; map<int, int> mp; int main() {int n, k;scanf("%d %d", &n, &k);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);if(mp.find(a[i]) == mp.end()) mp[a[i]] = ++tot, cnt[tot] = 1;else cnt[mp[a[i]]] ++;}dp[0][0] = 1;for (int i = 1; i <= tot; i++) {for (int j = 0; j <= k; j++) dp[i][j] = dp[i-1][j];for (int j = 1; j <= k; j++) dp[i][j] = (dp[i][j] + dp[i-1][j-1]*cnt[i]) % MOD;}printf("%lld\n", dp[tot][k]);return 0; }
D Count The Bits
思路:dp
dp[i][j][0]表示前i位构成的数中对k取模为j的数的个数
dp[i][j][1]表示前i位构成的数中对k取模为j的数中二进制中1的个数
代码:
#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb push_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1, r #define ULL unsigned LL #define pll pair<LL, LL> #define pli pair<LL, int> #define pii pair<int, int> #define piii pair<pii, int> #define mem(a, b) memset(a, b, sizeof(a)) #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout); //headconst int N = 150, M = 1e3 + 5; const int MOD = 1e9 + 9; LL dp[N][M][2]; int main() {int k, b;scanf("%d %d", &k, &b);dp[0][0][0] = 1;dp[0][0][1] = 0;for (int i = 1; i <= b; i++) {for (int j = 0; j < k; j++) {(dp[i][(j*2)%k][0] += dp[i-1][j][0]) %= MOD;(dp[i][(j*2+1)%k][0] += dp[i-1][j][0]) %= MOD;(dp[i][(j*2)%k][1] += dp[i-1][j][1]) %= MOD;(dp[i][(j*2+1)%k][1] += dp[i-1][j][1] + dp[i-1][j][0]) %= MOD;}}printf("%lld\n", dp[b][0][1]);return 0; }
E Cops And Roobers
F Rectangles
G Goat on a Rope
思路:求点到矩形的最近距离
代码:
#include<bits/stdc++.h> using namespace std; double cal(double x1,double y1,double x2,double y2) {return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } int main() {double x,y,x1,x2,y1,y2,ans=1e9;scanf("%lf%lf%lf%lf%lf%lf",&x,&y,&x1,&y1,&x2,&y2);if(x>=min(x1,x2)&&x<=max(x2,x1)) ans=min(abs(y1-y),abs(y2-y));else if(y>=min(y1,y2)&&y<=max(y1,y2)) ans=min(abs(x-x1),abs(x-x2));else ans=min(cal(x,y,x1,y1),min(cal(x,y,x2,y2),min(cal(x,y,x1,y2),cal(x,y,x2,y1))));printf("%.3f\n",ans); }
H Repeating Goldbachs
思路:暴力
代码:
#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb push_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1, r #define ULL unsigned LL #define pll pair<LL, LL> #define pli pair<LL, int> #define pii pair<int, int> #define piii pair<pii, int> #define mem(a, b) memset(a, b, sizeof(a)) #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout); //headconst int N = 1e6 + 5; int p[N], tot = 0; bool not_p[N]; void seive() {for (int i = 2; i < N; i++) {if(!not_p[i]) {p[++tot] = i;}for (int j = 1; j <= tot && p[j]*i < N; j++) {not_p[p[j]*i] = true;if(i % p[j] == 0) break;}} } int main() {int x;scanf("%d", &x);seive();int ans = 0;while(x >= 4) {for(int i = 1; i <= tot && p[i] <= x; i++) {if(!not_p[x-p[i]]) {x = x - p[i] - p[i];ans++;break;}}}printf("%d\n", ans);return 0; }
I Inversions
J Time Limits
思路:水题
代码:
#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb push_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1, r #define ULL unsigned LL #define pll pair<LL, LL> #define pli pair<LL, int> #define pii pair<int, int> #define piii pair<pii, int> #define mem(a, b) memset(a, b, sizeof(a)) #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout); //headconst int N = 105; int t[N]; int n, s; int main() {scanf("%d %d", &n, &s);for (int i = 1; i <= n; i++) scanf("%d", &t[i]);sort(t+1, t+1+n);printf("%d\n", (t[n]*s + 999) / 1000);return 0; }
K Knockout
L Liars
思路:暴力
代码:
#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb push_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1, r #define ULL unsigned LL #define pll pair<LL, LL> #define pli pair<LL, int> #define pii pair<int, int> #define piii pair<pii, int> #define mem(a, b) memset(a, b, sizeof(a)) #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout); //headconst int N = 1e3 + 5; pii a[N]; int main() {int n;scanf("%d", &n);for (int i = 1; i <= n; i++) scanf("%d %d", &a[i].fi, &a[i].se);int ans = -1;for (int i = 0; i <= n; i++) {int cnt = 0;for (int j = 1; j <= n; j++) {if(a[j].fi <= i && i <= a[j].se) cnt++;}if(cnt == i) ans = max(ans, i);}printf("%d\n", ans);return 0; }
M Mobilization