题目链接:http://newoj.acmclub.cn/contests/1484
还是太菜,好多题目还是不会。

文章目录

  • 1841.超级密码
  • 1842.斗地主
  • 1843.考研
  • 1844.自动签到机
  • 1845.声之形
  • 1848.秋游
  • 1849.春游
  • 1852.奇妙糖果屋

1841.超级密码

题目描述
小明今年9岁了,最近迷上了设计密码!今天,他又设计了一套他认为很复杂的密码,并且称之为“超级密码”. 说实话,这套所谓的“超级密码”其实并不难:对于一个给定的字符串,你只要提取其中的数字,然后连在一起构成一个整数,再乘以小明的幸运数字513,就是解密后的结果了~比如,字符串“ads2d4,122”,提取后的整数是24122,然后乘以513,就能得到解密后的结果:12374586.注:题目保证解密后的结果在32位无符号整数范围.

输入描述
输入首先包括一个正整数N,表示有N组测试用例. 每组数据占一行,包含一个长度不超过30的字符串.

输出描述
请根据题目要求输出解密后的结果,每组数据输出一行.

样例输入
2
ads2d4,122
0023asdf2AA90
样例输出
12374586
11947770

#include <stdio.h>
#include <string.h>int main(void)
{int n, len, base, ans;char str[35];scanf("%d", &n);while (n--) {base = 1;ans = 0;scanf("%s", str);len = strlen(str);for (int i = len - 1; i >= 0; i--) {if (str[i] >= '0' && str[i] <= '9') {ans += base * (str[i] - '0');base *= 10;}}ans *= 513;printf("%d\n", ans);}return 0;
}

1842.斗地主

题目描述
alvin自从开了游乐园之后,经营的风生水起,没过多久就收回了成本.为了创建一个高端的娱乐帝国,alvin打算再开一个赌场,并且里面只会有alvin认为最好玩的游戏–斗地主. 开张第一天便生意火爆,有n个人来赌场玩斗地主.然而在斗地主界有一个规矩,那就是同一桌的三个人带的筹码的异或值为0,才能使参与游戏的三个人都感到愉快,并且称这一桌为“nice round”. 比如,若一共有三个人,所携带的筹码数分别为1,2,3,则 = 0,这便是一个“nice round”.若分别携带的筹码为1,2,4,则不是. 现在alvin的有个问题,这n个顾客可以组成多少个不同的“nice round”呢? Input

输入描述
有多组数据输入. 每组数据第一行包含一个整数n,代表有n个顾客. 接下来一行每行包含n个非负整数,代表n个顾客所携带的筹码数,其中ai代表第i个顾客的筹码数.

数据规模:
对于100%的数据,保证ai <= 500;
对于40%的数据,保证n <= 200;
对于100%的数据,保证n <= 5000.

输出描述
对于每组数据,输出一个整数,代表能够产生的不同的nice round的组数.每组一行.
样例输入
3
1 2 3
4
1 1 2 3
样例输出
1
2

n <= 5000,如果直接枚举复杂度为O(n^3),会TLE。因为ai是小于500的,可以用大小为500的数组来记录每个数字出现的次数。
还需要另外判断0和两个相同的数,三个0的情况
最后再枚举三个不同数的情况
特别需要注意的是==的优先级大于^,所以要加括号

#include <iostream>
#include <cstring>
using namespace std;
const int N = 5e3 + 5;
typedef long long ll;ll a[N];//记录每个数出现的次数 int main(void)
{ll n, t, ans;while (cin >> n){ans = 0;memset(a, 0, sizeof a);for (int i = 0; i < n; i++) {cin >> t;a[t]++;}//0和两个相同的数 if (a[0])for (int i = 1; i <= 500; i++)if (a[i] >= 2)ans += a[i] * (a[i] - 1) / 2 * a[0];//三个0 if (a[0] >= 3)ans += a[0] * (a[0] - 1) * (a[0] - 2) / 6;//三个不同的数 for (int i = 0; i <= 500; i++)for (int j = i + 1; j <= 500; j++)for (int k = j + 1; k <= 500; k++)if ((i ^ j ^ k) == 0)//很坑,注意==的优先级大于^,要加括号 ans += a[i] * a[j] * a[k];cout << ans << endl;}return 0;
}

1843.考研

题目描述
今天参加比赛的同学,我想以后准备考研的一定有不少.以河北某高校为例, 一共要考4门,分别是:数学(满分150)、英语(满分100)、政治(满分100)、专业课(满分150). 不过,你知道考研分数线的这个特点吗——不仅总分要过分数线,单科也必须过线! 假设某年度该校研究生录取的分数线是这样的:数学和专业课单科分数线是85(含), 英语和政治单科分数线是55(含),总分分数线是305(含).并且规定——在单科和总分均过线的前提下, 总分370分(含)以上的是公费生,否则是自费生.现在告诉你一些考生的分数,你能判断他们的录取情况吗?

输入描述
输入数据第一行是一个正整数C(C<=100),表示有C组测试用例.
接下来C行,每行4个整数,分别表示一位考生的数学、英语、政治和专业课成绩.
输出描述
输入数据第一行是一个正整数C(C<=100),表示有C组测试用例
接下来C行,每行4个整数,分别表示一位考生的数学、英语、政治和专业课成绩.
样例输入
3
100 80 85 120
90 60 65 110
140 50 75 135
样例输出
A
B
C

这道题题目中描述的并不清楚,按样例来看就是分情况,分成不能录取的,自费生,公费生。

#include <stdio.h>int main(void)
{int c, shu, ying, zheng, zhuan;scanf("%d", &c);while(c--) {scanf("%d%d%d%d", &shu, &ying, &zheng, &zhuan);if (shu < 85 || ying < 55 || zheng < 55 || zhuan < 85 || shu + ying + zheng + zhuan < 305)printf("C\n");else if (shu + ying + zheng + zhuan < 370)printf("B\n");elseprintf("A\n");}return 0;
}

1844.自动签到机

题目描述
今天是报到日,在排了一下午的队之后,终于轮到了查尔明签到。
这里使用了一种叫做“自动签到机”的高科技,在签到时,选手需要输入验证码来进行确认。这个系统每次会给出T张10*10的黑白图片,每张的黑色部分形成了“0”、“1”、“8”三个数字中的一种,而且出于人性化设计,它不会让用户眼花,不会把数字写得不规范,也不会在一张图片中放入两个以上的数字,更不会去帮用户治疗多年的颈椎病.可是就算这样,查尔明还是不想去识别,因为他曾经写过能自动识别验证码的程序.不幸的是,当查尔明打开笔记本的时候,却怎么也找不到那个程序了. 亲爱的同学,你能帮助查尔明完成签到吗?
输入描述
输入文件第一行包含一个正整数T(T≤15),表示图片的张数. 接下来T个部分,每个部分是一个10*10的矩阵(不含空格),其中“_”表示白色,“#”表示黑色.
输出描述
输出文件包含T行,每行一个整数,其中第i行输出第i张图片上的数字.
样例输入

1
_____#____
____##____
___#_#____
__#__#____
_____#____
_____#____
_____#____
_____#____
__#######_
__________

样例输出
1

这道题类似于八连通求水洼数目的问题,就是要在矩阵内进行深搜,看最后深搜多少次能够搜索完整个矩阵,进而根据搜索次数判断数字是什么
因为数字有些是会接触到边框的,所以可以在外围再加一圈或者到边界之后移动到另一边。
菜死,一开始没有分清递归的字符,写反了

#include <stdio.h>
#include <string.h>char ma[15][15];
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};void dfs(int x, int y)
{ma[x][y] = '#';for (int i = 0; i < 4; i++) {int nx = x + dx[i];int ny = y + dy[i];if (nx >= 0 && nx < 12 && ny >= 0 && ny < 12 && ma[nx][ny] == '_')dfs(nx, ny);}
}int main(void)
{int t, ans;scanf("%d", &t);while (t--) {ans = 0;for (int i = 0; i < 12; i++)//第0行 ma[0][i] = '_';for (int i = 1; i < 11; i++) {//1-10行 ma[i][0] = '_';scanf("%s", ma[i] + 1);ma[i][11] = '_';} for (int i = 0; i < 12; i++)//第11行 ma[11][i] = '_';for (int i = 0; i < 12; i++)for (int j = 0; j < 12; j++) {if (ma[i][j] == '_') {dfs(i, j);ans++;}} if (ans == 1)printf("1\n");else if (ans == 2)printf("0\n");elseprintf("8\n");}return 0;
}

1845.声之形

题目描述
为了决定去哪个影院看《声之形》,小S和小T决定抛一次公平的1元硬币决定最终去哪儿.在以前,他们为了决定去哪个电影院已经抛掷了若干次,其中有a次正面向上和b次反面向上.而且约定了如果正面向上就是小S赢,否则是小T赢.现在告诉你他们以前抛掷的结果,请告诉小S,这次为了看《声之形》,他如愿去自己想去的电影院的概率是多少.

输入描述
输入数据第一行是一个正整数T,保证有T组测试数据,保证.T<=1e3 接下来一共T行,每行有两个正整数a,b,保证1<=a,b<=2^60.保证小S和小T想去的电影院不一致且抛掷结果只会出现正面向上或者反面向上.

输出描述
输出一行,表示小S赢的概率,精确到小数点后12位有效数字,你的答案必须和参考答案完全一致才算正确. 每次答案输出一行.

样例输入
1
999 999
样例输出
0.500000000000

拼手速题

#include <stdio.h>int main(void)
{long long t, a, b;scanf("%lld", &t);while(t--) {scanf("%lld%lld", &a, &b);printf("%.12lf\n", 0.5);}return 0;
}

1848.秋游

题目描述
秋天来了 不必为几片落叶流泪 也不必为秋风 而轻言感伤 享受秋天吧 享受那秋日阳光 享受菊花黄 享受桂花香 经过了连续多天紧张的第二阶段训练,教练又决定组织ACM集训队的N位同学一起去郊游. 为了方便郊游,活动地点提供了 B(≥N) 辆自行车供人租用,现在已知第 i位同学自己携带了 MiM_iMi​ 元,租用第 j 辆自行车的价格为 CjC_jCj​ 元. 就在大家忙着租车的时候,丁爸突然提出了一个问题考大家:假如规定每位同学只能用自己携带的钱租自行车(即:不允许借别人的钱),并且只允许为自己租车,你能计算出最多有多少位同学能够成功租车吗?

输入描述
输入数据第一行是一个正整数T,表示有T组测试数据. 每组数据的第一行包括2个正整数N和B,分别表示学生人数和自行车数量. 每组数据的第二行包含N个正整数MiM_iMi​,表示N位同学每人携带了MiM_iMi​元. 每组数据的第三行包含B个正整数CjC_jCj​,表示B辆自行车每辆车的租费. [数据范围] 1 <= T <= 100 1 <=n<=100, n <= B <= 100 1 <= m[i] <= 10001 <= c[i] <= 1000

输出描述
请输出能够成功租车的最多人数,每组数据输出一行.

样例输入
1
4 5
2 1 9 6
3 5 4 7 6
样例输出
2

分别把学生的钱数和车子的价格从小到大排序,再用两个下标i和j依次进行比较大小即可,如果可以租,那么就都自增1。如果不可以租,那么钱数的下标就自增1。
利用到了贪心的思想,因为从小到大排序,此时的m[i]是目前最少的钱数,c[i]是目前最低的租金。这样匹配如果能够匹配上,表示用最少的钱数租到了车子,如果不能匹配上,表示目前的m[i]连最便宜的车子都无法租到,所以需要右移换较多的钱去匹配,这样得到的是最优结果。

#include<stdio.h>
#include<algorithm>
using namespace std;int main(void)
{int t,n,b,m[105],c[105],i,j,ans;scanf("%d",&t);while(t--){ans=0;scanf("%d%d",&n,&b);for(i=0;i<n;i++)scanf("%d",&m[i]);for(i=0;i<b;i++)scanf("%d",&c[i]);sort(m,m+n);sort(c,c+b);i=0;j=0;while(i<n&&j<b){if(m[i]>=c[j]){ans++;i++;j++;}else if(m[i]<c[j])i++;}printf("%d\n",ans);}return 0;
}

1849.春游

题目描述
春天来了 大地万物复苏 一切都是生机勃勃 门前的这簇绿 和远处的那一抹红 都充满了诗意 是的 春天就是这样 给人无限的希望 经过了连续多天紧张的训练,教练决定组织ACM集训队的N位同学一起去郊外感受春天的气息. 为了方便郊游,活动地点提供了 B(≥N) 辆自行车供人租用,现在已知第 i位同学自己携带了元,租用第 j 辆自行车的价格为元. 就在大家忙着租车的时候,教练突然提出了一个问题考大家:在允许同学们相互借钱的前提下,你能计算出最多有多少位同学能够成功租车吗?

输入描述
输入数据第一行是一个正整数T,表示有T组测试数据. 每组数据的第一行包括2个正整数N和B,分别表示学生人数和自行车数量. 每组数据的第二行包含N个正整数MiM_iMi​,表示N位同学每人携带了MiM_iMi​元. 每组数据的第三行包含B个正整数CjC_jCj​,表示B辆自行车每辆车的租费. [数据范围] 1 <= T <= 100 1<=n<=100, n <= B <= 100, 1 <= M[i] <= 1000, 1 <= c[i] <= 1000

输出描述
请输出能够成功租车的最多人数,每组数据输出一行

样例输入
1
4 5
2 1 9 6
3 5 4 7 6
样例输出
4

可以相互借钱,可以把所有的钱都凑在一起,然后把每辆车子所需的费用从小到大排序,用所有的钱依次减去每辆车子的费用,直到剩余的费用小于车子的费用即可。

#include<stdio.h>
#include<algorithm>
using namespace std;int main(void)
{int t,n,b,m,sum,ans;int c[105];scanf("%d",&t);while(t--){sum=0;ans=0;scanf("%d%d",&n,&b);for(int i=0;i<n;i++){scanf("%d",&m);sum+=m;}for(int i=0;i<b;i++)scanf("%d",&c[i]);sort(c,c+b);for(int i=0;i<n;i++){if(sum>=c[i]){sum-=c[i];ans++;}elsebreak;}printf("%d\n",ans);}return 0;
}

1852.奇妙糖果屋

题目描述
奇异王国里有很多奇怪的事物.比如奇怪的人(每个人都拥有一个智慧值),奇怪的商店… 这不,奇异糖果屋今天开业了,老板在门口拉上了“糖果送送送”的横幅来吸引顾客. 糖果的具体赠送方案为对于一个智慧值为x的人来说,他所能获得的糖果数量f(x)满足如下条件:
f(0) = 0,
f(2x) = f(x),
f(2x+1) = f(2x) + 1, 整天搞怪的小A带着朋友们闻讯而来,他想出了一个游戏,游戏的规则是这样的:每个人根据自己的智慧值拿到糖果后互相比较开心值,开心值最大的人即为胜者. 开心值的定义为除了自己以外其他所有人获得糖果数量的异或值. 但是小A只负责搞怪,目前已知每个人的智力值,聪明的你能否帮助他提前知道谁能获胜以及这个人的开心值为多少呢? 每个人按照给定顺序从1开始编号.如果有多个人的开心值相等,则编号最小的获胜.
输入描述
输入数据的第一行是一个整数T,表示测试实例的个数,保证T<=100. 每组输入数据占两行. 第一行为一个整数n,代表去糖果屋的人数。(1<=n<= 10^5) 第二行为n个整数,代表每个人的智力值 (1<=aia_iai​ <=10^9 ) 题目保证n>=50000的数据组数不超过10组.

输出描述
每组数据输出两个整数,依次表示获胜的人的编号以及他所获得的开心值,中间用空格隔开.每组一行.

样例输入
1
2
3 4
样例输出
2 2

每个人的糖果数即为其智力值二进制数中1的数目。
对于每个人的开心值,可以先算出所有人糖果数的异或值,最后再分别异或自己的糖果数即可。

#include<stdio.h>
#include<algorithm>
using namespace std;
const int N=1e5+5;typedef struct man
{int id,happy,num;
}man;
man arr[N];bool cmp(man a,man b)
{if(a.happy!=b.happy)return a.happy>b.happy;elsereturn a.id<b.id;
}int count(int num1)
{int ans=0;while(num1!=0){if(num1%2==1)ans++;num1/=2;}return ans;
}int main(void)
{int t,n,sum,zhi,all;scanf("%d",&t);while(t--){all=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&zhi);arr[i].id=i+1;arr[i].num=count(zhi);all^=arr[i].num;}for(int i=0;i<n;i++)arr[i].happy=all^arr[i].num;sort(arr,arr+n,cmp);printf("%d %d\n",arr[0].id,arr[0].happy);}return 0;
}

2017hbcpc(第一届河北省大学生程序设计竞赛)相关推荐

  1. 2017第一届河北省大学生程序设计竞赛题解

    超级密码 小明今年9岁了,最近迷上了设计密码!今天,他又设计了一套他认为很复杂的密码,并且称之为"超级密码". 说实话,这套所谓的"超级密码"其实并不难:对于一 ...

  2. 2020 年第一届辽宁省大学生程序设计竞赛

    2020 年第一届辽宁省大学生程序设计竞赛 A-组队分配 分析 代码 B-两点距离 分析 代码 C-轮到谁了? 分析 代码 F-最长回文串 分析 代码 G-管管的幸运数字 分析 代码 I-鸽子的整数运 ...

  3. 2018第二届河北省大学生程序设计竞赛题解

    icebound的账单 题目描述 icebound从小就有记账的习惯.又到了月末icebound统计资金状况的时候.icebound每个月除了不停的挥霍以外,有时他会良心发现,勤工俭学,因此会有一些微 ...

  4. 2020 年第一届辽宁省大学生程序设计竞赛 D.开心消消乐(点分治)

    题目 题解 wa了12发的点分治终于过了,就是xjb乱搞题-- 维护了六个量,(u到v的链上出现的第一种颜色col,col的次数cnt,最后一种链的颜色las,las的次数num,链的长度len,链的 ...

  5. 2018年第二届河北省大学生程序设计竞赛

    HBCPC2018 部分题解 Mex Query icebound的商店 Nim Game 神殿 跑图 520 icebound的账单 Beautiful Array Mex Query 题目描述: ...

  6. 第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem B. Nim Game-题解

    传送门 Problem A. Mex Query Problem B. Nim Game Problem C. icebound 的账单 Problem G. 520 Problem H. 神殿 Pr ...

  7. 第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem G. 520-题解

    传送门 Problem A. Mex Query Problem B. Nim Game Problem C. icebound 的账单 Problem G. 520 Problem H. 神殿 Pr ...

  8. 第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem H. 神殿-题解

    传送门 Problem A. Mex Query Problem B. Nim Game Problem C. icebound 的账单 Problem G. 520 Problem H. 神殿 Pr ...

  9. F-神殿-2018年第二届河北省大学生程序设计竞赛(位运算)

    icebound通过勤工俭学,攒了一小笔钱,于是他决定出国旅游.这天,icebound走进了一个神秘的神殿.神殿由八位守护者守卫,总共由 6464 64个门组成,每一道门后都有一个迷宫,迷宫的大小均为 ...

最新文章

  1. 汪劲:生命系统中的非平衡物理学
  2. 在虚拟机中安装LINUX
  3. 安装erlang没有bin文件夹_Centos7安装RabbitMQ(Centos6 此方案同样可行)
  4. 1147 Heaps
  5. 每日一题(13)—— #includefile.h 与 #include “file”的区别
  6. BiSeNet V2论文及源码
  7. Nodejs之view中的视图模板之——EJS模板语言,快速入门
  8. php sql查看本月记录,SQL Server 获取本周,本月,本年等时间内记录
  9. 小米10青春版跑分流出:搭载骁龙720G芯片 下周一见!
  10. 5种获取RSS全文输出的方法
  11. Kafka的安装部署(分布式部署安装)
  12. Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹
  13. 制作u盘winpe启动盘_u盘启动盘制作工具软件哪个好?
  14. 如何配置Web服务器?web服务器配置方法步骤
  15. 计算机丢失cxcore100.dll,cxcore100.dll
  16. 银行数字化转型导师坚鹏:数字化背景下BLM银行网点转型
  17. Scratch -> C++画图->信奥(C++)学习导航
  18. Ubuntu11.04中文输入法的安装(IBus-pinyin
  19. 在Python中使用Turtle库画“蜂窝状六边形”
  20. windows虚拟机的一些操作

热门文章

  1. 选择降薪45%,从互联网到国企
  2. mat2cell函数解析
  3. pvcreate出现错误:Device /dev/sdb1 not found (or ignored by filtering).
  4. 古筝几种遥指技法训练
  5. 变电站综合自动化系统
  6. MySQL学习之Statement对象
  7. 【OpenGL】鼠标控制旋转(四)
  8. 《大前端进阶 Node.js》系列 多进程模型底层实现(字节跳动被问)
  9. 共同战“疫” 哈啰出行多举措保障用户复工复产
  10. Android mk方式使用动态库和静态库