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 ...
随机推荐
- a标签下载
<a href="存在问题.docx" download style="color:red;font-size:20px;cursor:pointer;float: ...
- 获取Bing每日图片API接口
bing图片每日更新,对于这一点感觉挺不错的,如果能够把bing每日图片作为博客背景是不是很不错呢?首先我们进入Bing首页,会发现自动转到中国版.不过这没关系,中国版更符合国情,速度也比国际版快一些 ...
- java开发基础知识学习
java环境配置 classpath: .当前目录 path: java 命令所在目录 jdk安装目录 jdk/bin jre安装目录 jre/bin 安装JDK后配置环境变量如下: 安装过程用到了j ...
- Linux环境下执行java -jar xxx.jar命令如何让springboot项目在后台运行
段落引用> 由于springboot内置了tomcat容器,我们通常会把项目打成jar或者war后直接使用java -jar xxx.jar命令去运行程序,但是当前ssh窗口被锁定或者按下ctr ...
- 自动化测试基础篇--Selenium iframe定位问题
摘自https://www.cnblogs.com/sanzangTst/p/7473437.html 有时候我们在定位的途中发现一个现象,元素就在那儿,不离不去,但是我们怎么整就是定不了位,这个时候 ...
- 通过Socket让远程电脑执行脚本
实现功能: 客户端发送命令,服务器接收命令并执行 服务端: import socketserver, os class MyTCPHandler(socketserver.BaseRequestHan ...
- MySQL多表更新的一个坑
简述 MySQL支持update t1,t2 set t1.a=2;这种语法,别的关系数据库例如oracle和sql server都不支持.这种语法有时候写起来挺方便,但他有一个坑. 测试脚本 dro ...
- c strlen和sizeof详解
用双引号定义并且声明的时候明确指定数组大小的话,sizeof就会返回指定的大小,不会自动加1: char str2[10] = "hello c"; printf("st ...
- python爬虫之12306网站--车站信息查询
python爬虫查询车站信息 目录: 1.找到要查询的url 2.对信息进行分析 3.对信息进行处理 python爬虫查询全拼相同的车站 目录: 1.找到要查询的url 2.对信息进行分析 3.对信息 ...
- Hibernate 5 入门指南-基于类注解
首先创建hibernate.cfg.xml配置文件并做简单的配置 <hibernate-configuration> <session-factory> & ...