您现在的位置是:首页 > 数码 > 

Week14 必做题

2025-07-28 06:49:29
Week14 必做题 文章目录 14-1题目描述样例思路代码14-2题目描述样例思路代码14-题目描述样例思路代码 14-1题目描述 每一个大人曾经都是一个小孩,Q老师 也一样。 为了回忆童年,Q老师 和 Monika 玩起了石头剪刀布的游戏,游戏一共 n 轮。无所不知的 Q老师 知道每一轮 Monika 的出招,然

Week14 必做题

文章目录
    • 14-1题目描述
    • 样例
    • 思路
    • 代码
    • 14-2题目描述
    • 样例
    • 思路
    • 代码
    • 14-题目描述
    • 样例
    • 思路
    • 代码

14-1题目描述

每一个大人曾经都是一个小孩,Q老师 也一样。

为了回忆童年,Q老师 和 Monika 玩起了石头剪刀布的游戏,游戏一共 n 轮。无所不知的 Q老师 知道每一轮 Monika 的出招,然而作为限制, Q老师 在这 n 轮游戏中必须恰好出 a 次石头,b 次布和 c 次剪刀。

如果 Q老师 赢了 Monika n/2(上取整) 次,那么 Q老师就赢得了这场游戏,否则 Q老师 就输啦!

Q老师非常想赢,他想知道能否可以赢得这场游戏,如果可以的话,Q老师希望你能告诉他一种可以赢的出招顺序,任意一种都可以。

样例

Input

第一行一个整数 t(1 ≤ t ≤ 100)表示测试数据组数。然后接下来的 t 组数据,每一组都有三个整数:第一行一个整数 n(1 ≤ n ≤ 100)
第二行包含三个整数 a, b, c(0 ≤ a, b, c ≤ n)。保证 abc=n
第三行包含一个长度为 n 的字符串 s,字符串 s 由且仅由 	R	, 	P	, 	S	 这三个字母组成。第 i 个字母 s[i] 表示 Monika 在第 i 轮的出招。字母 	R	 表示石头,字母 	P	 表示布,字母 	S	 表示剪刀

Output

对于每组数据:如果 Q老师 不能赢,则在第一行输出 O(不含引号)
否则在第一行输出 YES(不含引号),在第二行输出 Q老师 的出招序列 t。要求 t 的长度为 n 且仅由 	R	, 	P	, 	S	 这三个字母构成。t 中需要正好包含 a 个 	R	,b 个 	P	 和 c 个 	S	
YES/O是大小写不敏感的,但是 	R	, 	P	, 	S	 是大小写敏感的。

样例输入

2

1 1 1
RPS

 0 0
RPS

样例输出

YES
PSR
O

思路

使用贪心,如果对方出布,自己还有出剪刀的机会的话,那么赢局数1,并将赢得这一轮出的手势记录下来,如果没有赢,那么这一轮出的手势可以看作为空,从自己剩余的可出的手势里选择一个即可

代码

#include <iostream>
#include <string.h>
using namespace std;char win[110];
int a,b,c,n;
string s;
int sum;int main()
{int t;cin>>t;while(t--){cin>>n;cin>>a>>b>>c;cin>>s;sum=0;memset(win,0,sizeof(win));for(int i=0;i<n;i){if(s[i]==	R	&&b){b--;sum;win[i]=	P	;}if(s[i]==	P	&&c){c--;sum;win[i]=	S	;}if(s[i]==	S	&&a){a--;sum;win[i]=	R	;}}int temp=n/2;if(n%2==1) temp;if(sum>=temp){cout<<YES<<endl;for(int i=0;i<n;i){if(win[i]!=0)cout<<win[i];else{if(a) cout<<R,a--;else if(b) cout<<P,b--;else if(c) cout<<S,c--;}}cout<<endl;}else cout<<O<<endl;		}} 

14-2题目描述

Q老师 得到一张 n 行 m 列的网格图,上面每一个格子要么是白的要么是黑的。

Q老师认为失去了 十字叉 的网格图莫得灵魂. 一个十字叉可以用一个数对 x 和 y 来表示, 其中 1 ≤ x ≤ n 并且 1 ≤ y ≤ m, 满足在第 x 行中的所有格子以及在第 y 列的 所有格子都是黑的

例如下面这5个网格图里都包含十字叉

第四个图有四个十字叉,分别在 (1, ), (1, 5), (, ) 和 (, 5).

下面的图里没有十字叉

Q老师 得到了一桶黑颜料,他想为这个网格图注入灵魂。 Q老师 每分钟可以选择一个白的格子并且把它涂黑。现在他想知道要完成这个工作,最少需要几分钟?

样例

Input

第一行包含一个整数 q (1 ≤ q ≤ 5 * 10^4) — 表示测试组数对于每组数据:
第一行有两个整数 n 和 m (1 ≤ n, m ≤ 5 * 10^4, n * m ≤ 4 * 10^5) — 表示网格图的行数和列数接下来的 n 行中每一行包含 m 个字符 — 	.	 表示这个格子是白的, 	*	 表示这个格子是黑的保证 q 组数据中 n 的总和不超过 5 * 10^4, n*m 的总和不超过 4 * 10^5

Output

答案输出 q 行, 第 i 行包含一个整数 — 表示第 i 组数据的答案

样例输入

9
5 5
..*..
..*..
*****
..*..
..*..
 4
****
.*..
.*..
4 
***
*..
*..
*..
5 5
*****
*.*.*
*****
..*.*
..***
1 4
****
5 5
.....
..*..
.***.
..*..
.....
5 
...
.*.
.*.
***
.*.
 
.*.
*.*
.*.
4 4
*.**
....
*.**
*.**

样例输出

0
0
0
0
0
4
1
1
2

思路

可知交叉点一定会在*最多的一行和最多的一列,那么需要补的黑格子的个数为n-maxxm-maxy
需要注意的是,如果行和列的交叉处需要涂黑,那么数量就要-1
有可能有多列和多行有相同的最多数目的待涂的格子
遍历所有的行和列,出黑格子最多的maxx和maxy即可

代码

#include <iostream>
#include <vector>
#include <string.h>
using namespace std;int q,n,m;
int maxx,maxy;
char s[50010];
int h[50010],l[50010];vector<int> w[50010];int main()
{cin>>q;while(q--){cin>>n>>m;maxx=0,maxy=0;for(int i=0;i<n;i)w[i].clear();memset(h,0,sizeof(h));memset(l,0,sizeof(l));for(int i=0;i<n;i){cin>>s;for(int j=0;j<m;j){if(s[j]==	*	){h[i];l[j];w[i].push_back(j);maxy=max(maxy,l[j]);}}maxx=max(maxx,h[i]);}int sum=(n-maxx)(m-maxy);bool index=false;for(int i=0;i<n&&!index;i){if(h[i]!=maxx) continue;for(int j=0;j<m&&!index;j) {if(l[j]!=maxy) continue;bool temp=false;for(int k=0;k<w[i].size();k){if(w[i][k]==j){temp=true;break;}	}if(!temp){sum--;index=true;}}}cout<<sum<<endl;	}
} 

14-题目描述

Q老师 对数列有一种非同一般的热爱,尤其是优美的斐波那契数列。

这一天,Q老师 为了增强大家对于斐波那契数列的理解,决定在斐波那契的基础上创建一个新的数列 f(x) 来考一考大家。数列 f(x) 定义如下:

当 x < 10 时,f(x) = x;
当 x ≥ 10 时,f(x) = a0 * f(x-1)  a1 * f(x-2)  a2 * f(x-)  ……  a9 * f(x-10),ai 只能为 0 或 1。

Q老师 将给定 a0~a9,以及两个正整数 k m,询问 f(k) % m 的数值大小。

聪明的你能通过 Q老师 的考验吗?

样例

Input

输出文件包含多组测试用例,每组测试用例格式如下:第一行给定两个正整数 k m。(k < 2e9, m < 1e5)第二行给定十个整数,分别表示 a0~a9。

Output

对于每一组测试用例输出一行,表示 f(k) % m 的数值大小。

样例输入

10 9999
1 1 1 1 1 1 1 1 1 1
20 500
1 0 1 0 1 0 1 0 1 0

样例输出

45
104

思路

采用线性递推,构造快速幂矩阵进行求解,可知求得的最终答案是快速幂矩阵的(k-9)次方×初始向量a9 a8 a7 …a0

代码

#include <iostream>
#include <string.h>
using namespace std;int k,m;struct node
{int n[10][10];node operator*(ct node& ) ct{node temp;for(int i=0;i<10;i){for(int j=0;j<10;j){[i][j]=0;for(int k=0;k<10;k){[i][j]=n[i][k]*.n[k][j]%m;[i][j]%=m;}}}return temp;}node(){memset(n,0,sizeof(n));}node(ct node &){memcpy(n,.n,sizeof(n));}
};node quick_pow(node a,int x)
{node temp;for(int i=0;i<=9;i){[i][i]=1;}while(x){if(x&1) temp=temp*a;a=a*a;x>>=1;}return temp;
} int main()
{int sum;while(cin>>k>>m){node a;sum=0;for(int i=0;i<=9;i){cin>>[0][i];}for(int i=1;i<=9;i){[i][i-1]=1;}if(k<=9){sum=k%m;}else if(k>=10){a=quick_pow(a,k-9);for(int i=0;i<=9;i){sum=([0][i]*(9-i))%m;sum%=m;}}cout<<sum<<endl;}
} 

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/800185.html

相关标签:无
上传时间: 2024-01-14 06:43:31
留言与评论(共有 11 条评论)
本站网友 桂林婚纱影楼
4分钟前 发表
保证 abc=n 第三行包含一个长度为 n 的字符串 s,字符串 s 由且仅由 R
本站网友 蜗居讲的是什么
16分钟前 发表
maxy; char s[50010]; int h[50010]
本站网友 上海婚纱
17分钟前 发表
第 i 个字母 s[i] 表示 Monika 在第 i 轮的出招
本站网友 新疆现在几点了
12分钟前 发表
m; int maxx
本站网友 红山二手房网
23分钟前 发表
无所不知的 Q老师 知道每一轮 Monika 的出招,然而作为限制, Q老师 在这 n 轮游戏中必须恰好出 a 次石头,b 次布和 c 次剪刀
本站网友 一年几个季度
17分钟前 发表
maxy; char s[50010]; int h[50010]
本站网友 健康快速减肥食谱
3分钟前 发表
保证 abc=n 第三行包含一个长度为 n 的字符串 s,字符串 s 由且仅由 R
本站网友 德阳娱乐
30分钟前 发表
S 这三个字母组成
本站网友 可乐致癌
27分钟前 发表
样例输入 10 9999 1 1 1 1 1 1 1 1 1 1 20 500 1 0 1 0 1 0 1 0 1 0 样例输出 45 104 思路 采用线性递推,构造快速幂矩阵进行求解,可知求得的最终答案是快速幂矩阵的(k-9)次方×初始向量a9 a8 a7 …a0 代码 #include <iostream> #include <string.h> using namespace std;int k
本站网友 青春之火歌词
11分钟前 发表
为了回忆童年,Q老师 和 Monika 玩起了石头剪刀布的游戏,游戏一共 n 轮