2020.4.12 个人rating赛 解题+补题报告
Posted 吕瓜皮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020.4.12 个人rating赛 解题+补题报告相关的知识,希望对你有一定的参考价值。
A. Balloons
1.题意
有n包气球,每包气球有ai个,将这n包气球以包为单位全部分给两个人,要求每人至少有一包气球且两人气球总个数不能相等。
2.题解
用结构体将n包气球的编号和气球数存起来,按每包气球个数排序后,如果第一包气球的个数不为总个数的一半,满足题意。
3.代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 struct node{ 5 int id,x; 6 }a[15]; 7 bool cmp(node a,node b){ 8 return a.x<b.x; 9 } 10 int main () { 11 ios::sync_with_stdio(false); 12 cin>>n; 13 14 int sum=0; 15 for(int i=1;i<=n;i++){ 16 cin>>a[i].x; 17 a[i].id=i; 18 sum+=a[i].x; 19 } 20 if(n==1){ 21 cout<<-1<<endl; 22 return 0; 23 } 24 sort(a+1,a+1+n,cmp); 25 if(a[1].x*2==sum) 26 cout<<-1<<endl; 27 else{ 28 cout<<1<<endl; 29 cout<<a[1].id<<endl; 30 }
D. Sonya and Hotels
1.题意
有n个酒店分布在一条坐标轴上,酒店只能在整数点上,Sonya想再建一个酒店,要求这个酒店与其它所有酒店的最小距离等于d,问有多少种建造位置。
2.题解
第一个酒店的左边和最后一和酒店的右边肯定符合题意,从第二个酒店向后遍历,如果与前一个酒店的距离等于两倍的d,说明这两个酒店之间恰好有一个可以建造的位置,如果与前一个酒店的距离大于两倍的d,说明这两个酒店之间有两个可以建造的位置。
3.代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,d,ans; 4 int a[110]; 5 int main(){ 6 ios::sync_with_stdio(false); 7 cin>>n>>d; 8 for(int i=1;i<=n;i++) 9 cin>>a[i]; 10 11 for (int i=2;i<=n;i++){ 12 if(a[i]-a[i-1]==d+d) 13 ans++; 14 if(a[i]-a[i-1]>d+d) 15 ans+=2; 16 } 17 cout<<ans+2<<endl; 18 19 return 0; 20 }
E. Sonya and Exhibition
1.题意
展览上有百合和玫瑰两种花共n株呈直线排开,有m个游客,每个游客对展览的满意程度为从L到R之间玫瑰的数量乘以百合的数量,问怎样排列这n株花使得展览的受欢迎程度最大。
2.题解
思维题,要使得百合乘以玫瑰的数量和最大,将它们错位排列最好,即01010101排列。
3.代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m; 4 struct node{ 5 int l,r; 6 }a[10005]; 7 int main(){ 8 ios::sync_with_stdio(false); 9 cin>>n>>m; 10 for(int i=1;i<=m;i++) 11 cin>>a[i].l>>a[i].r; 12 13 for(int i=1;i<=n;i++){ 14 if(i%2) 15 cout<<0; 16 else 17 cout<<1; 18 } 19 20 return 0; 21 }
F. Sonya and Robots
1.题意
有n个数,从每个数起向后找一个数,使得这两个数组成一个数字对,求一共有多少个不同的数字对。
2.题解
从前往后遍历,更新每种数字左边一共有多少个不同的数字,这些数字可以与当前数字可以构成一个数字对。
3.代码
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int N=100005; 5 int n; 6 int a[N],vis[N]; 7 set<int>st; 8 int main(){ 9 ios::sync_with_stdio(false); 10 cin>>n; 11 for(int i=0;i<n;i++){ 12 cin>>a[i]; 13 vis[a[i]]=st.size(); 14 st.insert(a[i]); 15 } 16 ll ans=0; 17 for(int i=0;i<=N;i++) 18 ans+=vis[i]; 19 20 cout<<ans<<endl; 21 22 return 0; 23 }
以上是关于2020.4.12 个人rating赛 解题+补题报告的主要内容,如果未能解决你的问题,请参考以下文章
Educational Codeforces Round 109 (Rated for Div. 2) 个人补题记录(A~D,AB思维,C模拟构造,D题DP)