讨论
ABC296 CDE 题解 -fangyanli
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 }}