Codeforces Round #829 (Div. 2)——(ABC1)题解

news/2024/11/24 0:57:13/

一、解题思路

1.A. Technical Support——1754A

题目分析:题目给定了一串字符串,字符串包含了两种字符一个为‘Q’表示问题,另一个字符'A'表示回答问题,题目要求输出是否对于每个问题,都做出了解答,若是输出YES,否则输出NO。注意:对于一个问题可以有多个回答,一个问题可以被延后回答。

思路:遍历字符串统计问题和回答是否匹配,若当前字符为‘Q’则统计次数加一,代表需要回答的问题加1,若当前字符为‘A’则统计次数减1,代表需要回答的问题被减少一个,若对于当前字符为‘Q’时,统计次数小于0,说明对于之前问题的回答,有多个,则对于当前问题没有回答,则需要重置统计次数为0,然后再计数。

2.B. Kevin and Permutation——1754B

题目分析:题目给定了一个1到n的序列,要求将该序列重新组合,使得所有连续两个数绝对值中的最小值尽可能大,并输出排好序的序列

思路:因为题目要求连续两个数中绝对值最小的尽可能大,则我们构造的序列任意两个数其绝对值要大于等于某一个值,若该值为\left \lfloor n/2 \right \rfloor,则对于1到\left \lfloor n/2 \right \rfloor,都有对应满足差值的数,若n为奇数则最后一个数n与第\left \lfloor n/2 \right \rfloor也满足该差值,所以我们可以构造一个序列令x=\left \lfloor n/2 \right \rfloor,则有

n为偶数:x,1,x+1,2,x+2,...,x+x,x

n为奇数:x,1,x+1,2,x+2,...,x+x,x,n

3.C1. Make Nonzero Sum (easy version)——1754C1

题目分析:给定一串仅包含-1或1的序列,要求将这些序列分成k块,并保证所有块的和加起来为0        

对于一块序列s_{i},其左区间为a_{li},右区间为a_{ri},该序列的和计算方法为

s_{i} = a_{li}a_{li+1}+a_{li+2}a_{li+3}+…±a_{ri}

思路:我们发现任意两个数进行运算都得到一个偶数,则若要求最后所有块的和加起来为0,序列总数n需要为偶数

当我们考虑两个数的区间,若区间内的两个数相同,则相减得0,若不同则将这两个数的区间分成两个含一个数的区间,两个区间和相加得0,通过该方法可以构造总和为0的区间块

二、代码实现

1.A. Technical Support——1754A

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<set>using namespace std;#define iforn(i,a,b)    for(int i=a;i<b;i++)
#define dforn(i,a,b)    for(int i=a;i>=b;i--)
typedef long long LL;void solve(){int n;string str;cin >>n >>str;int cnt=0;iforn(i,0,n){if(str[i]=='Q') {if(cnt<0)  cnt=0;cnt++;}else cnt--;}if(cnt<=0)  puts("YES");else puts("NO");
}int main(){int t;cin >>t;iforn(i,0,t)    solve();return 0;
}

2.B. Kevin and Permutation——1754B

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<set>using namespace std;#define iforn(i,a,b)    for(int i=a;i<b;i++)
#define dforn(i,a,b)    for(int i=a;i>=b;i--)
typedef long long LL;void solve(){int n;cin >>n;int d=n>>1;iforn(i,1,d+1){cout <<i+d <<" " <<i <<" " <<endl;}if(n&1) cout <<n; cout <<endl;
}int main(){int t;cin >>t;iforn(i,0,t)    solve();return 0;
}

3.C1. Make Nonzero Sum (easy version)——1754C1

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<set>
#include<vector>using namespace std;#define iforn(i,a,b)    for(int i=a;i<b;i++)
#define dforn(i,a,b)    for(int i=a;i>=b;i--)
typedef long long LL;
typedef pair<int,int> PII;
const int N=2e5+10;
int a[N];void solve(){int n;cin >>n;iforn(i,1,n+1)  scanf("%d",&a[i]);if(n&1) puts("-1");else {vector<PII> vt;for(int i=1;i<=n;i+=2){if(a[i]==a[i+1]) vt.push_back({i,i+1});else vt.push_back({i,i}),vt.push_back({i+1,i+1});}printf("%d\n",vt.size());for(auto i:vt)   printf("%d %d\n",i.first,i.second);}
}int main(){int t;cin >>t;iforn(i,0,t)    solve();return 0;
}

 


http://www.ppmy.cn/news/541263.html

相关文章

windows微信协议|PC微信协议829版

最新windows协议|PC微信协议829版采用最新算法,达到非常稳定的效果&#xff0c;自己研发&#xff0c;功能多&#xff0c;并发量高&#xff0c;稳定好用&#xff0c;不掉线&#xff0c;不封号。mmtls是基于1.3的tls协议简化修改而来&#xff0c;根据某公司的描述&#xff0c;这种…

Codeforces Round #829 (Div. 1) C.Wish I Knew How to Sort(概率dp/期望线性性)

题目 给一个长度为n(n<2e5)的01串&#xff0c;每次随机选两个不同的下标(i,j)&#xff0c; 若ai>aj&#xff0c;则交换&#xff0c;问序列排成增序的期望次数&#xff0c;答案是一个分数&#xff0c;对998244353取模 实际是t(t<1e5)组样例&#xff0c;但n的总长不超…

Codeforces Round #829 (Div. 2)E - Wish I Knew How to Sort(dp期望)1024水个题解,最近感觉没什么时间刷算法

题意&#xff1a; 给你一个01组成的序列&#xff0c;现在让你进行两两交换后&#xff0c;让序列非递减。求操作的期望 思路&#xff1a; c n t 0 cnt0 cnt0&#xff1a;我们统计有多少个0在序列中&#xff0c; 那么最终的序列要保证前 c n t 0 cnt0 cnt0个都是0&#xff0c;…

Codeforces Round #829 (Div. 2)

A. Technical Support 题目链接&#xff1a;Problem - A - Codeforces 样例输入&#xff1a; 5 4 QQAA 4 QQAQ 3 QAA 1 Q 14 QAQQAQAAQQQAAA样例输出&#xff1a; Yes No Yes No Yes题意&#xff1a;给定一个长度为n的字符串&#xff0c;字符串中的所有字符都是Q或者A&#…

Codeforces Round #829 (Div. 2) A~D

比赛链接&#xff1a;Dashboard - Codeforces Round #829 (Div. 2) - Codeforces 目录 A. Technical Support B. Kevin and Permutation C1. Make Nonzero Sum (easy version) C2. Make Nonzero Sum (hard version) D. Factorial Divisibility A. Technical Support …

829考纲 数据结构部分

1.数据结构基本概念及简单算法分析 &#xff08;1&#xff09;数据结构基本概念 &#xff08;2&#xff09;算法的定义、特性 &#xff08;3&#xff09;简单的算法分析&#xff1a;时间复杂度、空间复杂度 2.线性表 &#xff08;1&#xff09;顺序表和链表的存储与基本操…

用Java编程开发“六级单词强化记忆”游戏

&#xff08;0&#xff09;在网上下载英语六级词汇表&#xff0c;中英文对应。保存在服务器端&#xff0c;服务器可以让1个客户端连入。客户端初始分数为10分。 以下功能1和功能2&#xff0c;选做1个。功能3必做。 &#xff08;1&#xff09;功能1&#xff1a;根据中文补齐英…

面试

Sony笔试题   1&#xff0e;完成下列程序   *   *.*.   *..*..*..   *...*...*...*...   *....*....*....*....*....   *.....*.....*.....*.....*.....*.....   *......*......*......*......*......*......*......   *.......*.......*.......*.......*...…