NOI Online 2022 入门组

题目

T1 王国比赛

智慧之王 Kri统治着一座王国。这天 Kri决定举行一场比赛,来检验自己大臣的智慧。
比赛由 n道判断题组成,有 m位大臣参加。
现在你已经知道了所有大臣的答题情况,但尚未拿到答案,于是你决定先行预测。
具体来说,对于第 i道题,有 x 个大臣选对,y 个大臣选错(显然有 x+y=m),如果 x>y,那么你预测这题答案为对,否则为错。
为了方便,我们保证 m是奇数。
在统计完成后,你拿到了答案,你想知道通过你的预测方式你最后有几道题预测正确。
输入格式
第一行两个正整数 n,m,保证 m是奇数。
接下来 m行,每行 n 个整数,第 i 行第 j 个整数 aij 代表第 i 位大臣对第 j 道题的答案,1 表示他选对,0表示他选错。
接下来 1行 n 个整数, 表示比赛答案,第 i 个数 bi 若为 1 表示第 i 道题答案是对,若为 0表示答案是错。
输出格式
输出一个整数,表示你最后有几题预测正确。
数据范围
对于 20%的数据,1≤n≤5,m=1。
对于 50% 的数据,1≤n≤10,1≤m≤10。
对于 100% 的数据,1≤n≤1000,1≤m≤1000,m为奇数。
输入样例1:
3 3
1 0 1
0 1 1
0 1 0
1 1 1
输出样例1:
2
样例1解释
第一题 x=1,y=2
你预测答案为错(即 0),实际答案为 1,预测错误。
第二题 x=2,y=1
你预测答案为对(即 1),实际答案为 1,预测正确。
第三题 x=2,y=1
你预测答案为对(即 1),实际答案为 1,预测正确。
所以预测正确的题数为 2。
输入样例2:
6 5
1 0 1 1 1 0
0 1 0 1 1 1
0 0 1 0 1 0
1 0 1 0 1 0
0 1 0 1 0 0
1 0 1 0 1 0
输出样例2:
4

解题思路

#include <iostream>
using namespace std;
//王国比赛
const int N = 1005;
int n,m;// n questions
bool result[N][N];
int ans=0;int main()
{scanf("%d %d",&n,&m);for(int i = 1; i <= m + 1; i ++)for(int j = 1; j < n + 1; j ++){cin >> result[i][j]; }for(int i = 1; i <= n ; i ++){bool a = false;int sum = 0;for(int j = 1; j <= m; j ++)sum += result[j][i];if(sum > m / 2) a = true;ans += (!a) ^ result[m + 1][i];}cout << ans << endl;return 0;
}

T2 数学游戏

Kri喜欢玩数字游戏。一天,他在草稿纸上写下了 t对正整数 (x,y),并对于每一对正整数计算出了 z=x×y×gcd(x,y)。
可是调皮的 Zay找到了 Kri 的草稿纸,并把每一组的 y 都擦除了,还可能改动了一些 z。
现在 Kri想请你帮忙还原每一组的 y,具体地,对于每一组中的 x 和 z,你需要输出最小的正整数 y,使得 z=x×y×gcd(x,y)。
如果这样的 y不存在,也就是 Zay 一定改动了 z,那么请输出 −1。
注:gcd(x,y)
表示 x 和 y 的最大公约数,也就是最大的正整数 d,满足 d 既是 x 的约数,又是 y的约数。
输入格式
第一行一个整数 t,表示有 t 对正整数 x 和 z。
接下来 t行,每行两个正整数 x 和 z,含义见题目描述。
输出格式
对于每对数字输出一行,如果不存在满足条件的正整数 y,请输出 −1,否则输出满足条件的最小正整数 y。
数据范围
对于 20%的数据,1≤t,x,z≤103
对于 40% 的数据,1≤t≤103,1≤x≤106,1≤z≤109
对于另 30% 的数据,1≤t≤10^4。
对于另 20% 的数据,1≤x≤10^6。
对于 100% 的数据,1≤t≤5×105,1≤x≤109,1≤z<2^63。
输入样例1:
1
10 240
输出样例1:
12
样例1解释
x×y×gcd(x,y)=10×12×gcd(10,12)=240。
输入样例2:
3
5 30
4 8
11 11
输出样例2:
6
-1
1

解题思路

#include <iostream>
#include <cmath>
using namespace std;
//math game
//数论构造题
//构造 d = gcd(x,y); d^2 = gcd(x^2,z/x)
typedef long long LL;
int t;
LL z,x;
LL qd2;LL gcd(LL a, LL b)
{return  b ? (gcd(b, a % b)) : a ;
}int main()
{cin >> t;while(t --){scanf("%lld%lld",&x,&z);      if(z % x){puts("-1");continue;}else qd2 = z / x;register LL d2 = gcd(x * x, qd2);register LL d = sqrt(d2);if(d * d < d2){puts("-1");continue;}cout << qd2 / d <<'\n';   }return 0;
}

T3 字符串

Kri 非常喜欢字符串,所以他准备找 t 组字符串研究。第 i 次研究中, Kri 准备了两个字符串 S 和 R,其中 S 长度为 n ,且只由 0、1、- 三种字符构成(注:这里的第三种字符是减号), R 初始时为空。
每次研究,Zay 会带着一个美丽的长度为 m 的字符串 T 来找 Kri 玩,Kri 非常羡慕 Zay 拥有如此美丽的字符串,便也想用字符串 S 和 R 变出字符串 T。
具体地,Kri 将会进行 n 次操作。每次操作中,Kri 会取出 S 的第一个字符(记为 c),并将其从 S 中删去。如果 c= -,则 Kri 要删去 R 的开头字符或结尾字符(数据保证删去后 R 不为空)。否则,Kri 会将 c 加入到 R 的末尾。
当进行完所有操作后,Kri 会检查 R 是否和 T 相等。如果 R=T,Kri 就会感到开心;否则,Kri 会感到难受。
请问在每次研究中,Kri 有多少种操作方式使自己最后感到开心?我们定义两种方案不同,当且仅当在某种方案的某次操作中,Kri 删去了 R 的开头字符。而在另一种方案的这次操作中,Kri 删去了 R 的结尾字符。
由于答案可能很大,你只需要输出答案除以 1,000,000,007(即 10^9+7 )的余数。
输入格式
第一行一个正整数 。
接下来有 t 组数据分别表示 t 次字符串的研究,对于每组数据:
第一行有两个正整数 n,m,分别表示字符串 S,T 的长度。
第二行是字符串 S。
第三行是字符串 T。
输出格式
共 t 行,第 i 行表示第 i 组研究的答案。
输入样例1:
3
6 2
10-01-
01
7 3
010-1-1
101
6 4
111-00
1100
输出样例1:
2
1
2
说明/提示
【样例 1 解释】
对于第一组数据,有以下两种方案:
第一个 - 删 R 的开头,第二个 - 删 R 的开头。
第一个 - 删 R 的结尾,第二个 - 删 R 的开头。

【数据范围】
对于 20% 的数据,n,m≤15。
对于 30% 的数据,n,m≤30。
对于 70% 的数据,n,m≤80。
对于另 10% 的数据,保证答案不超过 1。
对于100% 的数据,1≤t≤5,1≤n,m≤400。

解题思路

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;const int p = 1e9 + 7;
int K, n, m, cnt, dp[410][410][410];char s[410],t[410];
int main () {cin >> K;while (K --) {scanf("%d%d",&n,&m);scanf("%s", s + 1);scanf("%s", t + 1);cnt = 0;//统计'-'的数量for (int i = 1; i < n + 1; i ++) if (s[i] == '-') cnt ++;if (n - cnt * 2 != m) {cout << 0 << endl;continue;}int len = 0;//r开始为空串 memset(dp, 0, sizeof dp);dp[0][0][0] = 1;for (int i = 1; i <= n; i ++) {if (s[i] == '-')len --;elselen ++;for (int j = 0; j <= cnt; j ++) {for (int k = 0; k <= cnt - j; k ++) {if (s[i] == '-') {dp[i][j][k] = (dp[i - 1][j + 1][k] + dp[i - 1][j][k + 1]) % p;} else {if (k > 0)dp[i][j][k] = dp[i - 1][j][k - 1];if (k == 0 && t[len - j] == s[i])dp[i][j][k] = dp[i - 1][j][k];if (len == j)dp[i][j][k] = (dp[i][j][k] + dp[i - 1][j - 1][k]) % p;}}}}printf("%d\n", dp[n][0][0]);}return 0;
}

NOI Online 2022 入门组相关推荐

  1. NOI Online 2022 入门组T2

    题面: Kri 喜欢玩数字游戏. ⼀天,他在草稿纸上写下了 t 对正整数 (x,y) ,并对于每⼀对正整数计算出了 z=x*y*gcd(x,y) . 可是调⽪的 Zay 找到了 Kri 的草稿纸,并把 ...

  2. 数学游戏 [NOI Online 2022 入门组]

    题目要求 题目解析 假设x和y的最大公约数为t,则x/t和y/t是互质的,因此, x 2 x^2 x2和 z / x z/x z/x的最大公约数为 t 2 t^2 t2. 下面程序已通过官方测试数据. ...

  3. NOI Online 2022入门组 数学游戏

    推导 令 d = gcd ⁡ ( x , y ) , x = p d , y = q d , z = p q d 3 d=\gcd(x,y),x=pd,y=qd,z=pqd^3 d=gcd(x,y), ...

  4. 【寒假每日一题】洛谷 P7471 [NOI Online 2021 入门组] 切蛋糕

    题目链接:P7471 [NOI Online 2021 入门组] 切蛋糕 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 Alice.Bob 和 Cindy 三个好朋友得到 ...

  5. 题解【洛谷】P6566 NOI Online #3 入门组 观星

    题目描述: 点击进入题目 Jimmy 和 Symbol 约好一起看星星,浩瀚的星空可视为一个长为 N.宽为 M的矩阵,矩阵中共有N×MN \times MN×M个位置,一个位置可以用坐标 (i,j)( ...

  6. 洛谷6474[NOI Online #2 入门组]荆轲刺秦王

    题目背景 本测试数据为脚造,欢迎提供hack. 第18组数据卡了很多人,放于附件中供检查. 题目描述 时隔数年,刺客荆轲再次来到咸阳宫,试图刺杀嬴政. 咸阳宫的地图可以描述为一个 n 行 m 列的矩形 ...

  7. [NOI Online 2022 提高组] 丹钓战(单调栈 + 树状数组 / 主席树)

    problem luogu-P8251 solution 按照题意模拟单调栈. 求出对于 iii 而言,当时单调栈的栈顶元素记为 pip_ipi​. 如果到 iii 时,栈顶已经为 pip_ipi​ ...

  8. luogu P6566 [NOI Online #3 入门组]观星

    题面传送门 直接bfsbfsbfs即可. 代码实现: #include<cstdio> #include<queue> #define max(a,b) ((a)>(b) ...

  9. 【DFS】洛谷P6566 [NOI Online #3 入门组]观星(民间数据)

    Link Problem Sample-1 in 5 7 *...... ..**..* .*...*. ...*... ....*.. Sample-1 out 3 4 Sample-2 in 10 ...

最新文章

  1. 推荐一些视觉SLAM的深度学习方法(上)
  2. 理解Underscore中的uniq函数
  3. [转]javascript中style.left和offsetLeft的使用
  4. 啊啊啊 草蛋啊 之前努力一天搞出来的时间算法 被一句pk掉 给我砖头
  5. IDEA 学习笔记之 安装和基本配置
  6. 【渝粤题库】陕西师范大学200371 拓扑学 作业 (专升本、高起本)
  7. ms sql server 添加列,删除列。
  8. 小汤学编程之JavaEE学习day06——LayUI
  9. c语言学习-有一12个元素的整型数组b,从键盘输入数据,请以每行4个数据各个数据之间空两格的形式输出b数组的12个元素
  10. Java -- IO
  11. SpringBoot之idea调出Maven Project
  12. 线性代数:特征向量和特征值
  13. fp算法例题_大部分人都理解错了的FPgrowth算法
  14. 修改表和约束(alter语句)
  15. Matlab中句柄类
  16. 一、java入门(高琪java300集+java从入门到精通笔记)
  17. python小白进阶之路三——七段数码管的绘制+做一个酷炫的倒计时(函数的复用)
  18. VUE-waterfall瀑布流组件使用
  19. 扛住时间,不负自我,37岁自学计算机语言-Python的后果
  20. 申请GitHub学生包,0成本搭建WordPress教程

热门文章

  1. python两张图片无缝合成一张_使用python拼接多张图片.二三事
  2. Docker一键脚本安装、命令使用和常用软件安装
  3. linux高性能服务器开发十大必须掌握的核心技术
  4. UGUI BoxCollider自适应大小
  5. 1042. 不邻接植花
  6. 通过微信无法下载APP的最佳解决方案
  7. 优酷的视频地址获取接口
  8. let/const 的变量提升与暂时性死区
  9. R语言实用案例分析-1
  10. 倍福--通过示波器读取IO信号