AtCoder 第392场初级竞赛 A-E题解

A Shuffled Equation(混洗方程)

【题目链接】

原题链接:A - Shuffled Equation

【考点】

判断

【题目大意】

整数序列A = (a1, a2, a3),对其任意排序,使得 a1 * a2 = a3,满足输出 "Yes",否则输出 "No"。

【解析】

三个变量全排,判断是否满足条件,有一个满足输出 "Yes"。

【难度】

GESP一级

【代码参考】

#include<bits/stdc++.h>
using namespace std;

int main(){
    int a1, a2, a3;
    cin >> a1 >> a2 >> a3;
    if(a1 * a2 == a3 || a1 * a3 == a2 || a2 * a3 == a1)cout << "Yes";
    else cout << "No";
}

B Who is Missing?(谁不见了?)

【题目链接】

原题链接:B - Who is Missing?

【考点】

数组、排序

【题目大意】

给定一个整数序列 M 。每个元素 A 是介于 1 和 N 之间的整数,包括两端,且所有元素都是唯一的。列出介于 1 和 N 之间的所有不在 A 中的整数,按升序排列。

【解析】

建一个桶,记录 M 序列里出现的整数,最后遍历桶里元素,找到不为0的,输出下标。

【难度】

GESP三级

【代码参考】

#include<bits/stdc++.h>
using namespace std;

int main(){
    int a[1005], n, m;
    cin >> n >> m;
    memset(a, 0, sizeof(a));
    for(int i = 1; i <= m; i++){
    	int x;
    	cin >> x;
    	a[x]++;
	}
	if(n - m == 0){
		cout << 0 << endl;
		return 0;
	}
	cout << n - m << endl;
	for(int i = 1; i <= n; i++){
		if(!a[i]){
			cout << i << ' ';
		}
	}
	return 0;
}

C Bib

【题目链接】

原题链接:C - Bib

【考点】

排序、数组、结构体

【题目大意】

有 N 人编号从 1 到 N 。Person i 正穿着带有编号 Qi 的背心,并盯着人 Pi 。

根据每个人穿着的背心编号以及注视的对象编号,找出穿着特定编号背心的人所注视对象的编号。

【解析】

建立一个结构体数组包括注视对象编号 p 和 q 背心编号,下标为人员编号。qq数组用于存储每个人背心编号。再按照背心编号 q 从小到大排序数组,根据每个人注视对象的编号 p,在数组 qq 中找到对应的背心编号,这个编号就是我们要找的被穿着带有特定编号背心的人所注视对象的编号,并输出结果。

【难度】

GESP四级

【代码参考】

#include<bits/stdc++.h> 
using namespace std; 

// qq数组用于存储每个人的背心编号
int n, qq[300005]; 

// p注视对象编号、q背心编号
struct node{
    int p, q;
}a[300005]; 

// 按照q从小到大排序
bool cmp(node a, node b){
    return a.q < b.q;
} 

int main(){
    cin >> n; 
    // 循环读取每个人注视的对象编号p
    for(int i = 1; i <= n; i++){
        cin >> a[i].p;
    }
    for(int i = 1; i <= n; i++){// 循环读取每个人所穿背心编号q
        cin >> a[i].q;
        qq[i] = a[i].q;// 并将其存储到qq数组中
    }
    sort(a+1, a+n+1, cmp); // 对结构体数组a按照背心编号q进行排序
    for(int i = 1; i <= n; i++){// 遍历排序后的数组a,输出结果
        cout << qq[a[i].p] << ' ';
    }
    return 0; 
} 

D Doubles(双倍)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值