1、水题
#include <stdio.h>
#include <string.h>
const int N = 105;
int t, base, n1, n2;
char num1[N], num2[N];
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[N][N];
int t, n, k, r, res[N], Minr, vis[N];
double p[N], 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[n]);
}
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[N];
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[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[N], parent[N], d[N], s[N], sn, v[N], num[N];
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;
}
分享到:
相关推荐
2018高教社杯全国大学生数建模竞赛C题评阅要点
2004年高教社杯全国大学生数学建模竞赛赛题+数据
2011高教社杯全国大学生数学建模竞赛题目A题,大家自己看看把
2016年高教社杯全国大学生数学建模竞赛 A题 系泊系统的设计 准备2018年国赛的时候用来练手的程序,完成度比较高,希望对大家有帮助
2019高教社杯全国大学生数学建模竞赛C题评阅要点:机场的出租车问题 大多数乘客下飞机后要去市区(或周边)的目的地,出租车是主要的交通工具之一。国内多数机场都是将送客(出发)与接客(到达)通道分开的。送客到...
2011高教社杯全国大学生数学建模竞赛2011高教社杯全国大学生数学建模竞赛2011高教社杯全国大学生数学建模竞赛
2008高教社杯全国大学生数学建模竞赛联合赛区二等奖论文2008高教社杯全国大学生数学建模竞赛联合赛区二等奖论文
2009 高教社杯 全国 大学生 数学 建模竞赛
2010年高教社杯全国大学生数学建模竞赛获奖论文.doc数学建模
2013高教社杯全国大学生数学建模竞赛题目B题(含附件)
2007高教社杯全国大学生数学建模竞赛题目B题:乘公交,看奥运
2011 高教社杯全国大学生数学建模竞赛C题评阅要点
2012高教社杯全国大学生数学建模竞赛A题思路及图解
2019高教社杯全国大学生数学建模竞赛A题.评阅要点:高压油管的压力控制 燃油进入和喷出高压油管是许多燃油发动机工作的基础,图1给出了某高压燃油系统的工作原理,燃油经过高压油泵从A处进入高压油管,再由喷口B喷出...
2019高教社杯全国大学生数学建模竞赛E题评阅要点:“薄利多销”分析 “薄利多销”是通过降低单位商品的利润来增加销售数量,从而使商家获得更多盈利的一种扩大销售的策略。对于需求富有弹性的商品来说,当该商品的...
2018高教社杯全国大学生数建模竞赛D题评阅要点
2007高教社杯全国大学生数学建模竞赛题目 (请先阅读 “对论文格式的统一要求”) A题:中国人口增长预测
2013高教社杯全国大学生数学建模竞赛A题
这是一个利用生产企业实际数据进行综合分析井确定原材料的订购与运输方案的优化决策问题。要求根据历史数据和实际建立原材料的订购与运输决策模型,并给出具体的订购与运输方案。 由于该问题的开放性和数据的复杂性...
2009高教社杯全国大学生数学建模竞赛B题参考资料