Acwing第 30 场周赛完结
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Acwing第 30 场周赛完结相关的知识,希望对你有一定的参考价值。
4197. 吃苹果【签到】
https://www.acwing.com/problem/content/4200/
#include<bits/stdc++.h>
using namespace std;
int n,h,x,ans;
int main(void)
cin>>n>>h;
for(int i=0;i<n;i++)
cin>>x;
if(x>h) ans++;
ans++;
cout<<ans;
return 0;
4198. 最长合法括号子串【栈 / 模拟】
https://www.acwing.com/problem/content/4201/
这里的栈是直接存下标,便于计算长度。
#include<bits/stdc++.h>
using namespace std;
int maxv,cnt=1;
stack<int>st;
int main(void)
string s; cin>>s;
for(int i=0;i<s.size();i++)
if(st.size()&&s[st.top()]=='('&&s[i]==')') st.pop();
else st.push(i);
int r;
if(st.size()) r=i-st.top();
else r=i+1;
if(r>maxv) maxv=r,cnt=1;
else if(r&&r==maxv) cnt++;
cout<<maxv<<" "<<cnt;
return 0;
4199. 公约数【分解约数 二分】
https://www.acwing.com/problem/content/4202/
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
unordered_map<LL,int>mp;
void solve(LL x)
for(int i=1;i<=x/i;i++)
if(x%i==0)
mp[i]++;
if(i==x/i) continue;
mp[x/i]++;
int main(void)
LL a,b; cin>>a>>b;
solve(a),solve(b);
vector<int>ve;
for(auto i=mp.begin();i!=mp.end();i++)
if(i->second>=2) ve.push_back(i->first);
sort(ve.begin(),ve.end());
int q; cin>>q;
while(q--)
int l,r; cin>>l>>r;
int L=lower_bound(ve.begin(),ve.end(),l)-ve.begin();
int R=upper_bound(ve.begin(),ve.end(),r)-ve.begin();
if(L>=R) puts("-1");
else cout<<ve[R-1]<<endl;
return 0;
其实,知道分解a和b的最大公约数即可
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
unordered_map<LL,int>mp;
LL gcd(LL a,LL b)return b?gcd(b,a%b):a;
void solve(LL x)
for(int i=1;i<=x/i;i++)
if(x%i==0)
mp[i]++;
if(i==x/i) continue;
mp[x/i]++;
int main(void)
LL a,b; cin>>a>>b;
solve(gcd(a,b));
vector<int>ve;
for(auto i=mp.begin();i!=mp.end();i++) ve.push_back(i->first);
sort(ve.begin(),ve.end());
int q; cin>>q;
while(q--)
int l,r; cin>>l>>r;
int L=lower_bound(ve.begin(),ve.end(),l)-ve.begin();
int R=upper_bound(ve.begin(),ve.end(),r)-ve.begin();
if(L>=R) puts("-1");
else cout<<ve[R-1]<<endl;
return 0;
手写二分
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
unordered_map<LL,int>mp;
LL gcd(LL a,LL b)return b?gcd(b,a%b):a;
void solve(LL x)
for(int i=1;i<=x/i;i++)
if(x%i==0)
mp[i]++;
if(i==x/i) continue;
mp[x/i]++;
int main(void)
LL a,b; cin>>a>>b;
solve(gcd(a,b));
vector<int>ve;
for(auto i=mp.begin();i!=mp.end();i++) ve.push_back(i->first);
sort(ve.begin(),ve.end());
int q; cin>>q;
while(q--)
int l,r; cin>>l>>r;
int L=0,R=ve.size()-1;
while(L<R)
int mid=L+R+1>>1;
if(ve[mid]<=r) L=mid;
else R=mid-1;
if(ve[L]>=l&&ve[L]<=r) cout<<ve[L]<<endl;
else cout<<-1<<endl;
return 0;
以上是关于Acwing第 30 场周赛完结的主要内容,如果未能解决你的问题,请参考以下文章