题目

  • 传球游戏
  • 黑白子(2)
  • 货车的速度(1)
  • 最高分与最低分之差
  • 分蛋糕
  • 换牛奶
  • 游戏组队
  • LEX
  • 赛马比赛
  • 萝卜保卫战

传球游戏

这道题最重要的地方是在数到第七个小朋友后,接下来是第一个小朋友,
那么我们可以对我们的数字除以7,剩下的余数就是报到的小朋友,要注意的是如果没有余数则是第七位小朋友

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char** argv) {int n;   cin>>n;if(n%7==0){cout<<"7";}else{cout<<n%7; }return 0;
}

黑白子(2)

题目告诉我们,每次都会增加3个黑子,减少3个白子,那么就等于黑子和白子 的差值每次都会少6,所以我们直接输出差值除以6即可

#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>using namespace std;int main() {int n, m;cin >> n >> m;cout << (n - m) / 6 << endl;return 0;
}

货车的速度(1)

一辆客车以88km/h的速度行驶了4h。在同样的时间内,一辆货车比客车少行驶了48km,那么货车行驶了88 * 4 - 48 km,因为一共行驶了4小时,所以货车速度是(88 * 4 - 48)/ 4

#include <iostream>
#include<math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(int argc, char** argv) {cout<<(88*4-48)/4;return 0;
}

最高分与最低分之差

这个题目考察的是遍历,首先我们先定义两个变量x,y,分别表示学生成绩的最低分和最高分
然后我们使用while或者for遍历学生们的成绩,如果大于最高分,我们用这个替换原来的最高分,如果小于最低分,我们用这个替换原来的最低分

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char** argv) {int n=10,i=1,a,x,m;cin>>a;m=a;x=a;while(i<=n-1){cin>>a;if(a>m){m=a;}if(a<x){x=a;}i=i+1;}cout<<m-x;return 0;
}

分蛋糕

题目意思是给我们n个蛋糕,要分给m个小朋友,同时我们要保证每个小朋友分到的蛋糕数量相等,如果无法相等,就从老师的k个蛋糕拿出一部分分给学生(不是k个都要给)

首先我们在每个小朋友分到蛋糕都相同的情况下,去分m个蛋糕,这时候每个小朋友可以分到m/n个,剩下m%n个蛋糕还没有分配,这时候我们需要从老师那里拿n-m%n个补齐,所以如果k≥n-m%n则可以,输出YES,否则不可以,输出NO。

#include<bits/stdc++.h>
using namespace std;int main(){int t;cin>>t;while(t--){int n,m,k;cin>>n>>m>>k;if(n%m==0||k>=m-(n%m))cout<<"YES\n";else cout<<"NO\n";}return 0;
}

换牛奶

题目意思比较简单,每次使用n个瓶子或者m个瓶盖,可以换取一瓶新牛奶,这里休息n个瓶子和m个瓶盖都可以换一瓶牛奶,而不是需要同时使用n个瓶子和m个瓶盖。
然后接下来要判断的就是什么时候输出"INF",如果n或者m等于1,或者n和m都等于2,这时候我们模拟一下就会发现可以一直换下去
对于我们普通情况。我们可以把瓶盖和瓶子有一个还可以兑换为条件,进行计算,模拟兑换的过程,从而得到答案


#include<iostream>
using namespace std;
int x, y, a, b;
int main(){int t;
cin >>t;while (t --) {cin >> x >> y >> a >> b;if(x<2 || y<2){printf("INF\n");continue;}int sum = 0;while (a / x || b / y) {int t1 = a / x;sum += t1, a %= x, a += t1, b += t1;int t2 = b / y;sum += t2, b %= y, b += t2, a += t2;}cout << sum << endl;}
}

游戏组队

首先题目大体意思是分差小于m的可以分在一组,问我们最多可以分几组,首先我们要注意每组的人是不可以有重复的.
然后我们进行一个排序,从头遍历,如果下一个人可以和这个人分到一组,我们把这两个人分为一组,计数加一。然后因为我们下一个人已经和和当前的分到了一组,所以我们要跳过下一个。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int n,m;int a[100001];
int t;
cin >>t;while(cin>>n>>m){for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n);int count=0;for(int i=0;i<n-1;i++){if(a[i+1]-a[i]<m){count++;i++;}}cout<<count<<endl;}
}

LEX

因为是对x任意次数操作,所以可以想到要是否存在一个数target 这个数 可以通过 数组中的一个数进行对x的几次操作而得来。那么target % x 这个数 在数组中一定是存在的。 所以我们可以储存每次插入数对x的余数,这个余数对x 操作可以配凑成一些数。现在只要统计余数的个数即可。如果当前的target 在数组中是没有数 可以 配凑而来的即 a[ 数组中的数 % x]> = 0,那么输出这个数即可。

#include<cstdio>
using namespace std;
int a[400005];
int main()
{int n, x;scanf("%d %d", &n, &x);int t = 0;while(n--){int m;scanf("%d", &m);a[m % x]++;while(a[t % x]){a[t % x]--;///此前的余数构成的数已经出现。t++;}printf("%d\n", t);}return 0;
}

赛马比赛

首先给定我们一个时间,我们是可以O(N)计算出当前还有多少只马存在的,其次很显然时间越长,场上马越少,很显然我们可以二分时间,使用二分答案的方法算出最短期间。

#include <bits/stdc++.h>
#define int long long
using namespace std;
pair<int,int> a[100005],b[100005];
int n,k;
bool check(int x)
{for(int i=1;i<=n;i++)b[i]={a[i].first+a[i].second*x,i};sort(b+1,b+n+1);int mn=n,ans=0;for(int i=n;i>=1;i--){if(mn>=b[i].second) ++ans;mn=min(mn,b[i].second);}return ans<=k;
}
signed main()
{cin >> n >> k;for(int i=1;i<=n;i++)cin >> a[i].first;for(int i=1;i<=n;i++)cin >> a[i].second;sort(a+1,a+n+1);int  l=0,r=2e9,ans=-1;while(l<=r){int mid=(l+r)/2;if(check(mid)) ans=mid,r=mid-1;else l=mid+1;}if(ans==-1) cout << "Never!";else cout << ans;return 0;
}

萝卜保卫战

状态压缩DP,具体做法看注释

#include <bits/stdc++.h>using namespace std;int n;
vector<int>Time;
vector<int>position;int solve() {int n = *max_element(position.begin(), position.end()) + 1;int t = *max_element(Time.begin(), Time.end());// 统计事件发生的时间和位置int occur[n][t];memset(occur, 0, sizeof(occur));for(int i = 0; i < Time.size(); ++i) {occur[position[i]][Time[i] - 1] = 1;}// 动态规划int f[n * t + 1][1 << t];memset(f, 0x3f, sizeof(f));f[0][0] = 0;for(int p = 0; p < n * t; ++p) {int i = p / t, j = p % t;for(int mask = 0; mask < (1 << t); ++mask) {if(mask & 1)  { // 当前时刻已经有保护罩,不能继续放置f[p + 1][mask >> 1] = min(f[p + 1][mask >> 1], f[p][mask]);} else {// 枚举保护罩开启时间 len, 注意保护罩不能同时开启两个for(int len = 1, nmask1 = mask, nmask2 = mask; j + len <= t && (mask & (1 << (len - 1))) == 0; ++len) {// 1. 从时刻 j 开始,位置 i 开启时长为 len 的单护罩nmask1 = nmask1 >> 1;f[p + len][nmask1] = min(f[p + len][nmask1], f[p][mask] + len + 1);// 2. 从时刻 j 开始,位置 i 和位置 i+1 开启时长为 len 的联合护罩nmask2 = (nmask2 >> 1) | (1 << (t-1));f[p + len][nmask2] = min(f[p + len][nmask2], f[p][mask] + len + 2);}// 当前时刻不开启护罩if(!occur[i][j]) {f[p + 1][mask >> 1] = min(f[p + 1][mask >> 1], f[p][mask]);}}}}return f[n * t][0];
}int main(){cin >> n;for (int i = 0; i < n; i ++) {int x;cin >> x;Time.push_back(x);}for (int i = 0; i < n; i ++) {int x;cin >> x;position.push_back(x);}cout << solve() << endl;return 0;
}

2023寒假模拟赛1题解相关推荐

  1. 2023寒假模拟赛2题解(普及)

    题目 n的绝对值 马里奥游戏 糖果 班级的平均分 宇宙裁缝 n的绝对值 判断n是否大于零,大于零直接输出,否则乘以-1输出 #include <iostream> using namesp ...

  2. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

  3. P5594 【XR-4】模拟赛 java题解

    原题:[XR-4]模拟赛 - 洛谷 import java.util.Scanner;public class Main {public static void main(String[] args) ...

  4. 蓝桥杯第一次校内模拟赛java题解

    说明一下,一下代码不是官方题解,仅仅只是个人的题解,不一定完全正确,如果有错误,希望大家在评论区指出来. (1) 问题描述在计算机存储中,15.125GB是多少MB? 答案提交这是一道结果填空的题,你 ...

  5. GRYZ[寒假模拟赛]

    GRYZ娱乐时刻 [题目描述] 无聊的hyxzc不想写代码了,于是他开始玩游戏--洛克王国.众所周知,洛克王国是一个非常好玩的游戏(至少在hyxzc眼中是这样的).这天,hyxzc登上他的洛克王国账号 ...

  6. NOIP模拟赛10 题解

    t3: 题意 给你一棵树,然后每次两种操作:1.给一个节点染色 : 2. 查询一个节点与任意已染色节点 lca 的权值的最大值 分析 考虑一个节点被染色后的影响:令它的所有祖先节点(包括自身)的所有除 ...

  7. 洛谷[LnOI2019]长脖子鹿省选模拟赛 简要题解

    传送门 听说比赛的时候T4T4T4标程锅了??? WTF换我时间我要写T3啊 于是在T4T4T4调半天无果的情况下260pts260pts260pts收场真的是tcltcltcl. T1 快速多项式变 ...

  8. 【CYH-02】noip2018数论模拟赛:赛后题解

    1.小奔的矩阵 2.大奔的方案 3.小奔与不等四边形 4.小奔的方案 当然本次比赛肯定难度不会仅限于此啦!后续还会--

  9. 蓝桥杯第二次模拟赛JAVA题解

最新文章

  1. R语言dplyr包na_if函数根据条件将数据对象替换为NA值实战
  2. 跟牛牛老师学python自动化的第四天
  3. Cocos Creator中的动画支持技术
  4. 解决IntelliJ IDEA下Maven报错Unknown lifecycle phase “.test.skip=true“. You must specify a valid lifecycle
  5. hdu 4738 桥
  6. 如何安装 Angular CLI 并且检查 CLI 的版本
  7. java8 两个list取差集_java8 多个list对象用lambda求差集操作
  8. Linux 操作memcache命令行
  9. list自定义排序工具类
  10. linux服务器中解压与打包jar文件
  11. java 内省 反射_java 反射与内省
  12. GMP法规附录《计算机化系统》那些事儿
  13. 【esp32lvgl】-2.1 # esp32移植lvgl7驱动st7789屏幕(ESP-IDF框架)
  14. 二维码生成及批量生成并打包
  15. Win系统 - 开启 WIN10 隐藏的卓越性能模式
  16. 走楼梯(斐波那契数列)
  17. 【JavaSE】JDK新特性(二)————接口新特性,函数式接口(Suppier,Comsumer,Predicate,Function)
  18. mysql 切分_MySQL切分查询用法分析
  19. 高等数学(第七版)同济大学 总习题十一 个人解答
  20. Linux常用命令英文全称与中文解释 (pwd、su、df、du等)

热门文章

  1. “漫威月”来临,蜘蛛侠成首个 NFT 超级英雄 IP
  2. 深度学习入门(一)——深度学习是什么?
  3. NoSQL Redis
  4. 有哪些目前流行的前端框架
  5. 用vue2写一个新闻列表页,和新闻详情页,该怎么做?
  6. 海湾主机汉字注释表打字出_电脑打字打不出来_电脑上打字只显示字母打不出汉字是怎么回事?...
  7. 基于WeX5平台开发微信公众号中的在线问卷调查
  8. cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤
  9. 中文知识图谱CN-DBpedia构建的关键技术
  10. android8卡顿,看完就明白为什么安卓手机卡顿,这个技巧教你解决卡顿