(补题)Codeforces Round 1008 (Div. 2)(A~C)
·
A. Final Verdict
题意:
有一个长n的数组,你可将其拆为k份,但每份长度相等,且无交集,然后将数组元素更新为每份的平均值
能否在数组长度为一时,元素等于目标值x;
思路:
诈骗,无论你怎么拆,最后数组长度为一时,其值一定为原数组平均值;
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
void solve(){
int n,x;
cin>>n>>x;
vector<int>v(n);
int sum=0;
for(int i=0;i<n;i++){
cin>>v[i];
sum+=v[i];
}
if((sum/n)*n==sum&&sum/n==x){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin>>t;
// t=1;
while(t--)solve();
return 0;
}
B. Vicious Labyrinth
题意:
n个房间,每个房间距离出口n-i,每个房间都有一个人和一个传送器,每个传送器不能传送到它所在的房间,找一个传送器的配置,使每个房间的人经过k次传送后距离出口n最远
思路:
首先要理解,题中要求输出的是每个传送器能传送到达的房间位置,而非k次传送后的最终位置,
理解输出后,显然,当k为奇数时,除了n房间不能到达自身应为n-1外,其余房间传送器都应直接到达n房间(剩余k-1次传送为偶数,必能到达n),当k为偶数时,每个房间除了n-2房间不应到达自身应为n外,其余房间传送器都应直接到达n-1房间,(剩余k-1次传送为奇数,必能到达n)
当然,剩余k-1的传送次数在n和n-1房间循环
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
void solve(){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
if(k&1){
if(i==n){
cout<<n-1<<' ';
}else{
cout<<n<<' ';
}
}else{
if(i==n-1){
cout<<n<<' ';
}else{
cout<<n-1<<' ';
}
}
}
cout<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin>>t;
// t=1;
while(t--)solve();
return 0;
}
C. Breach of Faith
题意:
有一b数组,长2n,再找一元素构造一长度2n+1的a数组,满足无相同元素
且a1=a2−a3+a4−a5+…+a2n−a2n+1
思路:
看数据范围,暴力匹配o(c(n,2))会超时,我们只有o(n)的时间
再看一次数据范围,注意到bi的数据(1~1e9),ai的数据(1~1e18),若我们将未知数当作a1,情况非常复杂,所以我们将未知数设为x放在a2,将x变得非常大,至少大于b的每一个元素,
公式:a1=(x-?)+(?-?)…+(?-?);只要保证每一个“(?-?)”为负数且这些负数尽量小
例如1 3 4 6 7 9,(6-7+3-4)显然大于(4-7+3-6)即满足a[i]-a[n+i-1]
,就能使x最大,防止与b数组元素重复,然后输出即可
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
void solve(){
int n;
cin>>n;
vector<int>v(2*n+1);
int sum=0;
for(int i=1;i<=2*n;i++){
cin>>v[i];
}
sort(v.begin(),v.end());
for(int i=2;i<2*n;i++){
if(i<=n)sum+=v[i];
else sum-=v[i];
}
int x=v[2*n]+v[1]-sum;
cout<<v[2*n]<<' '<<x<<' '<<v[1]<<' ';
for(int i=2;i<=n;i++){
cout<<v[i]<<' '<<v[n+i-1]<<' ';
}
cout<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin>>t;
// t=1;
while(t--)solve();
return 0;
}
更多推荐



所有评论(0)