“高教社杯”第三届福建省大学生程序设计竞赛
2013-12-14 12:08
429 查看
Tag | Pro.ID | Problem Title | Ratio(AC/Submit) |
---|---|---|---|
1 | Solve equation | 48.47%(111/229) | |
2 | Bin & Jing in wonderland | 14.29%(4/28) | |
3 | Floor problem | 88.67%(133/150) | |
4 | Digits Count | 17.19%(11/64) | |
5 | How many tuples | 0.00%(0/0) | |
6 | Hua Rong Dao | 33.33%(22/66) | |
7 | Mod problem | 20.69%(6/29) | |
8 | Mountain Number | 28.57%(2/7) | |
9 | Star | 24.38%(78/320) | |
10 | Min Number | 32.57%(85/261) | |
11 | Tickets | 28.00%(14/50) |
#include <stdio.h> #include <string.h> const int N = 105; int t, base, n1, n2; char num1 , num2 ; int tra(char *s) { int ans = 0; for (int i = 0; i < strlen(s); i ++) { if (s[i] >= '0' && s[i] <= '9') ans = ans * base + s[i] - '0'; else ans = ans * base + s[i] - 'a' + 10; } return ans; } void init() { scanf("%s%s%d", num1, num2, &base); n1 = tra(num1); n2 = tra(num2); } void solve() { printf("(%d,%d)\n", n1 / n2, n1 - n1 / n2 * n2); } int main() { scanf("%d", &t); while (t--) { init(); solve(); } return 0; }
第二题:组合概率
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define min(a,b) (a)<(b)?(a):(b)
const int N = 55;
typedef long long ll;
double c
;
int t, n, k, r, res
, Minr, vis
;
double p
, pr, pMax;
double C(int n, int m) {
double ans = 1.0;
m = min(m, n - m);
for (int i = 0; i < m; i ++)
ans = ans * (n - i) / (i + 1);
return ans;
}
void c_table() {
for (int i = 0; i <= 52; i ++)
for (int j = 0; j <= i; j ++)
c[i][j] = C(i, j);
}
void init() {
pMax = 1.0;
memset(vis, 0, sizeof(vis));
scanf("%d%d%d", &n, &k, &r);
for (int i = 1; i <= n; i ++)
scanf("%lf", &p[i]);
for (int i = 0; i < r; i ++) {
scanf("%d", &res[i]);
pMax *= p[res[i]];
vis[res[i]] ++;
}
sort(res, res + r);
Minr = res[0];
pr = 0.0;
for (int i = 1; i < Minr; i ++)
pr += p[i];
}
void fuck(double &s) {
int kk = k;
for (int i = 0; i <= n; i ++) {
s *= c[kk][vis[i]];
kk -= vis[i];
}
}
double sb(double p, int k) {
double ans = 1.0;
for (int i = 0; i < k; i ++)
ans *= p;
return ans;
}
double solve() {
double ans = 0;
double s;
for (int i = 0; i <= k - r; i ++) {
vis[0] = k - r - i;
s = pMax * sb(pr ,k - r - i) * sb(p[Minr], i);
fuck(s);
ans += s;
vis[Minr] ++;
}
return ans;
}
int main() {
c_table();
scanf("%d", &t);
while (t--) {
init();
printf("%.6lf\n", solve());
}
return 0;
}
第三题:水题
#include <stdio.h> #include <string.h> int t, n, l, r; int main() { scanf("%d", &t); while (t--) { scanf("%d%d%d", &n, &l, &r); int sum = 0; for (int i = l; i <= r; i ++) sum += n / i; printf("%d\n", sum); } return 0; }
第四题:应该是线段树,没出。
第五题:看都没看
第六题:搜索dfs
#include <stdio.h> #include <string.h> const int block[3][3][2] = {{{0, 0}, {0, 1}, {0, 0}}, {{0, 0}, {1, 0}, {0, 0}}, {{0, 0}}}; const int blockn[3] = {2, 2, 1}; int t, n, vis[5][5], save[5], ans; bool judge(int x, int y, int i, int n) { for (int j = 0; j < blockn[i]; j ++) { int xx = x + block[i][j][0]; int yy = y + block[i][j][1]; if (xx < 0 || xx >= n || yy < 0 || yy >= 4 || vis[xx][yy]) { return false; } } return true; } void dfs(int x, int y, int n, int num) { if (num == n * 4) { ans ++; return; } if (y == 4) dfs(x + 1, 0, n, num); if (vis[x][y]) dfs(x, y + 1, n, num); for (int i = 0; i < 3; i ++) { if (judge(x, y, i, n)) { for (int j = 0; j < blockn[i]; j ++) vis[x + block[i][j][0]][y + block[i][j][1]] = 1; dfs(x, y + 1, n, num + blockn[i]); for (int j = 0; j < blockn[i]; j ++) vis[x + block[i][j][0]][y + block[i][j][1]] = 0; } } } int solve(int n) { int an = 0; for (int i = 0; i < n - 1; i ++) for (int j = 0; j < 3; j ++) { memset(vis, 0, sizeof(vis)); vis[i][j] = vis[i + 1][j] = vis[i][j + 1] = vis[i + 1][j + 1] = 1; ans = 0; dfs(0, 0, n, 4); an += ans; } return an; } int main() { for (int i = 1; i <= 4; i ++) save[i] = solve(i); scanf("%d", &t); while (t--) { scanf("%d", &n); printf("%d\n", save ); } return 0; }
第七题;没看
第八题:应该是数位DP,没出。
第九题:暴力枚举+几何
#include <stdio.h> #include <string.h> typedef long long ll; const int N = 105; int t, n; struct point { ll x, y; } p ; void init() { scanf("%d", &n); for (int i = 0; i < n; i ++) scanf("%lld%lld", &p[i].x, &p[i].y); } bool judge(int i, int j, int k) { return (p[j].x - p[i].x) * (p[k].x - p[i].x) + (p[j].y - p[i].y) * (p[k].y - p[i].y) > 0; } int solve() { int ans = 0; for (int i = 0; i < n; i ++) for (int j = i + 1; j < n; j ++) for (int k = j + 1; k < n; k ++) { if (judge(i, j, k) && judge(j, i, k) && judge(k, i, j)) ans ++; } return ans; } int main() { scanf("%d", &t); while (t--) { init(); printf("%d\n", solve()); } return 0; }
第十题:贪心
#include <stdio.h> #include <string.h> const int N = 1005; int t, m; char n ; void init() { scanf("%s%d", n, &m); } void swap(char &a, char &b) { char c = a; a = b; b = c; } void solve() { if (m != 0) { int len = strlen(n), Min = 10, Min_v = len, start = 1, mm = 0; for (int i = len - 1; i > 0; i --) if (Min > n[i] - '0' && n[i] != '0') { Min = n[i] - '0'; Min_v = i; } if (Min < n[0] - '0') { swap(n[0], n[Min_v]); mm ++; } while (start != len && mm != m) { Min = 10; for (int i = len - 1; i > start; i --) if (Min > n[i] - '0') { Min = n[i] - '0'; Min_v = i; } if (Min < n[start] - '0') { swap(n[start], n[Min_v]); mm ++; } start ++; } } printf("%s\n", n); } int main() { scanf("%d", &t); while (t--) { init(); solve(); } return 0; }
第十一题:并查集+欧拉回路
#include <stdio.h> #include <string.h> const int N = 100005; int t, n, m, vis , parent , d , s , sn, v , num ; int find(int x) { return x == parent[x] ? x : parent[x] = find(parent[x]); } void init() { scanf("%d%d", &n, &m); sn = 0; for (int i = 0; i <= n; i ++) parent[i] = i; memset(vis, 0, sizeof(vis)); memset(d, 0, sizeof(d)); memset(v, 0, sizeof(v)); memset(num, 0, sizeof(num)); int a, b; while (m--) { scanf("%d%d", &a, &b); vis[a] = 1; vis[b] = 1; d[a] ++; d[b] ++; int pa = find(a), pb = find(b); if (pa != pb) parent[pa] = pb; } } int solve() { int ans = 0; for (int i = 1; i <= n; i ++) { if (vis[i]) { int pi = find(i); if (!v[pi]) { v[pi] = 1; s[sn ++] = pi; if (d[i] % 2) num[pi] ++; } else { if (d[i] % 2) num[pi] ++; } } } for (int i = 0; i < sn; i ++) { ans += num[s[i]] / 2 - 1; } ans += sn - 1; return ans; } int main() { scanf("%d", &t); while (t--) { init(); printf("%d\n", solve()); } return 0; }
相关文章推荐
- “高教社杯”第三届福建省大学生程序设计竞赛
- “高教社杯”第三届福建省大学生程序设计竞赛
- "高教社杯"第三届福建省大学生程序设计竞赛
- FZU Problem 2102 Solve equation 第三届福建省大学生程序设计竞赛
- fzu 2105 Digits Count ( 线段树 ) from 第三届福建省大学生程序设计竞赛
- 第六届福建省大学生程序设计竞赛 Problem J RunningMan【数学】
- 山东省第三届ACM大学生程序设计竞赛 n a^o7 !
- [2012山东省第三届ACM大学生程序设计竞赛]——Mine Number
- 2016 第七届福建省大学生程序设计竞赛
- 2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛——Pixel density
- 山东省第三届ACM大学生程序设计竞赛 The Best Seat in ACM Contest
- FOJ 2214 Knapsack problem 第六届福建省大学生程序设计竞赛 C 01背包DP变种
- FZU 2271 X (Floyd)(第七届福建省大学生程序设计竞赛)
- 第八届福建省大学生程序设计竞赛-重现赛 L Tic-Tac-Toe
- 第八届福建省大学生程序设计竞赛-重现赛(F Problem 2277 Change)DFS序+树状数组
- 第六届福建省大学生程序设计竞赛不完全题解
- 2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛——n a^o7 !
- 山东省第三届ACM大学生程序设计竞赛(待添加)
- 第六届福建省大学生程序设计竞赛——E The Longest Straight(尺取法)
- FOJ 2216 The Longest Straight 第六届福建省大学生程序设计竞赛 E 尺取法乱搞