8.11欢乐赛

空扰寡人 提交于 2019-11-26 23:50:41

                                             8.11欢乐赛

                                                                                                                                           

A.AK的距离

 

AK的距离
时间限制 : - MS   空间限制 : - KB 

评测说明 : 1s,128m
问题描述

同学们总想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方块消消乐
时间限制 : - MS   空间限制 : - KB 

评测说明 : 1s,128m
问题描述

何老板在玩一款消消乐游戏,游戏虽然简单,何老板仍旧乐此不疲。
游戏一开始有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怪兽游戏
时间限制 : - MS   空间限制 : - KB 

评测说明 : 1s,256m
问题描述

何老板在玩一款怪兽游戏。游戏虽然简单,何老板仍旧乐此不疲。
游戏一开始有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 }

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!