牛客OI周赛9-普及组

2023-10-23 13:32
文章标签 牛客 普及 周赛 oi

本文主要是介绍牛客OI周赛9-普及组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

A题

B题

 C题


A题

 

地址:https://ac.nowcoder.com/acm/contest/696/A

 小Q挺喜欢撸串的,没错,字符串!

你给小Q送上了n个字符串

对于一个字符串s,如果在小Q撸掉(删除)任意个字符之后,"NowCoder"是其子串,则这个字符串s是可撸的。小Q最近切题切到手软,想撸串散散心。如果你给他呈现的字符串是可撸的,他会很开心,否则他会很桑心。

输入描述:

一个整数n,表示字符串的数量

接下来每行一个字符串sisi,表示小Q看到的第i个字符串

输出描述:

输出有n行,如果小Q开心他会说QAK,否则他会说QIE

      这题目很简单,只要定义一个j,相等则j++ 这样一个一个往后检索,如果最后j等于NowCoder的长度  则输出QAK

我定义了一个字符串数组,结果长度M定义到10000000,太大了 然后就wa了 出结果后改到100000 就过了

#include<iostream>
using namespace std;const int M = 100000;
string s[M];
int n;int main(){string s1 = "NowCoder";cin>>n;for(int i = 0; i<n; i++){cin>>s[i];} for(int k = 0; k<n; k++){int i = 0;int j = 0;while(i < s[k].length()) {if(s[k][i] == s1[j]){j++;}i++;}if(j == s1.length()){cout<<"QAK"<<endl;}else cout<<"QIE"<<endl;}return 0;
}

B题

地址:https://ac.nowcoder.com/acm/contest/696/B

题目描述:

如果一个数x满足的|x|二进制中1的个数>0的个数我们认为他是一个好的数。一个好的数的价值是1,而一个不好的数的价值是-1
比如|2|=|−2|=2(10)=10(2),|10|=|−10|=10(10)=1010(2)|2|=|−2|=2(10)=10(2),|10|=|−10|=10(10)=1010(2)  

小L想知道一个序列AnAn的价值是多少

输入描述:

第一行有一个整数n,表示序列AnAn的长度

第二行有n个整数,第i个整数AiAi表示序列中第i个数是多少

输出描述:

输出仅一行,表示这个序列的价值是多少

    这道题需要对二进制有所了解,我一看到二进制,就想到了bitset,但是我忽略了一个很重要的因素,那就是有的数可能是负数,应该用abs变成绝对值再进行运算 还有一点就是数值范围比较大  用int是不能全部通过的

以下是用bitset的AC代码:

#include<iostream>
#include<bitset>
#include<cmath>
using namespace std;const int M = 10000000;
long long n;
long long a[M];
long long ans = 0;long long solve(long long m){long long i = 0;while(pow(2, i) <= m)i++;return i;
}int main(){cin>>n;for(long long i = 0; i<n; i++){cin>>a[i];a[i] = abs(a[i]);}std::bitset<32> bit;for(long long i = 0; i<n; i++){bit = a[i];long long m = solve(a[i]);long long h = bit.count();long long  b = m - h;if(h > b)ans++;elseans--;}cout<<ans<<endl;return 0;
}

以下是不用bitset的AC代码:

    一个数除以2  则二进制就是向前移动一位  二进制末尾是0的话 则这个数十进制是偶数 若是1的话 这个数十进制就是奇数

则可通过这个不用bitset写出 而且感觉更简单

#include<iostream>
#include<cmath>
using namespace std;const int M = 100000+9;long long n;
long long a[M];int main(){cin>>n;long long ans = 0;for(long long i = 0; i<n; i++){cin>>a[i];long long a1 = 0, a0 = 0;a[i] = abs(a[i]);while(a[i] > 0){if(a[i] % 2 == 0)a0++;elsea1++;a[i] = a[i] / 2; }if(a1 > a0)ans++;elseans--;}cout<<ans<<endl;return 0;
}

 C题

地址:https://ac.nowcoder.com/acm/contest/696/C

题目描述:自从上次小w被奶牛踹了之后,就一直对此耿耿于怀。
于是"cow"成为了小w的禁忌,而长得和"cow"很像的"owc"…凡是同时含有"c","w","o"的都进入了他的禁忌名单。
小G想给他送一幅幅长为n个字符的长诗,但是又怕触犯他的禁忌。所以他决定要是诗中出现了他的禁忌就宁可不送,可是...他一写起诗来就忘了一切。小G想知道他有多少种的诗可能不触犯他的禁忌

注:小G只会用小写字母写诗

输入描述:一行一个整数n表示诗的长度

输出描述:一行一个整数表示小G有多少种可能的诗不触犯小W的禁忌,由于可能数也许过大,请对109+7取膜后输出

  这道题我所知道的有两种做法,其中一种很容易看出来,就是用dp解,dp[i][j]代表长度为i的诗里包含j种禁忌字母,我们可以算出n种长度j为0, 1, 2的dp大小 然后相加

dpAC:

#include<iostream>
using namespace std;const int M = 100000+9;
const long long mod = 1e9+7;
long long dp[M][3];int main(){int n;cin>>n;dp[1][0] = 23;dp[1][1] = 3;dp[1][2] = 0;for(int i = 2; i<=n ;i++){dp[i][0] = (dp[i-1][0] * 23) % mod;dp[i][1] = (dp[i-1][0] * 3 + dp[i-1][1] * 24) % mod;dp[i][2] = (dp[i-1][1] * 2 + dp[i-1][2] * 25) % mod;}long long ans = (dp[n][0] + dp[n][1] + dp[n][2]) % mod;cout<<ans;return 0;
} 

  还有一种就是用容斥算法和快速幂解出,C(3,2)*pow(25,n)%mod - C(3,1)*pow(24,n)%mod + C(3,0)*pow(23, n)%mod

容斥AC:

#include<iostream>
using namespace std;const int M = 100000+6;
const long long mod = 1e9+7;
typedef long long ll;ll quickPow(ll a, ll b, ll c){ll ans = 1;while(b > 0){if(b&1){ans = ans * a % c;}a = a * a % c;b>>=1;}return ans;
}int main(){int n;cin>>n;ll ans;if(n < 3) ans = quickPow(26, n, mod); ans = (3*quickPow(25, n, mod) - 3*quickPow(24, n, mod) + quickPow(23, n, mod)+3*mod)% mod;cout<<ans;
} 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这篇关于牛客OI周赛9-普及组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/268168

相关文章

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

LeetCode --- 413周赛

题目列表 3274. 检查棋盘方格颜色是否相同 3275. 第 K 近障碍物查询 3276. 选择矩阵中单元格的最大得分 3277. 查询子数组最大异或值 一、检查棋盘方格颜色是否相同 题目给定两个字符串来表示两个方格的坐标,让我们判断这两个方格的颜色是否相同,这里我们要观察棋盘的颜色特征,我们就会发现奇数行的奇数列和偶数行的偶数列是黑色,其他都是白色,所以我们可以直接计算出每个方

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

牛客《剑指Offer》 -- 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 特别注意负数的情况,出现负数,将其转化为正数然后求倒数。 class Solution {public:double Power(double base, int exponent) {double total = 1;bool flag = false

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f

牛客网《剑指Offer》 矩形覆盖

题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution {public:int rectCover(int number) {if(number==0) return 0;if(number==1) return 1;if(number==2) return 2;retu