抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

1.A:奇数和数组

题目描述

给你一个由n个整数组成的数组a。
在一次移动中,您可以选择两个下标 1≤i,j≤n,i≠j并且设置ai:=aj。您可以执行这样的移动任意次数(可能是零次)。您可以在不同的操作中选择不同的下标。
操作:=是赋值的操作(即选择 i 和 j 并用 aj 替换 a i)。
你的任务是判断是否有可能得到一个元素之和为奇数(不能被2整除)的数组。

1.A:奇数和数组

题目描述

给你一个由n个整数组成的数组a。
在一次移动中,您可以选择两个下标 1≤i,j≤n,i≠j并且设置ai:=aj。您可以执行这样的移动任意次数(可能是零次)。您可以在不同的操作中选择不同的下标。
操作:=是赋值的操作(即选择 i 和 j 并用 aj 替换 a i)。
你的任务是判断是否有可能得到一个元素之和为奇数(不能被2整除)的数组。

输入

输入的第一行包含一个整数t(1≤t≤2000)——测试用例的数量。

接下来的2t行描述了测试用例。

测试用例的第一行包含一个整数n(1≤n≤2000)——a中的元素数。

测试用例的第二行包含n个整数a1,a2,…,an (1≤ai≤2000),其中ai是a的第I个元素 保证所有测试用例的n之和不超过2000 (∑n≤2000)。

输出

对于每个测试用例,如果能得到一个奇数元素和的数组,输出“YES”(不加引号),否则为“NO”。

样例输入

5
2
2 3
4
2 2 8 8
3
3 3 3
4
5 5 5 5
4
1 1 1 1

样例输出

YES
NO
YES
NO
NO

参考程序

2.B:暗箱操作

题目描述

有两个英语菜鸡lzh和xzy,每个人所能解决的问题都不一样,每个学期的英语考试到了,对于每一个英语题目都有一个相应的分数且每道题的相应分数p_i不能小于1,所有题目的分数总和最低的人就获得挂科重修再来一次,作为lzh好朋友的你,为了让lzh的英语考试分数比xzy高,你需要偷偷操控每题的分数p_i,但是如果p_i太大,lzh就会因为作弊被抓住,所以你要做的就是最小化所有英语题目中的最大分数p_i。

输入

第一行包含一个整数n(1<=n<=100)代表英语题目的数量

第二行有n个整数r1,r2 …,rn (0<=ri<=1).ri=1意味着lzh会i-题目,ri=0意味着它不会i- 题目

第三行有n个整数b1,b2, …,bn (0<=bi<=1).bi=1意味着xzy会i-题目,bi=0意味着它不会i- 题目

输出

如果你不能通过任何手段让lzh的分数大于xzy就输出-1
否则输出你在所有项目中修改分数的最大值

样例输入

5
1 1 1 0 0
0 1 1 1 1

样例输出

3

提示

对于样例来说,你只需要把第一道题的分数改为3,第二道题的分数改为1,第三道题的分数改为3,第四道题的分数改为1,第五题的分数改为1
那么lzh的得分就是3+1+3=7,而xzy的得分是1+3+1+1=6,lzh的分数就比xzy的高了

参考程序

3.C:简简单单A+B

题目描述

给出三个整数 A,B,N; 1<A,B,N<1e9

我们可以进行如下操作

操作 1:让A=A+B;

操作 2:让B=A+B;

问最少需要多少次操作 可以使max(A,B)严格大于N max(a,b)为(A,B中较大的那个)

输入

第一行一个整数T 代表测试组数

下面T行 1<T<100

每行三个整数 A,B,N 意义如题所示 1<A,B,N<1e9

输出

输出T行

每行一个整数 代表所需要的最少操作

样例输入

2
1 2 3
5 4 100

样例输出

2
7

参考程序

4.D:淘淘的暗号

题目描述

淘淘的暗号为一串由n个小写字母组成的字符串b,原文a生成b的方法为a中从左到右将每个长度为2的子串加入到b中,例如a串为’abcd’,那么子串从左到右的顺序为’ab’,’bc’,’cd’,则b为’abbccd’

输入

输入长为n(3<=n<=100000)的暗号b

输出

输出原文a

样例输入

abbaac

样例输出

abac

参考程序

#include<string.h>
#include<iostream>
using namespace std;
int main(){
    int n;
    char s[100001];
    gets(s);
    n=strlen(s);
    int i=0;
    while(i<=n-1){
        cout<<s[i]; 
        i+=2;
    }
    cout<<s[n-1];
    return 0;
} 

5.E:淘淘的序列

题目描述

对于一个长为n的数字序列中的每个数字ai,若当i为奇数时ai也为奇数,则称它为淘淘序列。同时,淘淘每次可以将序列中两个任意数字交换位置,求出淘淘需要多少次交换能将一个序列变为淘淘序列

注意 :i从0开始

输入

第一行输入一个整数n(1<=n<=100000),第二行输入n个整数ai(0<=i<=n-1)

输出

输出一个整数,代表淘淘最小需要做多少次交换操作能将给定序列变为淘淘序列,若不能变成淘淘序列输出-1

样例输入

4
3 2 7 6

样例输出

2

参考程序

6.F:打牌

题目描述

sys和llf在打牌,他们觉得现有的玩法太简单,所以他们玩起了摸牌游戏
规则如下

有N张牌
两个人轮流摸牌 每次摸牌的数量只能是2的幂次 比如 1,2,4,8,16 ……
当轮到某人摸牌,此人若无牌可摸,败
llf先手摸牌
他们两人都会采取最优策略去摸牌

输入

第一行一个数T 代表测试组数

下面N行每行一个数N 意义如题所示

输出

输出T行

若先手赢 输出llfnb

否则输出sysnb

样例输入

4
1
3
4
12

样例输出

llfnb
sysnb
llfnb
sysnb

参考程序(我自己打的)

#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
int main(){
    int t,i,ans=1;
    long long l;
    cin>>t;
    while(t--){
        ans=1;
        cin>>l;
            if(l%3==0)
                ans=0;
            if(ans==0)
            cout<<"sysnb"<<endl;
            else
            cout<<"llfnb"<<endl;
        }
            return 0;
    }

题解

根据案例不难清楚当牌的数量为3的倍数时,都是先手输,所以可知,该问题被简化成倍数问题,在比赛中这样的规律可能不易发觉,要认真审题

评论