XP03A_3模拟赛答案
2025-08-02 20:36:07
发布于:浙江
宁可粉身碎骨,也在所不辞。冒着被禁言的危险发的答案(考试期间),为了帮助大家,如果你荣幸点开,你就是非常幸运的人了,祝你AC!———滚蛋吧c++
T1:除法
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
if(n%2==0) cout<<n/2;
if(n%2!=0) cout<<n/2+1;
return 0;
}
T2:甜筒在哪里
#include<bits/stdc++.h>
using namespace std;
int apple[10000100];
int main(){
int n,x;
cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>apple[i];
}
int ans=-1;
for(int i=1;i<=n;i++){
if(apple[i]<x&&apple[i]%2==0){
ans=apple[i];
}
}
cout<<ans;
return 0;
}
T3:奖学金
#include <bits/stdc++.h>
using namespace std;
long long n;
struct node{
long long yu,shu,ying;
long long id,all;
}apple[50005];
bool cmp(node x,node y){
if(x.all!=y.all) return x.all>y.all;
else if(x.all==y.all) return x.yu>y.yu;
else if(x.yu==y.yu) return x.id<y.id;
}
int main(){
cin >> n;
for (int i=1;i<=n;i++){
cin>>apple[i].yu>>apple[i].shu>>apple[i].ying;
apple[i].all=apple[i].yu+apple[i].shu+apple[i].ying;
apple[i].id=i;
}
sort(apple+1,apple+n+1,cmp);
if (n>5) for(int i=1;i<=5;i++) cout<<apple[i].id<<" "<<apple[i].all<<endl;
else if(n>=1) for(int i=1;i<=n;i++) cout<<apple[i].id<<" "<<apple[i].all<<endl;
return 0;
}
T4:查找
#include<bits/stdc++.h>
using namespace std;
int n,m;
int apple[1000001];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>apple[i];
}
while(m--){
int x;
cin>>x;
int f = lower_bound(apple+1,apple+1+n,x) - apple;
if(apple[f] == x)cout<<f<<" ";
else cout<<-1<<" ";
}
}
T5:连通块问题(DFS)
#include<bits/stdc++.h>
#define N 200010
using namespace std;
int p[N],s[N];
int n,m,a,b,x,y;
int apple(int x){
if (p[x]!=x) p[x]=apple(p[x]);
return p[x];
}
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++){
p[i]=i;
s[i]=1;
}
for (int i=1;i<=m;i++){
cin>>a>>b;
if (apple(a)!=apple(b)) s[p[apple(b)]]+=s[p[apple(a)]];
p[apple(a)]=apple(b);
}
cin>>x>>y;
if (apple(x)!=apple(y)) cout<<0;
else cout<<s[p[apple(x)]];
return 0;
}
T6:木材加工
#include<bits/stdc++.h>
using namespace std;
int apple[1000010];
int n,m;
int main(){
cin>>n>>m;
int l=1,r=0,mid,ans;
for(int i=1;i<=n;i++){
cin>>apple[i];
r=max(r,apple[i]);
}
while(l<=r){
int mid=(l+r)/2;
int sum=0;
for(int i=1;i<=n;i++) sum+=apple[i]/mid;
if(sum>=m){ans=mid;l=mid+1;}
else r=mid-1;
}
cout<<ans;
return 0;
}
T7:拼接质数1(方法1)
#include<bits/stdc++.h>
using namespace std;
int n,ans,vis[1010],a[1010];
bool apple(int n){
if(n<2) return 0;
for (int i=2;i<n;i++){
if (n%i==0) return 0;
}
return 1;
}
void check(){
int sum=0;
for (int i=1;i<=n;i++) if(vis[i]) sum+=a[i];
if (apple(sum)) ans++;
return;
}
void pear(int now){
if (now==n+1){
check();
return;
}
vis[now]=1;
pear(now+1);
vis[now]=0;
pear(now+1);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
pear(1);
cout<<ans;
return 0;
}
T8:快速幂
#include <iostream>
using namespace std;
long long l,n,m;
long long apple(long long x,long long y){
long long ans = 1;
while(y){
if(y&1){
ans=ans*x%l;
}
x=x*x%l;
y>>=1;
}
return ans;
}
int main(){
cin>>n>>m>>l;
cout<<n<<"^"<<m<<" mod "<<l<<"="<<apple(n,m);
return 0;
}
谢谢
全部评论 3
开个玩笑
2小时前 来自 浙江
0666
2小时前 来自 浙江
0我们一个班的,你坐在哪?
2小时前 来自 浙江
0第二排最左边的前面的右后方的右边的后面的左边的左边的前面
2小时前 来自 浙江
0
加油!祝你AC!
2小时前 来自 浙江
0冒险在考试未结束的时候发
2小时前 来自 浙江
0
有帮助,赞一个