ABC296 CDE 题解 -fangyanli

fangyanli 2023-08-03 13:18:34 2023-08-03 13:19:10 5

C题

题意:有一个长度为的数组,给定,求有无a-a=

思路:用set直接解决

代码

#include<bits/stdc++.h>
using namespace std;
int n,x;
set<int> s;
int main(){
	cin>>n>>x;
	for(int i=1;i<=n;i++){
		int y;cin>>y;
		s.insert(y);
	}
	int nn=s.size();
	for(int i=1;i<=nn;i++){
		int y=*s.begin();
		if(s.find(y+x)!=s.end()||s.find(y-x)!=s.end()){
			cout<<"Yes";
			return 0;
		}
		s.erase(s.find(y));
	}
	cout<<"No";
}

D题

题意:在1~N区间选,两个正整数,使并输出最小 ; 无解输出-1

思路:枚举,计算 , 时当场退出

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans=LLONG_MAX;
signed main(){
	cin>>n>>m;
	for(int a=1;a<=n;a++){
		int b=m/a;
		if(m%a!=0){
			b++;
		}
		if(b<=n){
			ans=min(ans,a*b);
		}
		if(a>b) break;
	}
	if(ans==LLONG_MAX) cout<<-1;
	else cout<<ans;
}

E题

题意:一共N个数存入a数组,N轮游戏,每轮先手操作k次,后手选数x(1≤x≤N),每次操作把x替换为a , 若第i轮的结果为i,后手赢,否则先手赢,输出后手能赢几轮

思路:拓扑排序即可

代码

#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int n,a[200001],in[200001];
queue<int> q;
signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		in[a[i]]++;
	}
	for(int i=1;i<=n;i++){
		if(in[i]==0){
			q.push(i);
		}
	}
	while(q.size()){
		int now=q.front();
		q.pop();
		n--;
		in[a[now]]--;
		if(in[a[now]]==0) q.push(a[now]);
	}
	cout<<n;
}
{{ vote && vote.total.up }}