Acwing第 30 场周赛【完结】
生活随笔
收集整理的這篇文章主要介紹了
Acwing第 30 场周赛【完结】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 4197. 吃蘋果【簽到】
- 4198. 最長合法括號子串【棧 / 模擬】
- 4199. 公約數【分解約數 二分】
4197. 吃蘋果【簽到】
https://www.acwing.com/problem/content/4200/
4198. 最長合法括號子串【棧 / 模擬】
https://www.acwing.com/problem/content/4201/
這里的棧是直接存下標,便于計算長度。
4199. 公約數【分解約數 二分】
https://www.acwing.com/problem/content/4202/
其實,知道分解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 场周赛【完结】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客月赛42题解【完结】
- 下一篇: 第1章、蓄势待发准备篇