个人以为 ABC 变得越来越难了/kk/kk/kk
比赛链接:ABC376
Problem A:
Code
- #include <bits/stdc++.h>
- using namespace std;
- int main(){
- int N,C;
- cin>>N>>C;
- for(int i=1;i<=N;i++)
- cin>>T[i];
- int ans=0,pre=-1e5;
- for(int i=1;i<=N;i++){
- if(T[i]-pre>=C){
- ans++;
- pre=T[i];
- }
- }
- cout<<ans<<endl;
- return 0;
- }
复制代码 Problem B:
我愿称之为史上最难 B 没有之一。
Sol
暴力模仿即可。注意细节。
Code
- #include <bits/stdc++.h>
- using namespace std;
- int main(){
- int N,Q;
- cin>>N>>Q;
- int l=1,r=2,ans=0;
- while(Q--){
- char H;
- int T;
- cin>>H>>T;
- if(H=='L'){
- if((l<T && T<r) || (T<r && r<l) || (r<l && l<T)){
- for(;l!=T;l++){
- if(l==N+1)
- l=1;
- if(l==T)
- break;
- ans++;
- }
- }
- else{
- for(;l!=T;l--){
- if(l==0)
- l=N;
- if(l==T)
- break;
- ans++;
- }
- }
- }
- else{
- if((l<T && T<r) || (r<l && l<T) || (T<r && r<l)){
- for(;r!=T;r--){
- if(r==0)
- r=N;
- if(r==T)
- break;
- ans++;
- }
- }
- else{
- for(;r!=T;r++){
- if(r==N+1)
- r=1;
- if(r==T)
- break;
- ans++;
- }
- }
- }
- }
- cout<<ans<<endl;
- return 0;
- }
复制代码 Problem C:
我以为 C>D。
Sol
二分套二分。思量二分答案。在 check 函数中又要二分第一个大于等于 的数。在代码中,我选择了二分答案的下标。
Code
- #include <bitch/stdc++.h>
- using namespace std;
- const int maxn=200005;
- int N,A[maxn],B[maxn];
- bool check(int x){
- for(int i=1;i<=N;i++){
- if(i==x)
- continue;
- if(A[i]>B[i-(i>x)])
- return false;
- }
- return true;
- }
- int main(){
- cin>>N;
- for(int i=1;i<=N;i++)
- cin>>A[i];
- for(int i=1;i<N;i++)
- cin>>B[i];
- sort(A+1,A+N+1);
- sort(B+1,B+N);
- int l=1,r=N;
- while(l<r){
- int mid=(l+r)>>1;
- if(check(mid))
- r=mid;
- else
- l=mid+1;
- }
- if(check(l))
- cout<<A[l]<<endl;
- else
- cout<<-1<<endl;
- return 0;
- }
复制代码 Problem D:
Sol
思量 bfs。从 1 开始,只要第二次遍历到 1 就输出即可。
Code
- #include <bits/stdc++.h>
- using namespace std;
- const int maxn=200005;
- bool vis[maxn];
- vector<int> graph[maxn];
- queue<pair<int,int>> que;
- int bfs(){
- while(!que.empty()){
- pair<int,int> u=que.front();
- que.pop();
- for(auto v:graph[u.first]){
- if(v==1)
- return (u.second+1);
- if(!vis[v]){
- que.push(make_pair(v,u.second+1));
- vis[v]=true;
- }
- }
- }
- return -1;
- }
- int main(){
- int N,M;
- cin>>N>>M;
- for(int i=1;i<=M;i++){
- cin>>a>>b;
- graph[a].push_back(b);
- }
- que.push(make_pair(1,0));
- cout<<bfs()<<endl;
- return 0;
- }
复制代码 友情提醒:不要无脑Ctrl C+Ctrl V
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |