zoukankan      html  css  js  c++  java
  • 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 }

     

  • 相关阅读:
    Mac下空格预览.webp格式图片
    stl 存放对象析构问题
    初始化成员列表 ——— 类的const成员和引用成员的初始化
    一个CString的实现 拷贝构造函数的应用
    operator 的两种用法
    MFC使用TRACKMOUSEEVENT触发mouseHover和mouseLeave
    MFC重载关闭按钮
    类内定义线程的回调函数问题
    按钮的Default Button属性
    匿名管道 远程cmd
  • 原文地址:https://www.cnblogs.com/lvguapi/p/12687029.html
Copyright © 2011-2022 走看看