题意:简单的栈
思路:stack
代码:
#include<bits/stdc++.h>
using namespace std;
int const N=1e4+5;
#define int long long
int fa[500005];
int d[500005];
int you[200005];
void solve(){
string s;
int n;
cin>>n;
cin>>s;
stack<char>st;
for (int i = 0; i <n ; ++i) {
if(s[i]=='Q')st.push('Q');
else{
if(st.size()){
st.pop();
}
}
}
if(st.size()==0){
cout<<"Yes\n";
}
else{
cout<<"No\n";
}
}
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
}
题意:给一个n的序列,构造一个相邻两数之差的最小值最大的序列
思路:比如是8,我们可以构建成4 8 3 7 2 6 1 5,即最大为4,如果有奇数,在开头加一个n
代码:
#include<bits/stdc++.h>
using namespace std;
int const N=1e4+5;
#define int long long
int fa[500005];
int d[500005];
int you[200005];
void solve(){
int n;
cin>>n;
if(n%2){
cout<<n<<' ';
n--;
}
for (int i = n/2,cnt=0; i >=1 ; --i) {
cout<<i<<' '<<n-cnt<<' ';
cnt++;
}
cout<<endl;
}
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
}
题意:给一个为1和-1数组,有一种操作,可以使区间[l,r]上的奇数位置的数字变为相反数,问你把数组分为几个区间可以使他们的和为0,如果不行,输出-1
思路:当个数为奇数时不可以,偶数都可以,当相邻的两项为相反数时,我们把他们放到单位为1的区间,自身就是一个区间,如果相等,则放到长度为2的区间
代码:
#include<bits/stdc++.h>
using namespace std;
int const N=1e4+5;
#define int long long
int fa[500005];
int d[500005];
int you[200005];
void solve(){
int n;
cin>>n;
vector<int>q(n+1);
if(n&1){
for (int i = 0; i <n ; ++i) {
int x;
cin>>x;
}
cout<<"-1\n";
}
else{
vector<pair<int,int>>ans;
for (int i = 1; i <=n ; i+=2) {
int x,y;
cin>>x>>y;
if(x==y){
ans.push_back({i,i+1});
}
else{
ans.push_back({i,i});
ans.push_back({i+1,i+1});
}
}
cout<<ans.size()<<endl;
for (auto i:ans) {
cout<<i.first<<' '<<i.second<<endl;
}
}
}
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
}
题意:上面题的hard版本,数组不止有1,-1,还会有0;
思路:把0去掉然后记录-1,1的下标,如果是奇数个,那就不行,如果是偶数个,我们可以延续上题的思路,只不过,如果这个区间是10001,那么我们分为100 和01,后一个区间的1前面有一个0,如果是1000,-1,那么就可以分为独立的5个区间,然后我们标记一下1相邻的1和-1之间的0,其他0分为独立区间,然后排序,输出
代码:
#include<bits/stdc++.h>
using namespace std;
int const N=1e4+5;
#define int long long
int fa[500005];
int d[500005];
int you[200005];
void solve(){
int n;
cin>>n;
vector<pair<int,int>>q;
vector<pair<int,int>>ans;
for (int i = 1; i <=n ; ++i) {
int x;
cin>>x;
if(x%2!=0){
q.push_back({x,i});
}
}
if(q.size()&1){
cout<<"-1\n";
return;
}
else{
for (int i = 0; i <q.size() ; i+=2) {
if(q[i].first==q[i+1].first){
if(q[i].second+1==q[i+1].second){
ans.push_back({q[i].second,q[i+1].second});
}
else{
ans.push_back({q[i].second,q[i+1].second-2});
ans.push_back({q[i+1].second-1,q[i+1].second});
}
}
else{
ans.push_back({q[i].second,q[i].second});
ans.push_back({q[i+1].second,q[i+1].second});
}
}
vector<int>vis(n+1);
for (auto i:ans) {
for (int j = i.first; j <=i.second ; ++j) {
vis[j]=1;
}
}
for (int i = 1; i <=n ; ++i) {
if(!vis[i]){
ans.push_back({i,i});
}
}
sort(ans.begin(),ans.end());
cout<<ans.size()<<endl;
for (auto i:ans) {
cout<<i.first<<' '<<i.second<<endl;
}
}
}
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】