ABC345(A-C)

2024-03-17 03:04
文章标签 abc345

本文主要是介绍ABC345(A-C),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A - Leftrightarrow(100 points)

语法题,输入一个字符串,判断是否是:< = \cdots= >的样式,输入后只需判断是第一个和最后一个字符是否分别为">"和"<",再判断中间是否都是"="即可。

#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define pb push_back
#define fast() ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;typedef pair<char,int> PCI;
typedef pair<int,int> PII;
const int N = 2e5+10;
int n,m;
void solve(){string s;cin>>s;if(s[0]!='<'||s[s.length()-1]!='>'){cout<<"No"<<endl;return ;}//判断首尾是否满足要求else{for(int i=1;i<s.length()-1;i++){if(s[i]!='='){cout<<"No"<<endl;return ;}}//判断中间是否满足要求cout<<"Yes"<<endl;return ;}
}int main()
{fast();int t=1;//cin>>t;while(t--){solve();}return 0;
}

B- Integer Division Returns(200 points)

数学题,\left \lceil x \right \rceil表示不小于 x 的最小整数,向上取整

1.对于非负数,由于c++中整形除法自动向下取整,当x能整除10的时候,就是x/10,不能整除时答案为:x/10+1;

2.对于负数,刚好就是x/10,(试出来的【doge】)

#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define pb push_back
#define fast() ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;typedef pair<char,int> PCI;
typedef pair<int,int> PII;
const int N = 2e5+10;void solve(){ll n;cin>>n;if(n%10==0||n<0){cout<<n/10;}//负数和正整除情况else{cout<<n/10+1<<endl;}//正数不整除情况return ;
}int main()
{fast();int t=1;//cin>>t;while(t--){solve();}return 0;
}

C - One Time Swap(350 points)

数据比较大,如果暴力枚举每对字符,时间复杂度为:O(n^{2}),显然会TLE。但是我们发现对于一个长度为n的字符串来讲,所有选择的方式有C_{n}^{2}种,其中如果选择的字符相同,结果都只能得到原字符串,正难则反:

得到新的字符串的对数=所有选择的对数-只得到原字符串的对数

只有字符相同才会得到原串,所以我们用map储存各个字符的个数,计算每种字符交换的种类并累加:\sum C_{i}^{2},预处理时间复杂度降至O(n+k)(k是字符的种类),相减就是能得到新字符串的对数,别忘了如果有相同字符串还会得到原字符串,所以如果有相同字符串还要加1,

最最最后: 十年OI一场空,开long long 见祖宗!

#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define pb push_back
#define fast() ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;typedef pair<char,int> PCI;
typedef pair<int,int> PII;
const int N = 2e5+10;void solve(){string s;cin>>s;ll n=s.length();map<char,ll> mp;for(auto i:s){mp[i]++;}ll ans=0;ll d=0;int key=0;for(auto i:mp){if(i.second>1)key=1;d+=i.second*(i.second-1)/2;}if(key==1)cout<<n*(n-1)/2-d+1<<endl;else cout<<n*(n-1)/2-d<<endl;return ;}int main()
{fast();int t=1;//cin>>t;while(t--){solve();}return 0;
}

D- Tiling(450 points)

数据很小,暴力枚举就行,但我不会【doge】,之后再补吧。

这篇关于ABC345(A-C)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817603

相关文章

ABC345 D Tiling 题解

DTiling: 题目大意:   思路解析: 可以发现总共只有7个方块,那么使用这七个方块填充整个地图的可能性只有128种组合,然后每次填充之后遍历100个格子并且判断以这个点作为图块的左上角能不能满足约束条件,那么时间复杂度128*100*100 * 2,有这么多可放的情况,如果每个情况都新建一个地图,那么时间复杂度为128 * 100 * 100 * 2 * 100因为这个时间复杂度是

ABC345 A-D 题解

文章目录 A题目AC Code: B题目 C题目AC Code: D题目AC Code: A 题目 我们判断输入的字符串两头是否是两个箭头,再判断中间共 ∣ s ∣ − 2 |s|-2 ∣s∣−2 个字符是否是等号,如果全部是,说明这个字符串是符合条件的,否则,不符合条件。 AC Code: #include <algorithm>#include <iostream