7.24 补题

C 小w和大W的决斗

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

小w和大W为了比出谁更聪明。决定进行一场游戏。游戏内容如下:

两人轮流操作,小w先进行操作,每次操作可以选择下列两个其一:

选择数组中的一个数x (x!=0),将xxx变成x−y(1≤y≤x)选择数组中的一个数x (x!=0),将其分成 i,j,k三个正整数 满足 i+j+k=x

先把数组全变为0的获胜。

请问小w是否有必胜策略。如果有输出"w win",否则输出"W win",(不带引号)。

输入描述:

第一行输入一个整数 n (1≤n≤104)
第二行输 nnn 个整数 a1 ... an (1≤ai≤100),用空格隔开.

输出描述:

输出一个字符串"w win" 或者 "W win"。

示例1

输入

3
1 1 3

输出

w win

示例2

输入

3
1 2 3

输出

W win

思路:

 

-----------------------------------------------------------------------------------------------------------------------------
sg 函数定义:
sg(x) 函数用于计算给定数 x 的 sg 值。sg 函数的具体定义规则是:
如果 x % 8 == 0,返回 x - 1。
如果 x % 8 == 7,返回 x + 1。
否则,返回 x 本身。
这种计算方式通常用于游戏理论中的Nim游戏或其变种,用来计算每一堆物品(如石子)的游戏价值。
计算游戏结果:
初始化 ans 为0,用来存储每一堆石子的 sg 值的异或结果。
使用 for 循环遍历 stones 向量中的每一堆石子数量,对每一堆石子的数量调用 sg 函数,然后将结果与 ans 进行异或操作。
利用游戏理论中的 sg 函数和Nim游戏的特性来确定最终的游戏结果,通过计算每一堆石子的 sg 值的异或结果来决定哪一方是必胜的。

代码:

#include <iostream>
#include <vector>
using namespace std;
// 计算某个数 x 的 sg 值
int sg(int x) {if (x % 8 == 0) {return x - 1;} else if (x % 8 == 7) {return x + 1;} else {return x;}
}
int main() {int n;cin >> n;  // 堆数vector<int> stones(n);// 输入每堆石子的数量for (int i = 0; i < n; ++i) {cin >> stones[i];}int ans = 0;for (int stone : stones) {ans ^= sg(stone);}if (ans == 0) {cout<< "W win";  } else {cout << "w win"; }return 0;
}

运行结果:

D A*BBBB 

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

集训队的longlong同学刚学完c语言基础后,非常高兴的开始做题,但是突然有一题难住了longlong同学。题面如下:
t组输入,每组输入给两个整数a和b,输出a∗b。但是a,b非常大,0<=a,b<=101000000。其中b的每一位都相同,且a,b都不含前导0。
longlong同学写不出题太痛苦了,于是请求你帮帮他。

输入描述:

第1行输入一个t表示t组输入(1<=t<=10)(
第2到2∗t+1行,每组给出两行,分别是a,b。1≤∣a∣,∣b∣≤1e6

∣a∣表示a的长度

输出描述:

输出t行,每行一个整数,表示a∗b的答案

示例1

输入

2
114514
22
1919810
33

输出

2519308
63353730

备注:

因为整数太大不能直接用py的乘法哦,要仔细思考一下哦。

思路1: 

利用FFT实现多项式乘法,通过复数运算实现高效的大数乘法,并通过位运算和逆序处理来优化FFT的实现。
 

代码1:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define ll long long
using namespace std;
const ll N=5000010;
const double pi=acos(-1);
string s;
bool b1;
ll n,m,limit,c[N];
struct complex{double real,imag;complex(double X=0,double Y=0){real=X; imag=Y;}
}a[N],b[N];
inline complex operator +(complex a,complex b){return complex(a.real+b.real,a.imag+b.imag);}
inline complex operator -(complex a,complex b){return complex(a.real-b.real,a.imag-b.imag);}
inline complex operator *(complex a,complex b){return complex(a.real*b.real-a.imag*b.imag,a.real*b.imag+a.imag*b.real);}void FFT(complex *a,ll op){for(ll i=0; i<limit; i++){if(i<c[i]) swap(a[i],a[c[i]]);}for(ll mid=1; mid<limit; mid<<=1){complex W(cos(pi/mid),op*sin(pi/mid));for(ll r=mid<<1,j=0; j<limit; j+=r){complex w(1,0);for(ll l=0; l<mid; l++,w=w*W){complex x=a[j+l],y=w*a[j+mid+l];a[j+l]=x+y; a[j+mid+l]=x-y;}}}
}void solve_(){memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));cin>>s; n=s.size()-1;for(ll i=0; i<=n; i++) a[n-i].real=s[i]-48;cin>>s; m=s.size()-1;for(ll i=0; i<=m; i++) b[m-i].real=s[i]-48;limit=1; ll l=0;while(limit<=n+m){limit<<=1;l++;}for(ll i=0; i<limit; i++) c[i]=(c[i>>1]>>1)|((i&1)<<(l-1));FFT(a,1); FFT(b,1);for(ll i=0; i<=limit; i++) a[i]=a[i]*b[i];FFT(a,-1);memset(c,0,sizeof(c));for(ll i=0; i<=n+m+1; i++) c[i]=a[i].real/limit+0.5;for(ll i=0; i<=n+m; i++){c[i+1]+=c[i]/10;c[i]%=10;}limit=n+m+1;while(c[limit]){c[limit+1]+=c[limit]/10;c[limit]%=10;limit++;}for(ll i=limit-1; i>=0; i--) {if(c[i]==0&&b1==0)continue;b1=1;cout<<c[i];}if(b1==0)cout<<0;cout << endl;return ;
}
int main(){ios::sync_with_stdio(0); cin.tie(0);int t;cin >> t;while(t--){solve_();}return 0;
}

运行结果: 

思路2: (题解)

代码2:

#include <iostream>
#include <cstring>
#include<algorithm>
using namespace std;
string a, b;
string ans;
void solve()
{cin >> a >> b;reverse(begin(a), end(a));int c = 0, t = 0;for (int i = 0; i < a.size() + b.size(); i++){if (i < a.size())c += a[i] - '0';if (i >= b.size()) c -= a[i - b.size()] - '0';t += c * (b[0] - '0');ans.push_back(t % 10 + '0');t /= 10;}while (ans.size() > 1 && ans.back() == '0')ans.pop_back();reverse(begin(ans), end(ans));cout << ans << '\n';
}
int main()
{int t;cin >> t;while (t--)solve();return 0;
}

E “好”字符

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

字符串的循环同构:表示把字符串的左边第一位移到最后一位,新串再进行这样的操作,得到的一些字符串都是原串的循环同构,例如"bcda"、"cdab"、"dabc"都是"abcd"的循环同构。

给你两个长度相等的字符串 a 和 b,字符串 a和 b均由小写字母组成。

当某个字符 x 在字符串 a 与字符串 b 或 b 的循环同构中出现的所有位置依次对应时(对于字符串的每一位,要么 a和 b 的这一位都是该字符,要么都不为该字符),称该字符为“好”字符。例如:当 a = "acba",b = "bdaa"时,字符'a'与字符'b'为“好”字符

现在,我们想请你判断字符串 a 与字符串 b 中“好”字符的数量

输入描述:

第一行给你一个 n (1≤n≤106),n 为字符串 a 与 b 的长度。第二行与第三行为字符串 a和 b ,a 和 b 均由小写字母组成。

输出描述:

单行输出一个数字,表示“好”字符的个数。

示例1

输入

6
acabxb
eababf

输出

2

说明

当b的循环同构体为"ababfe"时,字符'a'为“好”字符,当b的循环同构体为"feabab"时,字符'b'为“好”字符。

示例2

输入

3
abc
cde

输出

1

思路:

 

统计字符串 ss1 在字符串 ss2 的多个周期中的出现次数,通过 KMP 算法实现部分匹配 

代码:

#include <iostream>
#include <iomanip>
#include <vector>
#include <cstring>
#define int long long
using namespace std;int n, ans;
string ss1, ss2;
int zm1[27], zm2[27]; // 字符统计数组,zm1 统计 ss1 中各字符出现次数,zm2 统计 ss2 中各字符出现次数// 计算字符串的 Next 数组
vector<int> Next(string ss) {vector<int> next;next.push_back(0);for (int i = 1, j = 0; i < ss.length(); i++) {while (j > 0 && ss[j] != ss[i]) {j = next[j - 1];}if (ss[j] == ss[i]) {j++;}next.push_back(j);}return next;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); // 输入 n(字符串长度)、ss1(第一个字符串)、ss2(第二个字符串)cin >> n >> ss1 >> ss2;// 统计 ss1 中每个字符出现的次数for (int i = 0; i < ss1.size(); i++) {zm1[ss1[i] - 'a' + 1]++;}// 统计 ss2 中每个字符出现的次数for (int i = 0; i < ss2.size(); i++) {zm2[ss2[i] - 'a' + 1]++;}// 将 ss2 复制一份,形成双倍长度,用于后续匹配ss2 = ss2 + ss2;// 遍历每个字符,进行匹配操作for (int i = 1; i <= 26; i++) {if (zm1[i] != 0) { // 如果 ss1 中存在字符 iif (zm2[i] == zm1[i]) { // 如果 ss2 中字符 i 的数量与 ss1 中相同string ss3 = ss1, ss4 = ss2;// 将 ss3 和 ss4 中不是字符 i 的位置替换为 '#'for (int j = 0; j < ss3.size(); j++) {if (ss3[j] - 'a' + 1 != i)ss3[j] = '#';}for (int j = 0; j < ss4.size(); j++) {if (ss4[j] - 'a' + 1 != i)ss4[j] = '#';}// 使用 ss3 在 ss4 中进行 KMP 匹配string ss = ss3, t = ss4;vector<int> next = Next(ss);for (int i = 0, j = 0; i < t.length(); i++) {while (j > 0 && t[i] != ss[j]) {j = next[j - 1];}if (t[i] == ss[j]) {j++;}if (j == ss.length()) {ans++; break;}}}}}cout << ans << '\n';return 0;
}

运行结果:

H 狼狼的备忘录 

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

圈圈:代打王者,1r一局,3r3r3r 两局,5r 三局,不保证胜率,诚信经营

yq :圈,我赚的第一块是小寒冰的~

静静:鸢还不给我抽到张邈!!!

狼狼:瓦,启........

玉玉:长相思长相思长相思

以上是广告招租位,和本题无关。
由于狼狼是一个喜欢看星座的小女孩,为此她写了几本备忘录来记录集训队成员的星座信息。(桃白白说过,经常看星座相关的信息可以提高 codefoeces分数。多读书多看报,少吃零食多 codeforces!!!)

狼狼决定整理这几本备忘录里有关集训队成员的星座信息,每本备忘录都记录着一个成员的一条或多条星座信息。包含 n 本备忘录:每本备忘录都由一个名字 id 开头代表某个集训队成员名字,然后是一个记录的条目数代表狼狼在该备忘录中记录该成员的信息条数 op ,最后是 op 条星座信息本身。同一本备忘录中可能记录了多个相同的星座信息,不同的备忘录可能记录同一个人的多条信息。

狼狼认为整理这些备忘录信息应该遵循一下规则:

A:同一个成员的星座信息 x 是星座信息 y 的后缀,那么星座信息 x 会没有星座信息 y 完整,从而应该只保留星座信息 y,删除星座信息 x 。

B:同一个成员的星座信息可能以相同格式出现多次,那么只保留该信息一次。

注意:有可能两个不同的成员有着相同的星座信息,这是合法的。

现在狼狼现在要跟圈圈静静 yq 玉玉前往瓦的训练场,请你按照规则 A ,规则 B帮助狼狼整理她的备忘录,并且将这些备忘录信息按照字典序打印出来。

输入描述:

包含整数 n(1<=n<=20) 狼狼的备忘录本数接下来的 n 行是按照语句中的格式对成员的星座信息进行描述。成员名字是长度不超过10的非空字符串,他们仅由小写英文字母组成。条目数是一个不少于1,不超过10的整数。星座信息是长度不超过10的非空字符串,仅由数字组成。

输出描述:

打印有关狼狼备忘录中集训队成员们的星座信息。
第一行输出 m 表示在狼狼备忘录中找到的成员的数量。
以下 m 行必须包含以下格式:“成员名字 条目数信息 信息”,每条记录必须包含当前成员的所有星座信息。
输出时成员名字字典序小的先输出,每个成员的星座信息中字典序小的先输出,星座信息中前导零也要输出。

示例1

输入

3
karl 2 612 12
petr 1 12
katya 1 612

输出

3
karl 1 612
katya 1 612
petr 1 12

示例2

输入

4
ivan 3 123 123 456
ivan 2 456 456
ivan 8 789 3 23 6 56 9 89 2
dasha 2 23 789

输出

2
dasha 2 23 789
ivan 4 123 2 456 789

示例3

输入

2
yq 1 777777
icealsoheat 1 555

输出

2
icealsoheat 1 555
yq 1 777777

示例4

输入

10
zifei 1 8
zilatan 1 9
consuui 1 3
zonehawkr 1 10
wananan 1 5
foureyebird 1 4
xpp 1 7
wulong 1 6
andso 1 1
btqq 1 2

输出

10
andso 1 1
btqq 1 2
consuui 1 3
foureyebird 1 4
wananan 1 5
wulong 1 6
xpp 1 7
zifei 1 8
zilatan 1 9
zonehawkr 1 10

思路:

 代码:

#include<bits/stdc++.h> 
#define int long long 
using namespace std;// 函数:判断字符串 a 是否为字符串 b 的后缀
bool f(const string& a, const string& b) {if (a.size() > b.size()) { return false;}return equal(a.rbegin(), a.rend(), b.rbegin()); // 判断 a 是否为 b 的后缀
}// 函数:比较两个 pair<string, set<string>> 类型的对象,按照 first 字符串的字典序进行比较
bool cmp(pair<string, set<string>> a, pair<string, set<string>> b) {return a.first < b.first;
}signed main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int m;cin >> m; map<string, set<string>> mp; while (m--) {string name;int c;cin >> name >> c; for (int i = 0; i < c; i++) {string ss;cin >> ss; mp[name].insert(ss); // 将 ss 插入到对应名称 name 的集合中}}// 将 map 转换为 vector,便于排序vector<pair<string, set<string>>> ma(mp.begin(), mp.end());sort(ma.begin(), ma.end(), cmp); cout << mp.size() << endl;for (const auto& i : ma) {vector<string> namee;// 将 set 中的元素复制到 vector 中for (const auto& ss1 : i.second) {namee.push_back(ss1);}// 对于 vector 中的每个元素,检查是否为其他元素的后缀并去重for (int i = 0; i < namee.size(); i++) {string t = namee[i];for (int j = 0; j < namee.size(); j++) {if (i != j && f(namee[i], namee[j])) {namee.erase(namee.begin() + i); // 如果 namee[i] 是 namee[j] 的后缀,则删除 namee[i]--i; // 删除后,调整 i 的位置break;}}}cout << i.first << " " << namee.size() << " ";for (const auto& ss1 : namee) {cout << ss1 << " ";}cout << '\n';}return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

唐老狮 UGUI 实战学习笔记

仅作学习&#xff0c;不做任何商业用途 不是源码&#xff0c;不是源码! 是我通过"照虎画猫"写的&#xff0c;可能有些小修改 不提供素材&#xff0c;所以应该不算是盗版资源&#xff0c;侵权删 using System.Collections; using System.Collections.Generic; using …

深度解析Linux-C——结构体(初始化,结构体数组,结构体大小,位段操作,联合体,内存对齐,C的预处理,宏和带参宏,条件编译)

目录 结构体的三种初始化 结构体的两种引用 结构体数组 结构体大小 结构体实现位段操作 联合体 内存对齐 C的预处理 带参宏 条件编译 结构体的三种初始化 定义如下结构体 struct student {char name[100]; int age; float height; } ; 1、定义变量时初始化 s…

Matrix Equation(高斯线性异或消元+bitset优化)

题目&#xff1a; 登录—专业IT笔试面试备考平台_牛客网 思路&#xff1a; 我们发现对于矩阵C可以一列一列求。 mod2&#xff0c;当这一行相乘1的个数为奇数时&#xff0c;z(i,j)为1&#xff0c;偶数为0&#xff0c;是异或消元。 对于b[i&#xff0c;j]*c[i,j],b[i,j]可以…

【MQTT(4)】开发一个客户端,QT-Android安卓手机版本,Mosquitto替换成libhv库

我们采用 libhv是一个类似于libevent、libev、libuv的跨平台网络库&#xff0c;提供了更易用的接口和更丰富的协议。 https://github.com/ithewei/libhv?tabreadme-ov-file 编译脚本如下 Android compile WITH_MQTT #https://developer.android.com/ndk/downloads #export…

tof系统标定流程步骤详解

1、tof标定概述 系统校准是一个减少ToF系统中系统误差影响的过程,如图1.1所示。本文件旨在介绍校准方法、设备和软件 1.1 系统误差 1.1.1 周期误差 谐波失真导致的相位(距离)相关误差。 1.1.2 固定相位模式噪声 由于解调信号的时延取决于可见像素位置以及VCSEL和传感器…

c++中的最长递增子序列(Longest Increasing Subsequence)(算法章完结)

前言 hello大家好啊&#xff0c;我是文宇。 今天是最后一篇算法&#xff08;暂时性的&#xff0c;以后可能还有&#xff09; 最长递增子序列&#xff08;Longest Increasing Subsequence&#xff09; 最长递增子序列&#xff08;Longest Increasing Subsequence&#xff0c…

【Golang 面试基础题】每日 5 题(十)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

【机器学习】解开反向传播算法的奥秘

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 解开反向传播算法的奥秘反向传播算法的概述反向传播算法的数学推导1. 前向传播2…

Linux进程——程序地址空间详解

文章目录 程序地址空间地址空间与物理内存什么是程序地址空间管理程序地址空间虚拟地址与物理地址的映射页表的结构及其作用程序地址空间的作用 程序地址空间 我们之前学习内存的时候&#xff0c;有说内存的分布大概是这样的 其中堆由下而上&#xff0c;栈由上而下 除此之外&…

JavaScript青少年简明教程:函数及其相关知识(下)

JavaScript青少年简明教程&#xff1a;函数及其相关知识&#xff08;下&#xff09; 继续上一节介绍函数相关知识。 箭头函数&#xff08;Arrow Function&#xff09; 箭头函数是 ES6&#xff08;ECMAScript 2015&#xff09;及更高版本中引入的语法&#xff0c;用于简化函数…

LeetCode:删除排序链表中的重复元素(C语言)

1、问题概述&#xff1a;给定一个已排序链表的头&#xff0c;删除重复元素&#xff0c;返回已排序的链表 2、示例 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 示例 2&#xff1a; 输入&#xff1a;head [1,1,2,3,3] 输出&#xff1a;[1,2,3] 3…

深度解析Memcached:内存分配算法的优化之旅

&#x1f525; 深度解析Memcached&#xff1a;内存分配算法的优化之旅 Memcached是一个高性能的分布式内存缓存系统&#xff0c;广泛用于提高Web应用程序的性能。它通过减少数据库查询次数来加速数据检索。然而&#xff0c;Memcached的性能在很大程度上取决于其内存分配算法的…

前端三方库零碎(持续更新)

本文主要记录开发实践过程中遇到的前端库&#xff0c;做个记录总结&#xff0c;以备不时之需 easyui-datagrid EasyUI 是一个基于 jQuery 的用户界面插件库&#xff0c;提供了丰富的用户界面组件和工具&#xff0c;其中包括 datagrid&#xff08;数据表格&#xff09;组件。E…

2024年国际高校数学建模大赛(IMMCHE)问题A:金字塔石的运输成品文章分享(仅供学习)

2024 International Mathematics Molding Contest for Higher Education Problem A: Transportation of Pyramid Stones&#xff08;2024年国际高校数学建模大赛&#xff08;IMMCHE&#xff09;问题A&#xff1a;金字塔石的运输&#xff09; 古埃及金字塔石材运输优化模型研究…

spring(一)

一、spring特点 1.非侵入式&#xff1a;使用 Spring Framework 开发应用程序时&#xff0c;Spring 对应用程序本身的结构影响非常小。对领域模型可以做到零污染&#xff1b;对功能性组件也只需要使用几个简单的注解进行标记&#xff0c;完全不会破坏原有结构&#xff0c;反而能…

2024最新Selenium面试题(附带答案),建议收藏备用

一.你在TestNG中使用了哪些注解&#xff1f; TestBeforeSuiteAfterSuiteBeforeTestAfterTestBeforeClassAfterClassBeforeMethodAfterMethod 二.如何从Excel中读取数据&#xff1f; FileInputStream fs new FileInputStream(“excel文件路径”); Workbook wb WorkbookFact…

探索智慧校园资产入库功能,构建高效校园资产管理体系

在智慧校园的资产管理框架下&#xff0c;资产入库功能作为资产生命周期管理的开端&#xff0c;扮演着至关重要的角色。这一功能确保了新购置或转入的资产能够迅速而准确地被记录在系统中&#xff0c;从而无缝融入日常的管理流程。当资产入库时&#xff0c;系统要求详细登记一系…

2024最新前端学习路线指南!

2024最新前端学习路线指南&#xff01; 如果你正在寻找一份全面的前端学习路线图&#xff0c;那么这份精心打造的学习大纲恰好符合您的需求。无论您是新手还是经验丰富的开发者&#xff0c;这份路线图都能够帮助您系统地掌握前端开发的关键知识点&#xff0c;并在实践中不断提…

git连接远程仓库

一、本地新建代码,上传到远程仓库 1.git init #初始化本地仓库 2.git remote -v #查看当前仓库的远程地址 3.git remote add origin 远程仓库的URL 4.git branch master / git branch dev 创建 主分支或者 dev 分支 5.git checkout master/dev. 切换到主分支或者dev 分支…

Mysql-生产环境实战经验总结

文章目录 真实生产环境下的Mysql数据库机器配置如何规划互联网公司的生产环境数据库是如何进行性能压测1. 准备测试环境2. 构建测试场景3. 性能测试4. 监控与分析5. 资源压力测试6. 故障恢复测试7. 文档记录与复盘8. 安全与合规注意事项 如何为生产环境中的数据库部署监控系统1…