题目
P. 【小挑战】丢失的珠子
- 传统题 2000ms 64MiB
题目描述
何老板有一盒珠子共n颗,编号1到n。他一不小心将盒子打翻,所有珠子都散落在地。他一颗一颗地把珠子捡起来,每捡一颗就记录下当前这颗珠子的编号。捡完以后发现少了两颗,请你快速找出少了哪两颗珠子。
输入格式
第一行,一个整数n
接下来一行,n-2个空格间隔的整数,表示何老板捡起来的珠子的编号。
输出格式
一行,由小到大排列的两个整数,表示丢失的两颗珠子的编号。
样例数据
输入数据 1
7
4 1 7 2 5
Copy
输出数据 1
3 6
Copy
输入数据 2
10
4 5 8 3 9 7 1 2
Copy
输出数据 2
6 10
Copy
提示
对于30%的数据,有n<=1,000
对于100%的数据,有n<=1,000,000
喜欢用 cin
读入的小朋友,在程序主函数开头加上 ios::sync_with_stdio(false);
可以让程序的读入效率大幅提高
解答
#include<bits/stdc++.h>
using namespace std;
int main() {
long long n,num,sum1=0,sum2=0,sumn=0,sumn2=0;
cin>>n;
for(long long i=1; i<=n-2; i++) {
cin>>num ;
sum1+=num;
sum2+=num*num;
}
for(long long i=1; i<=n; i++) {
sumn+=i;
sumn2+=i*i;
}
long long a,b;
a=sumn-sum1;
b=sumn2-sum2;
long long y;
for( y=1; y<=n; y++) {
if((a-y)*(a-y)+y*y==b) {
break;
}
}
long long x=a-y;
if(x<y) {
cout<<x<<" "<<y;
} else {
cout<<y<<" "<<x;
}
return 0;
}