Codeforces Round #521 (Div. 3)
B 题过的有些牵强,浪费了很多时间,这种题一定想好思路和边界条件再打,争取一发过。
D 题最开始读错题,后面最后发现可以重复感觉就没法做了,现在想来,数据量大,但是数据范围小
枚举不行,二分还是可以的,还是自己的二分水平太差了,平时周一到周四做CF,周五周末复习CF,学习
新的算法,并抽空进行专项训练
D题的思路其实很简单,我通过二分一个copy的次数val,这样我再去用每个数出现的CNT[i]/val,就是这个数
回在T序列中出现多少次,那么check直接上就行,但是要注意,我需要输出的不是val,而是序列T,那么我需要
每次跑一下,看是否满足,但是到了边界条件时,发现已经不满足了,但是这时ans数组已经改变,不过不要担心,我们只需要一直把满足条件的val维护就行。最后的时候再跑一次check函数就行。
D题代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
using namespace std;
const int maxx = 2e5+;
int a[maxx];
int cnt[maxx];
int n,k;
int ans[maxx];
int anss;
bool check(int val)
{
int num=;
int tot =;
for (int i=; i<maxx; i++)
{
for (int j=val; j<=cnt[i]; j+=val)
{
num++;
ans[tot++]=i;
}
}
if (num>=k)return ;
else return ;
}
void fen(int l,int r)
{
int mid=(l+r)/;
if (l<=r)
{
if (check(mid))
{
anss=mid;
fen(mid+,r);
}
else
{
fen(l,mid-);
}
}
return;
}
int main()
{
scanf("%d%d",&n,&k);
memset(cnt,,sizeof(cnt));
for (int i=; i<=n; i++)
{
scanf("%d",&a[i]);
}
int l=;
int r=0x3f3f3f3f;
for (int i=; i<=n; i++)
{
cnt[a[i]]++;
}
fen(l,r);
check(anss);
for (int i=;i<=k; i++)
{
if (i!=k)printf("%d ",ans[i]);
else printf("%d\n",ans[k]);
}
return ;
}
/* */
后面留坑
E题 每天组织一场比赛,后一天的比赛题目数是前一天比赛数目的两倍,并且每天的题目必须是一样,并且第一天题目可以自己选,问最大选题的数目是多少。
这道题我最开始理解错题意了,后来然后也没有想到,最后读懂题目,发现没办法做。其实我们发现,要把次数用map统计,这并没有什么问题,然后把这些值进行离散化,也就是把每种数存下来就行。然后再用一个数组存这些数出现的次数,排序,然后用low_bound查找需要次数。最后递增就行
给出n道有类型的题目,每天组织一场专题比赛,该天题目数量必须是前一天的2倍,第一天的题目数量可以任意选择,求能消耗的最多题目数量
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<map>
using namespace std;
int b_size;
int a_size;
map<int,int>p;
vector<int>a,b;
int check(int x)
{
int sum=;
int pos=;
while()
{
pos=(lower_bound(b.begin()+pos,b.end(),x)-b.begin());//大于或等于val的第一个元素位置
if (pos==a_size)break;//如果都比这个数小那么返回的pos==数组大小
pos++;
sum+=x;
x*=;
}
return sum;
}
int main()
{
int n;
int tmp;
int mx=;
p.clear();
scanf("%d",&n);
for (int i=; i<=n; i++)
{
scanf("%d",&tmp);
if (p[tmp]==)
{
a.push_back(tmp);
}
p[tmp]++;
mx=max(mx,p[tmp]);
}
b_size=a_size=a.size();
for(int i=; i<a_size; i++)
{
b.push_back(p[a[i]]);
}
sort(b.begin(),b.end());
int ans=;
for (int i=; i<=mx; i++)
{
ans=max(ans,check(i));
}
printf("%d\n",ans);
return ;
}
F1 简单DP,用DP[i][j]代表前i位置,选j元素的最大值。
转移方程dp[i][l+1]=max(dp[i][l+1],dp[j][l]+a[i])
表示前i个元素,选取了l+1个元素,我们需要从这个数的前i-k个元素,选取了l个元素传递过来。
代码如下:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define ll long long
using namespace std;
ll a[];
ll dp[][];
const ll inf = 0x3f3f3f3f;
int main()
{
ll n,k,x;
scanf("%lld%lld%lld",&n,&k,&x);
{
for(int i=; i<=n; i++)
{
scanf("%lld",&a[i]);
}
memset(dp,-inf,sizeof(dp));
dp[][]=;
//dp[i][j]前i个选出j个
for(int i=; i<=n; i++)//前i个选出l+1个
{
for(int j=i-; j>=max((ll),i-k); j--)//从前i-k位到i-1位,选出l个加上i位置选出a[i]
{
for(int l=; l<x; l++)
dp[i][l+]=max(dp[i][l+],dp[j][l]+a[i]);
}
}
ll maxn;
maxn=-;
for (int i=n; i>n-k; i--)
{
maxn=max(dp[i][x],maxn);
}
printf("%lld\n",maxn);
}
return ;
}
Codeforces Round #521 (Div. 3)的更多相关文章
- Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)
Codeforces Round #521 (Div. 3) E. Thematic Contests 题目传送门 题意: 现在有n个题目,每种题目有自己的类型要举办一次考试,考试的原则是每天只有一 ...
- Codeforces Round #521 (Div. 3) D. Cutting Out 【二分+排序】
任意门:http://codeforces.com/contest/1077/problem/D D. Cutting Out time limit per test 3 seconds memory ...
- CodeForces Round #521 (Div.3) E. Thematic Contests
http://codeforces.com/contest/1077/problem/E output standard output Polycarp has prepared nn competi ...
- CodeForces Round #521 (Div.3) D. Cutting Out
http://codeforces.com/contest/1077/problem/D You are given an array ss consisting of nn integers. Yo ...
- Codeforces Round #521 (Div. 3) F1. Pictures with Kittens (easy version)
F1. Pictures with Kittens (easy version) 题目链接:https://codeforces.com/contest/1077/problem/F1 题意: 给出n ...
- CodeForces Round #521 (Div.3) B. Disturbed People
http://codeforces.com/contest/1077/problem/B There is a house with nn flats situated on the main str ...
- CodeForces Round #521 (Div.3) A. Frog Jumping
http://codeforces.com/contest/1077/problem/A A frog is currently at the point 00 on a coordinate axi ...
- Codeforces Round #521 Div. 3 玩耍记
A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...
- Codeforces Round #521 (Div. 3) C. Good Array
C. Good Array time limit per test 1 second memory limit per test 256 megabytes input standard input ...
随机推荐
- Vue 学习笔记之快速入门篇
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与 ...
- php学习----文件系统
PHP文件系统之读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $content = file_get_ ...
- SSL 原理及 https 配置
目录 1. SSL 原理 1.1. SSL 简介 1.2. 主要概念 1.3. 建立安全连接的过程 2. https 配置 (以 nginx 为例) SSL 原理 SSL 简介 SSL (Secure ...
- Mysql 数据库设置三大范式 数据库五大约束 数据库基础配置
数据库设置三大范式 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库满足第一范式. 第一范式的合理遵循需要根据系统给的实际需求 ...
- .Net环境下调用ProtoBuf
一.什么是ProtoBuf protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.它是一种类似于xml.json等类似作用的交互格式.由于它是一种 ...
- mysql 更新条件为查询出的结果
UPDATE category c INNER JOIN ( SELECT b.category_id FROM category a, (SELECT * FROM category WHERE d ...
- Linux系统安装和网络配置
系统下载 CentOS 6.x 50% 6.9 ---- 常用 CentOS 7.x 50% 7.2 ----常用 官网-国外 https://wiki.centos.org/Downloa ...
- centos7下安装docker(15.6docker跨主机网络---Weave)
Weave是weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多个主机上的容器连接起来.对于容器来说,weave就像一个巨大的网络交换机,容器可以直接通信,无需NAT和端 ...
- 移动HTML5前端性能优化指南
概述 1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点,首屏加载3秒完成或使用Loading 4. 基于联通3G网络平均338KB/s ...
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
转:http://blog.csdn.net/tianlesoftware/article/details/5740630 全备脚本 以 nocatalog 模式为例: Shell 脚本: ##### ...