第十九届浙大城市学院程序设计竞赛(F、L)

简介: 第十九届浙大城市学院程序设计竞赛(F、L)

F Sum of numerators(数论)


描述:


152c5a39a77e653f3215a4d80ae9a64d_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBALkFzaHku,size_20,color_FFFFFF,t_70,g_se,x_16.png


题目大意:


给出 n 和 k ,计算所给式子最简的所有分子和;


思路:


我们举一组例子:

n=10,k=2;


先不化简:


所有的分子是


1,2,3,4,5,6,7,8,9,10


分母是 4;


先求一次和;


这时对所有的偶数除 2(奇数对和无影响)

偶数变为


1,2,3,4,5


分母是 4/2=2
序列长度为10/2=5;


减去因为化简而多出的贡献


再对偶数化简一次(分母还是2的倍数)


偶数变为


1,2


分母是 2/2=1
序列长度为5/2=2;


减去因为化简而多出的贡献


这时虽然还有偶数,但是分母不为2的倍数,化到了最简;


从这个例子里我们就能找到规律,先求出不化简的总和,再根据 n 和 k的大小不断减去多算的贡献


代码:


#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 1e6+100;
const int p = 1e4;
const double eps = 1e-8;
ll n,k;
ll t;
int main()
{
  cin>>t;
  while(t--)
  {
  cin>>n>>k;
  ll sum=(n+1)*n/2;
  while(n>1&&k>0)
  {
    n/=2;
    k--;//分母每次除2对应k减1
    sum-=(n+1)*n/2;
  }
  cout<<sum<<endl;
  }
  return 0;
 }


L Monster Tower(模拟)


48c01d93d1bab6896b20fb3a57c85a50_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBALkFzaHku,size_20,color_FFFFFF,t_70,g_se,x_16.png


大意:


打怪,给出怪物塔的总层数 n 和能达到的层数 k

当打死一层的怪会获得怪的能力值,本层消失,本层上边的层数减一,求通关的最小能力值


思路:

打怪的顺序是唯一的,所以维护一个有 k 个元素的小根堆,每次处理最小的元素,如果现有能力值大于怪的能力值,加上怪的能力值,否则更新初始值;


每遇到一个打不过的怪,最小可能初始值 = 怪的能力值-前面获得的能力值总和,用这个值去更新之前的 初始值,取其中大的;

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 1e6+100;
const int p = 1e4;
const double eps = 1e-8;
ll t,n,k;
ll a[N];
priority_queue<ll,vector<int>,greater<int> >pmin;
ll sta,now;
int main()
{
  cin>>t;
  while(t--)
  {
    cin>>n>>k;
    sta=0;now=0;
    for(int i=1;i<=n;i++)
    {
      scanf("%lld",&a[i]);
    }
    for(int i=1;i<=n;i++)
    {
      if(pmin.empty()||pmin.size()<k) pmin.push(a[i]);//注意判空
      else
      {
        ll s=pmin.top();
        pmin.pop();
        if(now>=s)
        {
          now+=s;
        }//总能力值大于怪的能力值
        else
        {
          sta=max(sta,s-now);
          now+=s;
        }//更新初始值,注意更新方式
        pmin.push(a[i]);
      }
    }
    while(!pmin.empty())
    {
      ll s=pmin.top();
      pmin.pop();
      if(now>=s)
      {
        now+=s;
      }
      else
      {
        sta=max(sta,s-now);
        now+=s;
      }
    }
    cout<<sta<<endl;    
  }
  return 0;
}

目录
相关文章
集美大学第九届程序设计竞赛
集美大学第九届程序设计竞赛
67 0
|
6月前
第十三届西南民族大学程序设计竞赛
第十三届西南民族大学程序设计竞赛
41 0
|
机器学习/深度学习 人工智能 BI
江苏大学2021年第一届程序设计大赛(UJSCPC)题面
江苏大学2021年第一届程序设计大赛(UJSCPC)题面
214 0
|
大数据
常州大学阿里云大数据学院上榜教育部首批现代产业学院公示名单
教育部公示全国首批现代产业学院名单 常州大学阿里云大数据学院入选
662 0
常州大学阿里云大数据学院上榜教育部首批现代产业学院公示名单
河南省应用型本科高校新工科建设研讨会举行
慧科、阿里云合作共建的华北水利水电大学软件学院、河南工程学院软件学院获批为“河南省特色化示范性软件学院”。
437 0
河南省应用型本科高校新工科建设研讨会举行
|
大数据
[开学季]内蒙古师范大学阿里云大数据学院成立仪式成功举办
11月30日,内蒙古师范大学计算机科学技术学院·阿里云大数据学院成立揭牌仪式暨内蒙古师范大学第一届大数据论坛在内蒙古自治区首府呼和浩特内蒙古师范大学盛乐校区举行。 成立大会结束后,嘉宾们来到内蒙古师范大学阿里云大数据学院实地考察指导,听取学院规划、人才培养等工作汇报。
3035 0
|
大数据
[开学季]西安铁路职业技术学院阿里云大数据应用学院第一次理事会暨开班典礼顺利举行
2018年11月2日,在西安铁路职业技术学院召开了阿里云大数据应用学院第一届理事会第一次会议暨开班典礼。西安铁路职业技术学院阿里云大数据应用学院是在西安市教育局大力支持下,结合阿里巴巴集团阿里云计算有限公司、慧科集团产业资源落地于西安铁路职业技术学院的一所产业学院。
2094 0
|
大数据
[开学季]西安职业技术学院阿里云大数据应用学院第一次理事会暨新生开班仪式成功举行
10月12日下午,西安职业技术学院-阿里云大数据应用学院第一届理事会第一次会议在西安职业技术学院行政楼举行。阿里云丝路总部技术总监黄河、慧科集团CEO岳喜伟、学院院长李教社、副院长寇宝明,财务处处长何炜、电子系党总支副书记马高原、大数据学院理事会成员、教学管理团队成员和企业嘉宾出席了会议。
2055 0
|
大数据 物联网
[开学季] 浙江万里学院-阿里云大数据应用学院2018级新生开学典礼隆重举行
2018年10月11日,由浙江万里学院、阿里云、慧科集团三方共建的阿里云大数据应用学院2018级新生开学典礼在浙江万里学院隆重举行。宁波市高教处、宁波市鄞州区经信局、万里学院、阿里云、慧科集团的领导老师以及阿里云大数据学院300多位新同学,参加了本次开学典礼。
2626 0
下一篇
无影云桌面