AtCoder Beginner Contest 284
A
没有什么难点,反着输出一遍就可以了。
#include<bits/stdc++.h>
using namespace std;
string a[2000];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=n;i;i--) cout<<a[i]<<'\n';
return 0;
}
B
每次判断 \(x\) 是不是奇数即可,记得清空 \(ans\)。
#include<bits/stdc++.h>
using namespace std;
int Ts,x,ans,n;
int main(){
cin>>Ts;
while(Ts--){
cin>>n;ans=0;
for(int i=1;i<=n;i++){
cin>>x;
if(x&1) ans++;
}cout<<ans<<'\n';
}
return 0;
}
C
模版求联通快个数的题目,考虑从一个没有染过色的点进行扩散,将可以扩散到达的点涂成相同的颜色,最后输出颜色数量就行了。
#include<bits/stdc++.h>
using namespace std;
const int N=200010;
int n,m,idx,head[N<<1];
int vis[N],cnt;
struct Edge{
int v,nxt;
}e[N<<1];
void add(int u,int v){
e[++idx]={v,head[u]},head[u]=idx;
}
void dfs(int now,int last){
vis[now]=cnt;
for(int i=head[now];i;i=e[i].nxt){
if(e[i].v!=last){
if(!vis[e[i].v]){
dfs(e[i].v,now);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
add(u,v),add(v,u);
}
for(int i=1;i<=n;i++){
if(!vis[i]){
cnt++;
dfs(i,-1);
}
}
cout<<cnt<<'\n';
return 0;
}
D
根据试除法我们可以想到枚举 \(2\) 到 \(^3\sqrt{n}\) 求解 \(q,p\),然后就直接模拟即可。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int Ts,n,p,q;
signed main(){
cin>>Ts;
while(Ts--){
cin>>n;
p=q=0;
for(int i=2;i*i*i<=n;i++){
if(n%i) continue;
if((n/i)%i==0) p=i,q=n/i/i;
else q=i,p=(int)round(sqrt(n/i));
break;
}
cout<<p<<' '<<q<<'\n';
}
}
标签:AtCoder,int,题解,namespace,cin,Ts,ans,using,284
From: https://www.cnblogs.com/Merge-Change230/p/18531185