2020 BNUZ 国庆欢乐赛 题解
目录
- A编程从这里开始
- B维恩牌
- C杰哥的崩三咸鱼生活
- D顺时针还是逆时针?
- E黑摸仙wgc爱吃肠粉
- F杯口朝上
- G对称美
- H小兔子下崽仔
- I网络巨人在线锤人
- J无所不知cwj
- K寻找福建人
A编程从这里开始
三个数相加
套着模板改一下就可以过
#include<stdio.h>
int main()
{int a,b,c,n;scanf("%d",&n);for(int i=1 ; i<=n ; i++){scanf("%d %d %d",&a,&b,&c);printf("Case #%d:\n%d\n" ,i ,a+b+c);}return 0;
}
B维恩牌
由规则可知
一方打出4或者双方打出同样的牌,即平局
3克制1
2克制1
3克制2
使用很多if else也行,就是有点麻烦
#include <stdio.h>
int main(){int t;int a,b;scanf("%d",&t);for(int i = 1;i <=t;i++){int ans = -1;scanf("%d %d",&a,&b);if(a == b || a == 4 || b == 4)ans = 0;else if((a == 1 && b == 3) || (a == 2 && b == 1) || (a == 3 && b == 2))ans = 1;printf("Case #%d:\n%d\n",i,ans);}
}
C杰哥的崩三咸鱼生活
根据题意
分两种情况
可以算是签到题之一了
#include<stdio.h>
int main()
{int t;scanf("%d",&t);for(int i=1 ; i<=t ; i++){int h,u,s,a,d;scanf("%d %d %d %d %d",&h,&u,&s,&a,&d);printf("Case #%d:\n",i);if(a >= d){printf("%.2lf\n",h*0.05+u*0.05+a*0.4+s*0.3+d*0.2);}else{printf("%.2lf\n",h*0.05+u*0.05+d*0.4+s*0.3+a*0.2);}}
}
D顺时针还是逆时针?
计算几何基础题,利用向量叉积判断是顺时针还是逆时针
知道了数学公式就会容易很多
x1 * y2 - x2 * y1 > 0的话为逆时针,<0为顺时针
#include<stdio.h>
int main(){int T,x1,x2,y1,y2,Ax,Ay,Bx,By,Cx,Cy,cas = 0;scanf("%d",&T); while(T --){scanf("%d%d%d%d%d%d",&Ax,&Ay,&Bx,&By,&Cx,&Cy);x1 = Bx - Ax;y1 = By - Ay;x2 = Cx - Bx;y2 = Cy - By;if((x1 * y2) - (x2 * y1) > 0) printf("Case #%d:\nNO\n",++cas);else printf("Case #%d:\nYES\n",++cas);}return 0;
}
E黑摸仙wgc爱吃肠粉
给定一开始n个肠粉的序数,通过m次将x、y号肠粉交换,输出最终的肠粉顺序
主要就是交换,看样例更容易读懂题意
可以用异或进行操作,但要注意相同的数字
#include <stdio.h>
int main(){int t;int n,m;int x,y;scanf("%d",&t);for(int i = 1;i <= t;i++){int num[110];scanf("%d %d",&n,&m);for(int j = 1;j <= n;j++){scanf("%d",&num[j]);}int temp = 0;while(m--){scanf("%d %d",&x,&y);temp = num[x];num[x] = num[y];num[y] = temp;}printf("Case #%d:\n",i);for(int j = 1;j <= n;j++){printf("%d ",num[j]);}printf("\n");}
}
F杯口朝上
给n个杯口朝上的杯子,有m个人,第m个人将第m倍数的杯子翻转,求最后杯口朝上的杯子有哪些
#include<stdio.h>
int main(){int num[200];int t, x = 1;int n, m;scanf("%d", &t);while(t--){int q = 0;scanf("%d %d", &n, &m);for(int i = 0; i <= n; i++){//num数组存储被反转的次数,这里是初始化num[i] = 0;}for(int i = 1; i <= m; i++){//人for(int j = 1; j <= n; j++){//杯子if(j % i == 0){num[j]++;}}}printf("Case #%d:\n", x++);for(int i = 1; i <= n; i++){if(num[i] % 2 == 0){//如果反转的次数是偶数次,那杯口朝上,输出q++;printf("%d ", i);}}if(q == 0){//没有一个杯口是朝上的,那就输出-1printf("-1");}printf("\n");}
}
G对称美
简单字符串判断回文
方法不少,可以用一个数组储存倒序,然后判断和原来的字符串是不是一样,也可以用下面的方法
#include<stdio.h>
#include<string.h>
int a[100],b[100][2];
int main()
{int t;scanf("%d",&t);for(int i=1;i<=t;i++){getchar();//吃掉换行,不然换行符会被scanf接收char cb[1000];scanf("%s",cb);int ans=1;for(int j=0;j<strlen(cb);j++){//strlen(cb)if(cb[j]!=cb[strlen(cb)-1-j]){//第一位和最后一位比较,第二位和倒数第二位比较...依次进行下去ans=0;}}printf("Case #%d:\n",i);if(ans==1)printf("YES\n");else printf("NO\n");}
}
H小兔子下崽仔
某个月兔子的数量=上个月兔子数+这个月出生的兔子数
这个月出生的兔子数=上上个月的兔子数(根据题意可知此时且这个月的兔子全是上上个个月的兔子生的,
因为上上个月的兔子是刚好到这个月所有兔子都成熟的,所以可以理解为这个月的新生兔子是上上个月的兔子数量)。
写成递推公式就是:f(n)=f(n-1)+f(n-2).
其实就是一个斐波那契数列
代码的话
1:可以一开始定义一个数组,把每个月的兔子数都存进去,最后然后通过索引输出n个值。
2:也可以每次输入一个月份后,用两个变量(三个也行)从头迭代到该月份,然后输出值。
第一种方法的代码:
#include<stdio.h>
#define LASTSUBSCRIPT 40int main(){int a[45],T;a[1]=1;a[2]=1;
// int a[45]={0,1,1};for(int temp = 3;temp <= LASTSUBSCRIPT;temp++)a[temp] = a[temp-2] + a[temp-1];while(~scanf("%d",&T)){for(int T1=1;T1<=T;T1++){int n;scanf("%d",&n);printf("Case #%d:\n%d\n",T1,a[n]);}}return 0;
}
第二种方法
#include<stdio.h>
int main(){int T;while(~scanf("%d",&T)){for(int T1=1;T1<=T;T1++){int n,a=1,b=1,step=2;//a,b用于迭代。step是计数器 scanf("%d",&n);while(n>2){//如果输入是前两个月则跳过循环,否则进入while死循环 a=a+b;step++;if(step==n)break;b=b+a;step++;if(step==n)break;}if(n<3)printf("Case #%d:\n%d\n",T1,1);else if(step%2==1)printf("Case #%d:\n%d\n",T1,a);else//if (step%2==0) printf("Case #%d:\n%d\n",T1,b);}}return 0;
}
I网络巨人在线锤人
依据题意,
让数组下标从1开始,按照下标求和
用数组存数据,第一个数组a[i]存每个人的距离,第二个数组b[j]存第几个人。想求总共距离,就把a[b[j]]相加即可。
#include<stdio.h>
int main()
{int t,n,m,sum;int a[100],b[100];scanf("%d",&t);int cnt = 1; while(t--){int sum = 0;scanf("%d %d",&n,&m);for(int i = 1; i <= n; i++){scanf("%d",&a[i]); }for(int j = 1; j <= m; j++){scanf("%d",&b[j]);sum += a[b[j]];}printf("Case #%d:\n",cnt++);printf("%d\n",sum);}return 0;
}
J无所不知cwj
三种情况:
- 全是单选
- 有单选有多选
- 全是多选
全是单选的话,需要 n*a 元
单选和多选的话,需要 (n/m)*b + (n%m)*a 元
全部多选的话,如果n%m刚好等于0,那么包括在上面第二种情况中了,如果是n%m不等于0,我们可以用 (n/m+1)*b来代表
在任何情况下,我们把这三种情况分别输出再进行比大小,最小的即是结果
#include <stdio.h>
int main()
{int t;scanf("%d",&t);int n,m,a,b;for(int i=1 ; i<=t ; i++){scanf("%d %d %d %d",&n,&m,&a,&b);printf("Case #%d:\n",i);int ans1 = n*a;int ans2 = n/m*b + (n%m)*a;int ans3 = (n/m+1)*b;//三个数选出最小值int ans = ans1;if(ans > ans2) {ans = ans2;}if(ans > ans3) {ans = ans3;}printf("%d\n",ans);}
}
K寻找福建人
题目有点难读
注意行数和列数的不同
样例1:
5列
前三行用黑科技检查完3x3=9
4和5行使用单个的检测3x1=3
共9+3=12
样例2同理
#include<stdio.h>
int cb[1000000];
int main()
{int n;scanf("%d",&n);for(int i=1 ; i<=n ; i++){int t,k;int hp = 0;scanf("%d %d",&t,&k);for(int q=0;q<t;q++){scanf("%d",&cb[q]);}int cut = t;//cut表示即将扫描的行的人数 while(1){if(k<=cut){//>=k,就用扫描一行 for(int j=0;j<t;j++){//使每一列的人数减少1 if(cb[j]==0){continue;}cb[j]--;if(cb[j]==0){//下一行剩下的人数减少1 cut--;}}hp+=k;//耗费的成本增加k }else{break;//剩下的情况都需要一个一个检查,就退出循环 }}for(int p=0;p<t;p++){ hp+=cb[p];}printf("Case #%d:\n%d\n",i,hp);}
}
2020 BNUZ 国庆欢乐赛 题解相关推荐
- 2019BNUZ_ACM国庆欢乐赛题解
目录 题目来源 : A.小沛的暑假安排 B.nsy上幼儿园 C.nsy上小学 D.怡姐的游戏 E.如风般奔跑 F.cjb找朋友 G. 黑魔仙wgc的攻击 H. 皓洲喜欢经纬线 I. 小枫买车 J. 单 ...
- 北师大珠海分校2017国庆欢乐赛题解
我都老了还让我写这种题解. 约翰·洛吉·贝尔德 每次开k个电视,需要这k个电视的色彩都不一样 每种色彩需要一根信号源 现在问至少需要多少种信号源 那么我们可以找k个电视.他们都只用1个信号源,有不同颜 ...
- 2020 BNUZ 新生现场赛 题解
文章目录 组合技 站好队 我不看月亮 记忆大王李华 用来签到的打牌游戏 你会看天气预报吗 小明的派对 茅亭里看雨 切西瓜 盛夏白瓷梅子汤 秉烛夜游 一醉方休 组合技 此题将n-1个元素加1可以等价于 ...
- 北师大珠海分校2016国庆欢乐赛题解
Amazing Score 这题长得跟基本的作业题很像,每次输入12个数,奇数位为学分a,偶数位为分数b,总的加权平均分为,然后当b小于60的时候特判一下,整组分数记为0即可 #include< ...
- Comet OJ - 2019国庆欢乐赛(赛后整理)
Comet OJ - 2019国庆欢乐赛(赛后整理) 比赛链接:传送门 PS: 做题失误: A题wa了好久不知道为什么,后来才知道乘法爆long long了 B题思路错了,应该在想清楚些. 比赛过程中 ...
- Comet OJ 2019 夏季欢乐赛题解
Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...
- BUU-ACM国庆新人欢乐赛题解
A 模拟签到题 判断平年还是闰年,然后输出365.366即可. code #include <stdio.h> int main() {int x;scanf("%d" ...
- BNUZ-ACM 2018国庆新生欢乐赛题解
目录 A.三角恋 B.台风闲聊 C.kuyee买奶茶 D.法师Knight可能很强大 E.看我一只穿云箭 F. 兔叽先生和长颈鹿女士 G.面积面积 H.所有人!都别过来! I.Everduo与星澈的合 ...
- 2022.10.1 NYIST 国庆欢乐进行曲题解
目录 A.唱!练习时长两年半的acmer练习生歌颂国庆!!! B. 跳!鸡哥想要去鸡场!!! C.rap D.篮球!妈妈我要学篮球! E.速速与董学姐击剑 F.关于比赛提前半小时封榜这件事 G. 10 ...
最新文章
- 关于Eclipse插件开发(一)
- java poi excel读写_JAVA-POI操作Excel读写
- Servlet获取Web应用程序的初始化参数
- json schema如何约束为小数_如何使用jsonschema进行接口响应断言
- java isight zmf_isight集成catia和abaqus,nastran流程详解
- 大数据学习(07)--MapReduce
- python字典导入mongodb_python连接mongoDB进行数据提取→常用操作指南
- Element ui select同时获取value和label的值
- 南邮linux期末考试试题,南邮操作系统试卷及答案.doc
- POJ 2528 Mayor's posters (离散化和线段树使用)
- 安装dubbo管理控制台
- sqlserver导出表结构到excel
- python做什么生意好找_寻找python项目来提高你的技能
- ngrok跟小米球的使用
- 华为手机鸿蒙系统手机_华为推出鸿蒙系统2.0 明年华为手机将适配支持
- 第八章——ICellStyle单元格样式操作
- 2、【易混淆概念集】-前三章 2 净现值 NPV 内部报酬率 IRR 投资回报率 ROI
- windows立方体桌面
- 最新版gg服务器框架安装器,GG服务框架安装器
- Springboot中引入本地jar包,并通过maven打包(解决maven丢包的问题)
热门文章
- rmm 一个替换rm 的工具
- python3 规则引擎_Ilog、Drools、Jess规则引擎的Rule Language 对比
- 数据结构(七)高级排序算法——归并、快速排序
- TensorFlow学习笔记12----Creating Estimators in tf.contrib.learn
- android studio 屏幕翻转
- 噪声分析基础(公式)知识
- php钓鱼怎么使用方法,还不会用小药钓鱼的朋友们,请往这里看看!
- 歪果小姐姐教你用代码画画,真大佬!
- 记账之后的收支明细,如何以收支图表的形式呈现
- excel 公式 java_Java读取、创建Excel的公式