A - Leftrightarrow(100 points)
语法题,输入一个字符串,判断是否是:的样式,输入后只需判断是第一个和最后一个字符是否分别为">"和"<",再判断中间是否都是"="即可。
#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)
数学题,表示不小于 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)
数据比较大,如果暴力枚举每对字符,时间复杂度为:,显然会TLE。但是我们发现对于一个长度为的字符串来讲,所有选择的方式有种,其中如果选择的字符相同,结果都只能得到原字符串,正难则反:
得到新的字符串的对数=所有选择的对数-只得到原字符串的对数
只有字符相同才会得到原串,所以我们用map储存各个字符的个数,计算每种字符交换的种类并累加:,预处理时间复杂度降至(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】,之后再补吧。