【LGR-172-Div.4】洛谷入门赛 #19(A—H,c++详解!)

文章目录

  • 【LGR-172-Div.4】洛谷入门赛 #19
  • A.分饼干 I
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 提示
      • 样例解释 1
      • 样例解释 2
      • 数据范围与约定
      • 思路:
    • 代码
  • B.分饼干 II
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 提示
      • 数据规模与约定
    • 思路
    • 代码
  • C.跳房子
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 提示
      • 样例 1 解释
      • 样例 2 解释
      • 数据规模与约定
    • 思路
    • 代码
  • D 区间函数最小值
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
      • 样例解释 #1
      • 数据规模与约定
    • 思路
    • 代码
  • E.小跳蛙
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
      • 样例解释 #1
      • 数据规模与约定
    • 思路
    • 代码
  • F.图像变换
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
      • 数据规模与约定
    • 思路
    • 代码
  • G.二进制与一
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
      • 样例 1 说明
      • 数据规模与约定
    • 思路
    • 代码
  • H.Genshin 玩家
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 提示
      • 数据规模与约定
    • 思路
    • 代码
  • 总结:


【LGR-172-Div.4】洛谷入门赛 #19

A.分饼干 I

题目描述

洛谷网校举行了期末考试,同学们经过课程的学习,考出了优异的成绩。

Z 在考试中获得了第一名,yz 在考试中获得了第二名,老师决定买一些饼干奖励两名小朋友。

老师买了三盒饼干,第一盒有 a a a 块饼干,第二盒有 b b b 块饼干,第三盒有 c c c 块饼干。老师决定将这三盒饼干奖励给 Z 和 yz,三盒饼干不可以被拆开奖励。

老师希望 Z 拿到的饼干块数不少于 yz,但又希望两人拿到的饼干数量差距尽可能小,请问 Z 和 yz 各拿到几块饼干?

输入格式

输入一行三个整数,分别为 a , b , c a,b,c a,b,c

输出格式

输出一行两个整数,由空格分隔。第一个整数代表 Z 拿到的饼干数量,第二个整数代表 yz 拿到的饼干数量。

样例 #1

样例输入 #1

3 1 5

样例输出 #1

5 4

样例 #2

样例输入 #2

3 3 5

样例输出 #2

6 5

提示

样例解释 1

Z 拿走 5 5 5 块饼干,yz 拿走 3 + 1 = 4 3+1=4 3+1=4 块饼干。

样例解释 2

Z 拿走 3 + 3 = 6 3+3=6 3+3=6 块饼干,yz 拿走 5 5 5 块饼干。

数据范围与约定

  • 对于 30 % 30\% 30% 的测试数据, a = b = c a=b=c a=b=c
  • 对于 100 % 100\% 100% 的测试数据, 1 ≤ a , b , c ≤ 1000 1 \le a,b,c \le 1000 1a,b,c1000

思路:

题目有两个要求,最重要的是Z 拿到的饼干块数不少于 yz!!!在满足前者的前提下第二个要求是希望两人拿到的饼干数量差距尽可能小。

代码

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
#define repn(i,o,n) for(int i=o;i<=n;i++)
#define rep(i,o,n) for(int i=o;i<n;i++)
int a[4];void solve(){repn(i,1,3) cin>>a[i];sort(a+1,a+4);int ans1,ans2;if(a[1]+a[2]!=a[3]){//两个小的加起来和最大的不相等,取较大值的已给第一名if(a[1]+a[2]>a[3]){ans1=a[1]+a[2];ans2=a[3];}else{ans1=a[3];ans2=a[1]+a[2];}}else{//!!!两者相等时,题目要求了Z 拿到的饼干块数不少于 yzans1=a[3]+a[1];//有要求两者差距尽可能小,所以我们拿一个最大的和一个最小的ans2=a[2];}cout<<ans1<<' '<<ans2;
} signed main(){
//	IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}
/**/

B.分饼干 II

题目描述

老师有 N N N 块饼干,要分给 k k k 名小朋友。

每名小朋友至少拿到一块饼干,老师想让每名小朋友拿到的饼干数量都不一样多,请问老师能否实现这个目标。

输入格式

本题单个测试点内有多组测试数据。

输入共 T + 1 T + 1 T+1 行。

输入第一行为一个整数 T T T,代表测试数据组数。
接下来 T T T 行,每行两个整数,分别为 N , k N,k N,k

输出格式

输出共 T T T 行,依次对应 T T T 组测试数据。如果该组测试数据

  • 可以实现,输出 Yes
  • 无法实现,输出 No

样例 #1

样例输入 #1

1
1 1

样例输出 #1

Yes

样例 #2

样例输入 #2

1
5 3

样例输出 #2

No

提示

数据规模与约定

  • 对于 50 % 50\% 50% 的测试数据 1 ≤ k ≤ 1000 1 \le k \le 1000 1k1000 1 ≤ N ≤ 1 0 6 1 \le N \le 10^6 1N106
  • 对于 100 % 100\% 100% 的测试数据, 1 ≤ k , N ≤ 1 0 9 1 \le k,N \le 10^9 1k,N109

思路

  • 题意大概是N块饼干分给k个小朋友,每个小朋友至少拿一块饼干,并且,内每个小朋友拿到的饼干数量都不一样。
  • 既然每个小朋友分到的数量都不一样,那我们不妨从1个饼干开始分,1,2,3,······,k. 这样就保证了每个小朋友分到的数量都不一样。不难发现这是一个等差数列,我们根据等差数列求和公式得到总和sum,如果sum>n,说明饼干太少啦>﹏<,根本不够分啊!如果sum<=n,我们就可以分成k份,保证了两两各不相同。

代码

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long void solve(){int n,k;cin>>n>>k;if(n==1) {//注意特判一下cout<<"Yes"<<endl;return ;}  int sum=(1+k)*k/2;if(sum>n) cout<<"No"<<endl;else cout<<"Yes"<<endl;} signed main(){
//	IOS;int T=1;cin>>T;while(T--){solve();}return 0;
}
/**/

C.跳房子

题目背景

跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一,趣味性、娱乐性极强,曾深受广大儿童的喜爱。

题目描述

现在我们给出一种简易跳房子游戏的玩法:

n n n 个格子从左到右一字形排开,从左到右依次被标号为 1 , 2 , ⋯ , n 1, 2, \cdots, n 1,2,,n。每一个格子上都有一个正整数, i i i 号格子上的正整数是 a i a _ i ai

这个游戏的规则如下:初始时玩家站在 1 1 1 号格子上,需要做若干次跳跃。每一次跳跃时,玩家需要从当前格子向前跳「当前格子上写的整数」数量的格子。形式化地讲,如果玩家当前处于 x x x 号格子,玩家需要跳到 x + a x x + a _ x x+ax 号格子上。

如果玩家跳到 n n n 号格子右侧的位置,称玩家出界;如果玩家恰好跳到 n n n 号格子上,称玩家胜利。这两种情况下玩家都需要停止跳跃。

现在给定格子数量和格子上的整数,你需要求解:

  1. 在停止跳跃后,玩家是否胜利。即,玩家是否能够恰好跳到 n n n 号格子上。
  2. 在停止跳跃后,玩家跳跃的总次数。

输入格式

输入共两行。

第一行为一个整数 n n n,代表格子的数量。
第二行为 n n n 个整数 a 1 , a 2 , ⋯ , a n a _ 1, a _ 2, \cdots, a _ n a1,a2,,an,代表每个格子上的数字。

输出格式

输出共两行。

第一行为一个字符串。如果玩家在停止跳跃后恰好跳到 n n n 号格子上,输出 Yes,否则输出 No
第二行一个整数,代表玩家的总跳跃次数。

样例 #1

样例输入 #1

6
1 1 3 7 8 5

样例输出 #1

Yes
3

样例 #2

样例输入 #2

4
2 7 3 5

样例输出 #2

No
2

提示

样例 1 解释

样例 2 解释

数据规模与约定

对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 1 0 6 1 \leq n \leq 10 ^ 6 1n106 1 ≤ a i ≤ 1 0 4 1 \leq a _ i \leq 10 ^ 4 1ai104

测试点编号 n n n特殊性质
1 1 1 = 1 = 1 =1
2 ∼ 4 2 \sim 4 24 ≤ 100 \leq 100 100
5 5 5 ≤ 1 0 6 \leq 10 ^ 6 106 a i = 1 a _ i = 1 ai=1
6 , 7 6, 7 6,7 ≤ 1 0 6 \leq 10 ^ 6 106 a i = 2 a _ i = 2 ai=2
8 ∼ 10 8 \sim 10 810 ≤ 1 0 6 \leq 10 ^ 6 106

思路

模拟题,按照题目要求模拟即可,具体步骤请看代码

代码

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
#define repn(i,o,n) for(int i=o;i<=n;i++)
#define rep(i,o,n) for(int i=o;i<n;i++)
const int N = 2e6+10, INF=1e18+10;
int a[N];void solve(){int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];int res=0,i=1,now=1;if(n==1){//特判!!!cout<<"Yes"<<endl;cout<<0<<endl;return ;}while(1){now+=a[i];//移动a[i]步i+=a[i];//注意下标也要加a[i]res++;//步数加1if(now==n){//到达终点,游戏结束!cout<<"Yes"<<endl;cout<<res;return;}//cout<<now<<' '<<i<<endl;if(now>n) break;//越界,游戏结束!}cout<<"No"<<endl;cout<<res;
} signed main(){
//	IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}
/**/

D 区间函数最小值

题目描述

给定 A , B , C , D , E , F , G , P , X 1 , X 2 , Y 1 , Y 2 A, B, C, D, E, F, G, P, X_1, X_2, Y_1, Y_2 A,B,C,D,E,F,G,P,X1,X2,Y1,Y2,求当 X 1 ≤ x ≤ X 2 X _ 1 \leq x \leq X _ 2 X1xX2 Y 1 ≤ y ≤ Y 2 Y _ 1 \leq y \leq Y _ 2 Y1yY2 x , y x, y x,y 均为整数时

f ( x , y ) = ( A x 3 + B y 3 + C x 2 y + D x y 2 + E x y + F x + G y ) m o d P f(x, y) = (A x ^ 3 + B y ^ 3 + C x ^ 2 y + Dxy ^ 2 + Exy + Fx + Gy) \bmod P f(x,y)=(Ax3+By3+Cx2y+Dxy2+Exy+Fx+Gy)modP

的最大值。

输入格式

输入共一行十二个整数 A , B , C , D , E , F , G , P , X 1 , X 2 , Y 1 , Y 2 A, B, C, D, E, F, G, P, X_1, X_2, Y_1, Y_2 A,B,C,D,E,F,G,P,X1,X2,Y1,Y2

输出格式

输出一个整数,代表 f ( x , y ) f(x, y) f(x,y) 的最大值。

样例 #1

样例输入 #1

3 2 5 6 1 4 2 998244353 1 2 1 3

样例输出 #1

266

提示

样例解释 #1

x x x 1 1 1 2 2 2 之间的整数, y y y 1 1 1 3 3 3 之间的整数时,函数 f ( x , y ) f(x,y) f(x,y) 的值如下:

f ( 1 , 1 ) = 23 , f ( 1 , 2 ) = 63 , f ( 1 , 3 ) = 139 f ( 2 , 1 ) = 70 , f ( 2 , 2 ) = 144 , f ( 2 , 3 ) = 266 f(1,1)=23,\ f(1,2)=63,\ f(1,3)=139\\ f(2,1)=70,\ f(2,2)=144,\ f(2,3)=266 f(1,1)=23, f(1,2)=63, f(1,3)=139f(2,1)=70, f(2,2)=144, f(2,3)=266

最大值为 f ( 2 , 3 ) f(2,3) f(2,3),即 266 266 266

数据规模与约定

对于 100 % 100\% 100% 的数据,保证 1 ≤ A , B , C , D , E , F , G , P ≤ 1 0 9 1 \leq A, B, C, D, E, F, G, P \leq 10 ^ 9 1A,B,C,D,E,F,G,P109 1 ≤ X 1 ≤ X 2 ≤ 1 0 3 1 \leq X _ 1 \leq X _ 2 \leq 10 ^ 3 1X1X2103 1 ≤ Y 1 ≤ Y 2 ≤ 1 0 3 1 \leq Y _ 1 \leq Y _ 2 \leq 10 ^ 3 1Y1Y2103

思路

遍历一遍(x,y)即可,刚开始以为是个数论题哈哈,吓得直接跳过了,回头一看数据范围x,y只有1e3,也就是说暴力的话时间复杂度为O(n^2),1e6不会超时间限制!

代码

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
#define repn(i,o,n) for(int i=o;i<=n;i++)
#define rep(i,o,n) for(int i=o;i<n;i++)
const int N = 2e5+10, INF=1e18+10;
int a,b,c,d,e,f,g,p,X1,X2,Y1,Y2;int calc(int x,int y){return (a*x*x*x+b*y*y*y+c*x*x*y+d*x*y*y+e*x*y+f*x+g*y)%p; 
}void solve(){cin>>a>>b>>c>>d>>e>>f>>g>>p>>X1>>X2>>Y1>>Y2;int res=0;for(int i=X1;i<=X2;i++)for(int j=Y1;j<=Y2;j++){res=max(res,calc(i,j));}cout<<res<<endl;} signed main(){
//	IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}
/**/

E.小跳蛙

题目背景

idea 提供者: bj12z_jiasiyuan

验题:卷王

题目描述

n − 1 n - 1 n1 只小跳蛙在池塘中,依次被编号为 1 , 2 , ⋯ , n − 1 1, 2, \cdots, n - 1 1,2,,n1。池塘里有 n n n 个位置,每一个位置上有一个数字 a i a_i ai。如果 a i = 0 a_i = 0 ai=0,则表示这个位置是一个空位;否则表示这个位置上存在一个编号为 a i a_i ai 的小跳蛙。

接下来的 n − 1 n-1 n1 分钟,小跳蛙们将进行跳跃。第 i i i 分钟,编号为 i i i 的小跳蛙将跳到空位上。

请你输出 n − 1 n-1 n1 分钟后池塘中每个位置的数字,即每个位置是否为空、小跳蛙编号是多少。

输入格式

输入共两行。

第一行一个整数 n n n
第二行 n n n 个整数 a 1 , a 2 , ⋯ , a n a _ 1, a _ 2, \cdots, a _ n a1,a2,,an

输出格式

输出一行 n n n 个整数 a 1 , a 2 , ⋯ , a n a _ 1, a _ 2, \cdots, a _ n a1,a2,,an。 表示 n − 1 n-1 n1 分钟后池塘的状态。

样例 #1

样例输入 #1

5
1 2 0 3 4

样例输出 #1

2 3 1 4 0

提示

样例解释 #1

  • 第一分钟后池塘状态:0 2 1 3 4
  • 第二分钟后池塘状态:2 0 1 3 4
  • 第三分钟后池塘状态:2 3 1 0 4
  • 第四分钟后池塘状态:2 3 1 4 0

因此最终池塘的状态为 2 3 1 4 0

数据规模与约定

对于 50 % 50\% 50% 的数据, 1 ≤ n ≤ 1 0 3 1 \leq n \leq 10 ^ 3 1n103

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 6 1 \leq n \leq 10^6 1n106,保证序列 a a a 是一个 0 ∼ n − 1 0 \sim n - 1 0n1 这些数字的排列。

思路

可以用map记录编号对应的下标,第i分钟就让编号为i的蛤蟆与空位(即编号0)交换位置

代码

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
#define repn(i,o,n) for(int i=o;i<=n;i++)
#define rep(i,o,n) for(int i=o;i<n;i++)
const int N = 1e6+10, INF=1e18+10;
int n,a[N];
unordered_map<int,int> mp;//编号->下标的映射void solve(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];mp[a[i]]=i;}for(int i=1;i<=n;i++){int x=mp[i];//编号为i的下标int y=mp[0];//编号为0的下标swap(a[x],a[y]);//交换位置mp[0]=x;mp[i]=y;
//		for(int i=1;i<=n;i++)
//		cout<<a[i]<<' ';//		cout<<endl;}for(int i=1;i<=n;i++)cout<<a[i]<<' ';
} signed main(){IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}
/**/

F.图像变换

题目描述

一张字符图片由 n n n m m m 列,共 n × m n\times m n×m 个字符组成,第 i i i 行第 j j j 列的字符为 s i , j s_{i,j} si,j。如下图所示,为一个 4 × 3 4\times 3 4×3 的字符图片。

%%%
$$$
@w@
!!!

现在,需要将图像放大 k k k 倍,得到 k n × k m kn \times km kn×km 的图片。原图片的每个字符都需要重复 k 2 k^2 k2 次,作为新图像中 k × k k\times k k×k 的一个区域,各字符的相对位置不变。

将上面给出的例子放大 2 2 2 倍,将得到如下图像:

%%%%%%
%%%%%%
$$$$$$
$$$$$$
@@ww@@
@@ww@@
!!!!!!
!!!!!!

输入格式

输入 n + 1 n+1 n+1 行。

输入的第一行为三个整数 n , m , k n,m,k n,m,k

接下来 n n n 行,每行 m m m 个字符,表示字符图片。

输出格式

输出 n k nk nk 行,每行 m k mk mk 个字符,表示变换后的字符图片。

样例 #1

样例输入 #1

4 3 2
%%%
$$$
@w@
!!!

样例输出 #1

%%%%%%
%%%%%%
$$$$$$
$$$$$$
@@ww@@
@@ww@@
!!!!!!
!!!!!!

提示

数据规模与约定

  • 对于 30 % 30\% 30% 的测试数据,输入的字符画仅包含一种字符;
  • 对于 100 % 100\% 100% 的测试数据, 1 ≤ n , m ≤ 100 1 \le n, m \le 100 1n,m100 1 ≤ k ≤ 10 1 \le k \le 10 1k10,输入的字符仅包含 ASCII 码不超过 127 的可见字符。

思路

观察样例,我们可以看出每个字符需要输出k次,横纵长度都扩大了k倍

代码

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
#define repn(i,o,n) for(int i=o;i<=n;i++)
#define rep(i,o,n) for(int i=o;i<n;i++)
const int N = 2e3+10, INF=1e18+10;
int n,m,k;
char g[N][N];void solve(){cin>>n>>m>>k;repn(i,1,n)repn(j,1,m) cin>>g[i][j];for(int i=1;i<=n;i++){for(int u=1;u<=k;u++){//每个字母输出k次for(int j=1;j<=m;j++){for(int p=1;p<=k;p++) cout<<g[i][j];}  cout<<endl;//注意换行}}	
} signed main(){
//	IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}
/**/

G.二进制与一

题目描述

给定一个正整数 n n n,以及操作次数 q q q。对于每次操作,给出一个正整数 k k k,要求:让 n n n 加上一个非负整数 x x x,使得 n n n 在二进制下的第 k k k 位(从右往左数)是 1 1 1,并在符合要求的情况下,令 x x x 最小。

请注意,每次操作都会让 n n n 变为 n + x n + x n+x,会影响后续操作。

小山需要求出,所有的 x x x 之和是多少。

输入格式

输入共 q + 1 q + 1 q+1 行。

第一行两个整数 n n n q q q
接下来 q q q 行,每行一个正整数 k k k,表示要让 n n n 在二进制下从右往左数的第 k k k 位是 1 1 1

输出格式

一行一个整数,表示所有的 x x x 之和。

样例 #1

样例输入 #1

5 3
2
3
4

样例输出 #1

3

提示

样例 1 说明

5 5 5 在二进制下是 101 101 101

  • 对于第一次操作,需要让 101 101 101 的第二位变为 1 1 1,则需让 101 101 101 加上 1 1 1,变为 110 110 110
  • 对于第二次操作,需要让 110 110 110 的第三位是 1 1 1,由于 110 110 110 的第三位本身就是一,所以无需改变;
  • 第三次操作同理,需要让 110 110 110 加上 2 2 2

最终输出结果是 1 + 0 + 2 = 3 1+0+2=3 1+0+2=3

数据规模与约定

对于 100 % 100\% 100% 的数据, 1 ≤ n < 2 32 , 1 ≤ q ≤ 1 0 5 , 1 ≤ k ≤ 32 1\le n < 2^{32},1\le q\le 10^5,1 \le k\le 32 1n<2321q1051k32

测试点编号 n n n q q q k k k
1 1 1 ≤ 4 \leq 4 4 ≤ 10 \leq 10 10 ≤ 2 \leq 2 2
2 , 3 2, 3 2,3 ≤ 4 \leq 4 4 ≤ 10 \leq 10 10 ≤ 32 \leq 32 32
4 , 5 4, 5 4,5 ≤ 1024 \leq 1024 1024 ≤ 1000 \leq 1000 1000 ≤ 10 \leq 10 10
6 , 7 6, 7 6,7 < 2 32 < 2 ^ {32} <232 ≤ 10 \leq 10 10 ≤ 32 \leq 32 32
8 ∼ 10 8 \sim 10 810 < 2 32 < 2 ^ {32} <232 ≤ 1 0 5 \leq 10 ^ 5 105 ≤ 32 \leq 32 32

思路

考察的二进制位运算,手写一下我们发现我们需要取后k位,那么该怎么取呢?比如n=6,二进制是110去后两位,1<<2是100,此时再减一变为011,在与上n为010,即可取得后两位,取后k位亦是如此。
再用1<<(k-1)减去n的后k位即为让从右往左数的第 k 位变为 1差的值。

代码

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
#define repn(i,o,n) for(int i=o;i<=n;i++)
#define rep(i,o,n) for(int i=o;i<n;i++)
const int N = 2e5+10, INF=1e18+10;void solve(){int n,q,sum=0;cin>>n>>q;while(q--){int k;cin>>k;//cout<<n<<' '<<(1<<(k-1))<<endl;if(n&(1LL*1<<(k-1))) continue;//已经是1 int x=(1LL*1<<(k-1))-n&((1LL*1<<k)-1);n+=x;sum+=x;//cout<<"**"<<x<<endl;}cout<<sum;} signed main(){
//	IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}
/**/

H.Genshin 玩家

题目背景

你说得对,后面忘了。

题目描述

在洛谷入门赛/语言月赛出题 QQ 群里,著名洛谷管理员蓝边铅球老师的群名片是『原神玩家』。

现在,扶苏给了你一个字符串 s s s,她想请你求出:有多少种方案可以在 s s s 中取出两个子串 s [ l 1 , r 1 ] , s [ l 2 , r 2 ] s[l_1, r_1], s[l_2, r_2] s[l1,r1],s[l2,r2],满足:

  • 1 ≤ l 1 ≤ r 1 ≤ l 2 ≤ r 2 ≤ ∣ s ∣ 1 \leq l_1 \leq r_1 \leq l_2 \leq r_2 \leq |s| 1l1r1l2r2s,这里 ∣ s ∣ |s| s 表示字符串 s s s 的长度。
  • s [ l 1 , r 1 ] s[l_1, r_1] s[l1,r1] 表示由 s s s 的第 l 1 l_1 l1 个字符到第 r 1 r_1 r1 个字符构成的字符串, s [ l 1 , r 1 ] = Genshin s[l_1, r_1] = \texttt{Genshin} s[l1,r1]=Genshin
  • s [ l 2 , r 2 ] s[l_2, r_2] s[l2,r2] 表示由 s s s 的第 l 2 l_2 l2 个字符到第 r 2 r_2 r2 个字符构成的字符串, s [ l 2 , r 2 ] = player s[l_2, r_2] = \texttt{player} s[l2,r2]=player

两个方案不同,当且仅当两个方案中 l 1 , r 1 , l 2 , r 2 l_1, r_1, l_2, r_2 l1,r1,l2,r2 至少有一个对应不同。

输入格式

输入只有一行,表示字符串 s s s

输出格式

输出一行一个整数表示答案。

样例 #1

样例输入 #1

Genshinplayerplayer

样例输出 #1

2

样例 #2

样例输入 #2

ExpectedIsAGenshinplayerWhoLikesToBeAGenshinplayer

样例输出 #2

3

提示

数据规模与约定

  • 30 % 30\% 30% 的数据,保证 ∣ s ∣ ≤ 50 |s| \leq 50 s50
  • 60 % 60\% 60% 的数据,保证 ∣ s ∣ ≤ 200 |s| \leq 200 s200
  • 100 % 100\% 100% 的数据,保证 1 ≤ ∣ s ∣ ≤ 2000 1 \leq |s| \leq 2000 1s2000 s s s 中仅含大小写英文字母。

思路

主要就是找字串再在主串中出现的次数,先找s1=“Genshin”,然后再找s2="player"出现的次数,然后再找下一个s1,以及下一个s1后面s2出现了多少次,直到找不到s1。这里用find函数来查找子串。其实也可以用kmp算法求字串,不过有点麻烦,属实是杀鸡用牛刀了( ̄︶ ̄)。

代码

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
#define repn(i,o,n) for(int i=o;i<=n;i++)
#define rep(i,o,n) for(int i=o;i<n;i++)
const int N = 2e5+10, INF=1e18+10;
string s1="Genshin",s2="player";void solve(){string s;cin>>s;int res=0;int pos1=s.find(s1,0);while(s.find(s1,pos1)!=-1){if(pos1!=-1){int pos2=s.find(s2,pos1),num=0;while(s.find(s2,pos2)!=-1){num++;pos2=s.find(s2,pos2+1);}res+=num; 
//			cout<<num<<endl;}pos1=s.find(s1,pos1+1);}	cout<<res;
} signed main(){
//	IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}
/**/

总结:

本次比赛难度只有div4,但比赛中好几道没有全过,甚至有的只过了两三个点(H)。

  • 第一题分饼干I就想了好几分钟,脑子不清醒,写了一堆还有两三个点没过,赛后又想了想发现没有考虑到Z 拿到的饼干块数不少于 yz这个点,属于没认真读题了。
  • 第二题想了想可以用等差数列求和做,没卡多久。
  • 跳房子模拟就行,wa了两发,下标没有加a[i[值。
  • 小跳蛙比赛时没想出来,暴力做了
  • 二进制与一推了好久,属于是位运算基础不太行了
  • 最后一题思路是对的,但是实现起来出现了问题,对find函数的应用还是不太熟练啊!
  • 最后最重要的就是一个字要 稳!!!不能为了赶做题速度,从而落下题目中的关键点,还有就是脑袋要清醒啊,不能迷迷糊糊做题是吧,有的题比赛做不出来,赛后一想就知道思路了,归根结底还是没有深思熟虑!

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

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

相关文章

2024--Django平台开发-订单项目管理(十四)

day14 订单管理系统 1.关于登录 1.1 UI美化 页面美化&#xff0c;用BootStrap 自定义BooStrapForm类实现。 class BootStrapForm:exclude_filed_list []def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# {title:对象,"percent":对象}fo…

电路复习总结

又到了个人最喜欢的电路复习环节&#xff0c;废话不多说一个个复习过来 1.电路基本概念 2.向量表示 现在在看美少女老师教学某一种正弦交流电的办法学的就很舒服 知道复数和极坐标还挺重要可以便于后面数值计算 2024年1月18日19:44:57 根本整理不出来什么东西i 在学习中逐…

测试 ASP.NET Core 中间件

正常情况下&#xff0c;中间件会在主程序入口统一进行实例化&#xff0c;这样如果想单独测试某一个中间件就很不方便&#xff0c;为了能测试单个中间件&#xff0c;可以使用 TestServer 单独测试。 这样便可以&#xff1a; 实例化只包含需要测试的组件的应用管道。发送自定义请…

龙芯+RT-Thread+LVGL实战笔记(30)——电子琴演奏

【写在前面】正值期末,笔者工作繁忙,因此本系列教程的更新频率有所放缓,还望订阅本专栏的朋友理解,请勿催更。笔者在此也简要声明几点: 有些硬件模块笔者并没有,如LED点阵、压力传感模块、RFID模块等,因此这些模块的相关任务暂时无法给出经过验证的代码。其实,教程进行…

排序之归并排序

在计算机科学中&#xff0c;排序是一种常见的操作。它用于将一组元素按照一定的顺序排列。归并排序是一种非常有效的排序算法&#xff0c;其时间复杂度为O(nlogn)&#xff0c;空间复杂度为O(n)。本文将详细介绍归并排序的工作原理和实现方法。 归并排序的工作原理 归并排序的…

智慧之光:ChatGPT 引领工作效率新纪元

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐融入我们的日常生活和工作中。其中&#xff0c;ChatGPT 作为一种先进的 AI 技术&#xff0c;正逐步改变我们的工作方式&#xff0c;提升我们的工作效率。本文灸哥将介绍如何利用ChatGPT提升工作效率&…

Pytest插件pytest-django让Django测试更高效

在Django应用开发中&#xff0c;测试是确保应用质量的关键环节。然而&#xff0c;Django自带的测试框架并非总能满足开发者的需求&#xff0c;而Pytest插件 pytest-django 则为我们提供了更为灵活、强大的测试工具。本文将深入介绍 pytest-django 插件的基本用法和实际案例&…

后面的输入框与前面的联动,输入框只能输入正数(不用正则)

概要 提示&#xff1a;这里可以描述概要 前面的输入框是发票金额&#xff0c;后面的输入框是累计发票金额&#xff08;含本次&#xff09;--含本次就代表后倾请求的接口的数据&#xff08;不是保存后返显的-因为保存后返显的是含本次&#xff09;是不含本次的所以在输入发票金…

Linux基础命令[1]-ls

文章目录 1. ls 命令说明2. ls 常用命令参数2.1 -l&#xff08;展示详细信息&#xff09;2.2 -a/-A&#xff08;展示隐藏文件&#xff09;2.3 -t/-c/-r&#xff08;展示信息排序&#xff09;2.4 -h&#xff08;展示文件大小&#xff09;2.5 -R&#xff08;递归展示&#xff09;…

iphone5s基带部分电源部分主主电源供电及

时序: 1.,基带电源的供电&#xff0c;基带电源也叫pmu。 首先时序图说电池提供供电&#xff0c;电池是J6接口&#xff0c;视频习惯把接口称之为座子。查U2_RF芯片&#xff0c;发现供电信号为PP_BATT_VCC_CONN&#xff0c;但是没查到跟电池座子有关系&#xff0c;电池座子写的是…

linux C语言socket函数recv

recv 函数是在 Linux C 语言网络编程中用于从已连接的套接字接收数据的函数。它通常与 TCP 连接一起使用&#xff0c;但也可以用于 UDP&#xff08;尽管对于 UDP&#xff0c;更常使用 recvfrom&#xff0c;因为它还可以接收发送方的地址信息&#xff09;。 函数原型 recv 函数…

SpringMVC基础知识学习笔记

Universe Infinity Inc. 目录 一、学习SpringMVC主要是学什么1、SpringMVC的基本原理2、SpringMVC学习串联 二、快速体验SpringMVC的开发1、新建项目&#xff0c;转成web项目2、引入依赖3、编写Spring的配置类4、配置web启动类&#xff0c;替代web.xml5、编写Handler&#xff…

第十二篇【传奇开心果系列】Ant Design Mobile of React开发移动应用:内置组件实现酷炫CSS 动画

Ant Design Mobile of React 开发移动应用示例博文系列 第一篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:从helloworld开始 第二篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:天气应用 第三篇【传奇开心果系列】Ant Design Mobile of Reac…

beego的模块篇 - I18n国际化

1. i18n 安装导入 安装该模块&#xff1a; go get github.com/beego/i18n 导入引用包&#xff1a; import ("github.com/beego/i18n" ) conf 目录下就有 locale_en-US.ini 和 locale_zh-CN.ini 两个本地化文件。 本地化文件的文件名和后缀是随意的&#xff0c;不…

MySQL 索引(上)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL-进阶篇 &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现…

libpcap简明教程

文章目录 前言tcpdump的使用libpcap API的简单使用libpcap API的进阶使用 前言 因为之前简单写过wireshark入门指北&#xff0c;所以我知道基本的抓包流程。最近尝试调用libpcap的C API接口&#xff0c;顺道整理下。 本文实验如下&#xff1a; 使用tcpdump命令抓取目标地址为…

【漏洞复现】Hikvision SPON IP网络对讲广播系统命令执行漏洞(CVE-2023-6895)

文章目录 前言声明一、系统简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 Hikvision Intercom Broadcasting System是中国海康威视&#xff08;Hikvision&#xff09;公司的一个对讲广播系统。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播…

[已解决]前端使用el-upload,后端使用文件上传阿里云报错:异常信息:java.lang.NullPointerException: null

前端使用el-upload&#xff0c;后端使用文件上传阿里云报错&#xff1a; 报错原因&#xff1a;前端image参数未传进去 解决方法&#xff1a;在el-upload添加属性 name"image" 文件传进去了&#xff01;

回溯法:0-1背包问题

问题描述 给定种物品和一背包。 物品的重量是&#xff0c; 其价值为&#xff0c;背包的容量为 c。 问应该如何选择装入背包中的物品&#xff0c;使得装入背包中物品的总价值最大&#xff1f;注意物品不重复! 实例&#xff1a;物品价值V{12, 11, 9, 8}, 物品重量W{8, 6, 4, 3},…