8.11欢乐赛
8.11欢乐赛
A.AK的距离
AK的距离 | ||
|
问题描述
同学们总想AK。
于是何老板给出一个由大写字母构成的字符串,他想你帮忙找出其中距离最远的一对'A'和'K'。
比如下列字符串:
BKABGKWAXKA
距离最远一对'A'和'K'的间距为6,它们之间间隔了6个字符。
输入格式
一行,一个由大写字母构成的字符串
输出格式
一个整数,表示A和K最远的间距。要求A必须在K的左侧,如果不存在,输出-1
样例输入 1
BKABGKWAXKA
样例输出 1
6
样例输入 2
KKKKKKKKKKAAAAAAAAAAAAAAA
样例输出 2
-1
提示
1<=字符串的长度<=10000
正排找出第一个‘A’,再找出最后一个‘K’,再算距离
很水就不说了。。。。
1 // 2 #include<stdio.h> 3 #include<bits/stdc++.h> 4 using namespace std; 5 string s; 6 int sum,a,b; 7 int main() 8 { 9 cin>>s; 10 for(int i=1; i<=s.size(); i++)//第一个A 11 { 12 if(s[i]=='A') 13 { 14 a=i; 15 break; 16 } 17 } 18 for(int i=1; i<=s.size(); i++)//最后一个K 19 { 20 if(s[i]=='K') 21 { 22 b=i; 23 } 24 } 25 if(b-a<0) 26 { 27 cout<<"-1"; 28 return 0; 29 } 30 cout<<b-a-1; 31 return 0; 32 }
B.方块消消乐
B方块消消乐 | ||
|
问题描述
何老板在玩一款消消乐游戏,游戏虽然简单,何老板仍旧乐此不疲。
游戏一开始有n个边长为1的方块叠成一个高为n的柱子。
有红色和蓝色两种方块。
游戏操作:玩家选择两个相邻且不同色的方块,将它们消除。然后上方的方块会自动落下来,使得剩下的方块始终保持柱状。
玩家可以进行任意次上述操作,消除的方块越多,得分越高。何老板想知道:最多能消除掉多少方块?
输入格式
一个由0和1构成的字符串,表示游戏开始时的方块柱子。其中0表示蓝色方块,1表示红色方块。
输出格式
一个整数,表示最多能消除的方块数。
样例输入 1
0011
样例输出 1
4
样例输入 2
11011010001011
样例输出 2
12
样例输入 3
0
样例输出 3
0
提示
设字符串的长度为n
1<=n<=10^5
用字符数组存储数字(可直接cin>>s)
算出1和0中出现次数最少的个数再*2就是答案了(简单的贪心,不解释)
1 #include<stdio.h> 2 #include<bits/stdc++.h> 3 using namespace std; 4 char s[100005]; 5 int cnt1,cnt0,len; 6 int main() 7 { 8 cin>>s; 9 len=strlen(s); 10 for(int i=0;i<len;i++) 11 { 12 if(s[i]=='0')cnt0++; 13 if(s[i]=='1')cnt1++; 14 } 15 cout<<2*min(cnt1,cnt0); 16 }
C怪兽游戏
C怪兽游戏 | ||
|
问题描述
何老板在玩一款怪兽游戏。游戏虽然简单,何老板仍旧乐此不疲。
游戏一开始有N只怪兽,编号1到N。其中第i只怪兽的生命值为 Ai,如果一只怪兽的生命值>0,那么它还活着。
游戏中,玩家可以反复进行下列操作: 任选一只活着的怪兽X,操控它去攻击任意一只活着的怪兽Y,被攻击的怪兽Y损失的生命值为攻击者X的当前的生命值。
当还剩一只活着的怪兽时,游戏结束。剩余那只怪兽的生命值越小,玩家在此局游戏的得分就越高。
何老板想知道,最后活着那只怪兽的生命值,最小可能是多少,请你帮他算一算。
输入格式
第一行,一个整数N
第二行,N个空格间隔的整数A1 ,A2,A3......An
输出格式
一个整数,表示能够存活的怪兽的最小生命值
样例输入 1
4
2 10 8 40
样例输出 1
2
样例输入 2
4
5 13 8 1000000000
样例输出 2
1
样例输入 3
3
1000000000 1000000000 1000000000
样例输出 3
1000000000
提示
2<=n<=10^5
1<=Ai<=10^9
对消,求所有值的最大公因数
1 // 2 #include<stdio.h> 3 #include<bits/stdc++.h> 4 using namespace std; 5 int a[100005]; 6 int n,ans; 7 int main() 8 { 9 cin>>n; 10 for(int i=1;i<=n;i++) 11 cin>>a[i]; 12 ans=a[1]; 13 for(int i=2;i<=n;i++) 14 ans=__gcd(ans,a[i]); 15 cout<<ans<<endl; 16 }
D翻骰子
D翻骰子 | ||
|
问题描述
何老板有一个骰子,骰子是一个正方体,六个面上的点数分别是1到6,其中相对两面的点数之和总是7。
何老板把骰子摆放在桌子上,他可以任选一面朝上。接下来他将进行如下操作:
将骰子翻动90度,翻动后新的一面将朝上。如下图所示,原本1点朝上的骰子,将骰子翻动后,可能是2、3、4、5朝上。新朝上那一面的点数,将是这一次翻动所得到的分数。
现在给出一个指定分数X,何老板想知道,最少翻动几次就能使总得分数>=X。
输入格式
一个整数X
输出格式
一个整数,表示最少需要翻动的次数
样例输入 1
7
样例输出 1
2
样例说明:
一开始可以使2点朝上。
翻转,使得3点朝上,得分3
翻转,使得5点朝上,得分5
总得分8,翻转次数2
样例输入 2
149696127901
样例输出 2
27217477801
样例输入 3
65
样例输出 3
12
样例输入 4
1
样例输出 4
1
提示
1 #include<stdio.h> 2 #include<bits/stdc++.h> 3 using namespace std; 4 long long n,ans; 5 #pragma GCC optimize(2) 6 #pragma GCC optimize(3) 7 #pragma GCC optimize("Ofast") 8 #pragma GCC optimize("inline") 9 #pragma GCC optimize("-fgcse") 10 #pragma GCC optimize("-fgcse-lm") 11 #pragma GCC optimize("-fwhole-program") 12 #pragma GCC optimize("-freorder-blocks") 13 #pragma GCC optimize("-fschedule-insns") 14 #pragma GCC optimize("inline-functions") 15 #pragma GCC optimize("-ftree-tail-merge") 16 int main() 17 { 18 cin>>n; 19 ans+=n/11; 20 if(n%11==0) 21 { 22 cout<<2*ans; 23 return 0; 24 } 25 if(n%11-6<=0) 26 { 27 cout<<2*ans+1; 28 return 0; 29 } 30 if(n%11-6>0) 31 { 32 cout<<2*ans+2; 33 return 0; 34 } 35 }