今天做的是第五届河南省省赛,我挫到爆了,只出了三题,都是水题,个人赛垫底。

先总结一下,今天写最水的A题居然WA了两次,关键是调了半个小时,浪费了不少时间,也影响了心情。然后做的是同样水的

F题,还好敲的比较快,也顺利一A。然后剩下三个多小时在梦游,将D题敲到了200多行,WA了2次,中途去写了G题,结果题意看错了,

WA了1次,看各位大牛已经A到了7题,又回来写D题,还是WA,最后才想到B题过的人也那么多,所以去写B题,WA了两次才A。惨不忍睹!

A:奇怪的排序

将一个数组的所有数翻转,然后从小到大排序,输出排序后的结果,例如13翻转成31,超级水的一道题,真心不应该

#include <stdio.h>
#include <string.h>
#include <stdlib.h>const int MAXD = 60;
typedef struct Node
{int x, y;
}E;
E e[MAXD];
int A, B;int cmp(const void *_p, const void *_q)
{E *p = (E *)_p;E *q = (E *)_q;return p -> y - q -> y;
}int main()
{int n;scanf("%d", &n);while(n --){scanf("%d%d", &A, &B);int k = 0;for(int i = A; i <= B; i ++){e[k].x = i;char str[20];int t = i, m = 0;while(t){str[m ++] = t % 10 + '0';t /= 10;}str[m] = '\0';//printf("%s\n", str);int s = 1, j;e[k].y = 0;for(j = strlen(str) - 1; j >= 10; )if(str[j] == '0') j --;for(; j >= 0 ; j --){e[k].y += (str[j] - '0') * s;s *= 10;}//printf("%d\n", e[k].y);k ++;}qsort(e, k, sizeof e[0], cmp);k --;for(int i = 0; i < k; i ++){printf("%d ", e[i].x);}printf("%d\n", e[k].x);}return 0;
}

B: 最强DE 战斗力

将一个1000以内的数拆成N个数,N不给出,自己判断,使得这N个数的乘积最大,需要用到高精度,但是这不是关键。最后才想到拆成3 和 2是最优的,优先选3。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;const int base = 10000;
const int width = 4;
const int N = 1000;
struct bint
{int ln, v[N];bint (int r = 0){for(ln = 0; r > 0; r /= base) v[ln ++] = r % base;}bint & operator = (const bint& r){memcpy(this, &r, (r.ln + 1) * sizeof (int));return *this;}
};/*
bool operator <(const bint& a, const bint& b)
{int i;if(a.ln != b.ln) return a.ln < b.ln;for(i = a.ln - 1; i >= 0 && a.v[i] == b.v[i]; i --){return i < 0 ? 0 : a.v[i] < b.v[i];}
}
*/bint operator * (const bint& a, const bint& b)
{bint res;res.ln = 0;if(0 == b.ln) {res.v[0] = 0; return res;}int i, j, cy;for(i = 0; i < a.ln; i ++){for(j = cy = 0; j < b.ln || cy > 0; j ++, cy /= base){if(j < b.ln) cy += a.v[i] * b.v[j];if(i + j < res.ln) cy += res.v[i + j];if(i + j >= res.ln) res.v[res.ln ++] = cy % base;else res.v[i + j] = cy % base;}}
}bool read(bint& b, char buf[])
{//if(1 != scanf("%s", buf)) return 0;int w, u, ln = strlen(buf);memset(&b, 0, sizeof(bint));if('0' == buf[0] && 0 == buf[1]) return 1;for(w = 1, u = 0; ln; ){u += (buf[-- ln] - '0') * w;if(w * 10 == base){b.v[b.ln ++] = u, u = 0, w = 1;}else w *= 10;}if(w != 1) b.v[b.ln ++] = u;return 1;
}void write(const bint& v)
{int i;printf("%d", v.ln == 0 ? 0 : v.v[v.ln - 1]);for(i = v.ln - 2; i >= 0; i --)printf("%04d", v.v[i]);printf("\n");
}int n, t;
bint s, v, u;int main()
{scanf("%d", &n);while(n --){scanf("%d", &t);int k = t / 3;char str1[10] = "1", str2[10] = "2", str3[10] = "3";read(s, str1);read(v, str2);read(u, str3);//write(s);//write(v);//write(u);for(int i = 0; i < k - 1; i ++){s = s * u;}if(t % 3 == 1){s = s * v;s = s * v;}else if(t % 3 == 2){s = s * u;s = s * v;}else{s = s * u;}write(s);}return 0;
}

C: 试 制 品

一道关于字符串的题,暂时没看。

D:遥控器

这道题是一道类似模拟调频道的题。

Dr.Kong 有一台高级电视机,这台电视机可以接受100个频道(从0到99编号)。电视的配套
遥控器有13个按钮:
1    2   3   ↑
4    5    6   ↓
7    8   9
—   0
当按"↑"键时,当前频道编号会增加1(如果当前为99频道,则会切换到0频道)。如果按"↓"
键,当前频道编号会减小1(如果当前为0频道,则会切换到99频道)。当要切换到0~9频道时,可以
直接在遥控器上按相应的键。当要切换到10~99频道时,可以先按"—"键,然后按2个与频道编号
相对应的数字键(即先按与频道编号的十位数字相对应的键,然后按与个位数字相对应的键)。
由于遥控器长时间的使用和某些未知原因,遥控器上的某些键已经坏了,不能再起作用了。
现在你的任务是,能否告诉Dr.Kong,如何用最少的按键次数来将频道从编号X切换到编号Y。

我当时是根据键来枚举,越来越乱,越写越多,最后就悲剧了。

其实应该按照步数来枚举,枚举需要按上下键的步数。如果我们只通过按上下的话,从X到Y的步数可以直接求。

从任一个可通过按数字键到的频道到Y的步数 + 数字键到该频道的步数也可以求。然后找出最小值即可。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int a[15];
int x, y;
int cnt, ans;
int id(int x)
{if(x < 0)return x + 100;elsereturn x % 100;
}int min(int a, int b)
{if(a == -1)return b;elsereturn a < b ? a : b;
}int to(int x)
{x = id(x);if(x / 10 == 0){return a[x];}int tx = x / 10, bx = x % 10;if(a[10] && a[tx] && a[bx])return 3;return 0;
}int main()
{//freopen("543.in", "r", stdin);//freopen("D.out", "w", stdout);int t;scanf("%d", &t);while(t --){ans = -1;scanf("%d%d%d%d", &a[1], &a[2], &a[3], &a[11]);scanf("%d%d%d%d", &a[4], &a[5], &a[6], &a[12]);scanf("%d%d%d", &a[7], &a[8], &a[9]);scanf("%d%d", &a[10], &a[0]);scanf("%d%d", &x, &y);//枚举步数for(int i = 0; i < 100; i ++){if(a[11]){if(id(y - i) == x) //向上按i次ans = min(ans, i);else if(to(y - i)) //可以到一个频道 + 向上i次ans = min(ans, to(y - i) + i);}if(a[12]){if(id(y + i) == x)//向下按i次
                {ans = min(ans, i);}else if(to(y + i))//到一个频道 + 向下i次ans = min(ans, to(y + i) + i);}}printf("%d\n", ans);}return 0;
}

比赛时写的挫B代码:

View Code

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int a[15];
int x, y;
int cnt, ans;int main()
{int t;scanf("%d", &t);while(t --){ans = 110;scanf("%d%d%d%d", &a[1], &a[2], &a[3], &a[11]);scanf("%d%d%d%d", &a[4], &a[5], &a[6], &a[12]);scanf("%d%d%d", &a[7], &a[8], &a[9]);scanf("%d%d", &a[10], &a[0]);scanf("%d%d", &x, &y);int cur, ty, by;bool ok = false;if(a[11]){ok = true;if(y < x){cnt = y + 99 - x;ans = min(cnt, ans);}else{cnt = y - x;ans = min(cnt, ans);}}if(a[12]){ok = true;if(y < x){cnt = x - y;ans = min(cnt, ans);}else{cnt = x + 99 - y;ans = min(cnt, ans);}}if(y < 10){if(a[y]){cnt = 1;if(cnt < ans) ans = cnt;ok = true;}else{cur = y;if(a[11]){while(cur --){if(a[cur]){cnt = y - cur;if(cnt < ans) ans = cur;ok = true;break;}if(cur == -1) cur = 99;if(cur >= 10){if(!a[10]) break;ty = cur / 10, by = cur % 10;if(a[ty] && a[by]){ok = true;cnt = 3;cnt += (y + 99 - cur);if(cnt < ans) ans = cnt;}}}}cur = y;if(a[12]){while(cur ++){if(a[cur]){cnt = cur - y;if(cnt < ans) ans = cur;ok = true;break;}if(cur == 100) cur = 0;if(cur >= 10){if(!a[10]) break;ty = cur / 10, by = cur % 10;if(a[ty] && a[by]){ok = true;cnt = 3;cnt += (cur - y);if(cnt < ans) ans = cnt;}}}}}}else{ty = y / 10, by = y % 10;if(a[ty] && a[by]){cnt = 3;ans = min(cnt, ans);ok = true;}else{cur = y;if(a[11]){while(cur --){if(cur > 0)}}}}}}

E:奇妙的图案

计算几何,暂时先不搞。

F:Metric    Matrice

判断一个矩阵是不是最短路径的矩阵。是的话输出”0“,否则看违反了下哪条规则就输出几,遍历五遍矩阵就可以了。

A distance matrix a[i][j] is a metric if and only if
    1.    a[i][i] = 0
2,    a[i][j]> 0    if i != j
    3.    a[i][j] = a[j][i]
4.    a[i][j] + a[j][k] >= a[i][k]   i != j != k

#include <stdio.h>
#include <string.h>
#include <stdlib.h>const int MAXN = 35;
int a[MAXN][MAXN];
int n;int judge()
{for(int i = 0; i < n; i ++){for(int j = 0; j < n; j ++){if(a[i][i] != 0)return 1;}}for(int i = 0; i < n; i ++){for(int j = 0; j < n; j ++){if(i == j) continue;if(a[i][j] <= 0)return 2;}}for(int i = 0; i < n; i ++){for(int j = 0; j < n; j ++){if(a[i][j] != a[j][i])return 3;}}for(int i = 0; i < n; i ++){for(int j = 0; j < n; j ++){for(int k = 0; k < n; k ++){if(i == j || j == k || i == k) continue;if(a[i][j] + a[j][k] < a[i][k])return 4;}}}return 0;
}int main()
{int t;scanf("%d", &t);while(t --){scanf("%d", &n);for(int i = 0; i < n; i ++)for(int j = 0; j < n; j ++)scanf("%d", &a[i][j]);printf("%d\n", judge());}return 0;
}

G: Divideing   Jewels

给出权值从1到10的物品的各自的数目,然后问是否能平均分给两个人,使得两个人拿到的物品的总价值相等。首先判断所有物品的总价值是不是偶数,是偶数

的话再看能不能将这些物品分配到一个人手里,使得他获得的价值是总价值的一半。可以转化成多重背包问题,知道了物品的价值和数目,我们可以将物品的体积

设成和它的价值相同,然后用一个总价值一半体积的背包来装这些物品,看最终获得的最大价值是不是等于它的体积。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
const int MAXN = 100005;
int a[15], f[MAXN], V;void ZeroOnePack(int F[], int C, int W)
{for(int v = V; v >= C; v --)F[v] = max(F[v], F[v - C] + W);
}void CompletePack(int F[], int C, int W)
{for(int v = C; v <= V; v ++)F[v] = max(F[v], F[v - C] + W);
}void MultiplePack(int F[], int C, int W, int M)
{if(C * M >= V){CompletePack(F, C, W);return;}int k = 1;while(k < M){ZeroOnePack(F, k * C, k * W);M -= k;k <<= 1;}ZeroOnePack(F, C * M, W * M);
}int main()
{int t = 0;while(true){int total = 0;for(int i = 1; i <= 10; i ++){scanf("%d", &a[i]);total += a[i] * i;}if(total == 0) break;++ t;if(total & 1)printf("#%d:Can't be divided.\n", t);else{int target = total >> 1;memset(f, 0, sizeof f);V = target;for(int i = 1; i <= 10; i ++){MultiplePack(f, i, i, a[i]);}if(f[target] == target){printf("#%d:Can be divided.\n", t);}elseprintf("#%d:Can't be divided.\n", t);printf("\n");}}return 0;
}

H: Interesting Punch-Bowl

神题,貌似当时他们省赛没人过,但是被斌牛搞定了。

转载于:https://www.cnblogs.com/Yu2012/archive/2012/10/05/2712353.html

国庆七天乐 Day5相关推荐

  1. 国庆七天乐,要猛! ——经典迷宫问题

    目录 前言 思路 一.先创建迷宫 代码演示 输出效果为 二.在方法中使用递归回溯思想解决鼠鼠出迷宫 演示 三.代码 + 结果演示 输出结果 四.更改路线后再次尝试 五.测试回溯现象 总结 前言 迷宫题 ...

  2. 国庆七天乐,写博也快乐之小程序个人中心精美样式分享(登录、天气功能、天气动态背景变换、iconfont阿里巴巴、个人中心代码演示)

    hello,大家国庆快乐~今天是国庆节第三天啦,你有好好学习吗?

  3. 国庆七天乐——第一天

    20171001 所学内容:分治倍增,搜索模拟,位运算+考试 [时间复杂度] 表示运行时间的增长趋势 T(N)=T(N/2)+O(1)  二分查找 T(N)=2*T(N/2)+O(1) 线段树的节点个 ...

  4. 国庆七天乐——第三天

    2017102 [[动态规划]] [基础内容] 状态设计:往往是观察在搜索过程中需要用到的参数,所表 示的含义往往是"最大"."最小"."方案总数&q ...

  5. 国庆七天乐 Day7

    今天做的是湖南省2010年省赛题,悲催的只出了四题...今年省赛堪忧! 先做Codeforce去了... A:汽水瓶 有这样一道智力题:"某商店规定:三个空汽水瓶可以换一瓶汽水.小张手上有十 ...

  6. 国庆七天乐,写博也快乐之微信小程序天气预报+根据天气自动变换背景图实战(使用和风天气API)

    hello,大家好,这里是X大魔王,先提前祝各位国庆节快乐

  7. 【20191001】国庆七天长假安排

    [20191001]国庆七天长假安排 1. 作息时间表 2. 七天目标 (1)学习:将 Androi Audio 模块 从上层Java apk 到 kernel底层硬件 整个流程学懂 (2)锻炼:全身 ...

  8. 国庆七天假期就剩下最后一天了

    国庆七天假期就剩下最后一天了,抽空赶一下代码.原计划假期可以多花点时间优化一下框架代码,最终只完成了一小半,虽然有些遗憾,但是相对这个假期的收获,还是非常值得. 回顾整个假期,有几点收获: 一个人用心 ...

  9. 【2018 国庆雅礼 NOIP 培训】OI七天乐

    DAY 0 早上专门去了趟学校陪某人跑了八百决赛,第六还行,浪了一会儿见了pushinl一块吃了饭然后开车去运城,睡了一觉起来就到了qwq,在关公机场坐了一会儿登机去长沙,睡了一会儿起来吃了点东西聊了 ...

最新文章

  1. easy-mock写的一个简单的模拟二页的反馈
  2. ajax无刷新方式对form表单进行赋值!
  3. php5.6.30环境报错Call to undefined function ImageCreate() 编译安装 gd库
  4. 计算机学院志愿公益活动,计算机学院开展学雷锋主题公益活动
  5. Android开发笔记1之HelloWorld
  6. 看贴回帖 感受与感动
  7. python复杂代码示例_6 个例子教你重构 Python 代码
  8. Python标准库——走马观花
  9. redis持久化(persistence)
  10. 服务器ghost备份后无法进入系统还原,ghost恢复后,系统不能启动的问题
  11. 【渝粤题库】国家开放大学2021春2411中国现代文学题目
  12. .netcore2.2 windows发布IIS 服务器配置 0x8007000d
  13. C++:endl的作用
  14. html仿微信语音功能案例,html5聊天案例|趣聊h5|仿微信界面聊天|红包|语音聊天|地图...
  15. 怎么直接压缩图片?好用的图片压缩工具推荐
  16. 一开机checkingmedia_电脑开机出现checking media怎么办?
  17. 自动挂机打码赚钱是真的么?一美女自述骗局内幕
  18. css和html是什么关系,css是什么,CSS和HTML有什么关系
  19. html制作动态八卦图源码
  20. idea报错找不到符号

热门文章

  1. 博客园出现了奇怪的cookie问题
  2. Bit-Scalable Deep Hashing with Regularized Similarity Learning for Image Retrieval and Person Re-ide
  3. PostgreSQL数据库数组相似度计算
  4. 软件设计中的一些原则
  5. 软件设计原则——里氏代换原则
  6. 用python openpyxl合并多个excel文件
  7. SQL Server2019数据库查询所有数据库名、表名、表结构、表字段、主键方法演示,执行sql提示对象名‘user_tab_columns‘、 ‘user_cons_columns‘ 无效问题解决
  8. 国产化人大金仓数据库转库工具:oracle12c数据库转kingbase8.6人大金仓数据库实例演示
  9. C#委托及事件 详解(讲得比较透彻)
  10. Simulink仿真 第九节 时间延迟模块