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 ...
随机推荐
- 洗礼灵魂,修炼python(88)-- 知识拾遗篇 —— 线程(2)/多线程爬虫
线程(下) 7.同步锁 这个例子很经典,实话说,这个例子我是直接照搬前辈的,并不是原创,不过真的也很有意思,请看: #!usr/bin/env python #-*- coding:utf-8 -*- ...
- 在Django中接收文件并存储
首先是一个views函数的例子 def get_user_profiles(request): if request.method == 'POST': myFile = request.FILES. ...
- 联想ts550服务器安装windows2008R2系统
发布时间:2018-10-18 点击数:4 服务器型号:联想 thinkserver ts550 系统:windowsserver2008R2 联想的 TS550 USB口全是USB3.0的,官方引 ...
- February 19th, 2018 Week 8th Monday
Love is blind, hard to find, difficult to get, and impossible to forget. 爱,很盲目,很难找,很难得,很难忘. It is al ...
- Unity Shader 基础(1): RenderType & ReplacementShader
很多Shader中都会定义RenderType这个类型,但是一直搞不明白到底是干嘛的,官方文档是这样结解释的:Rendering with Replaced Shaders Rendering wit ...
- python入门练习题
1.使用while循环输入 1 2 3 4 5 6 8 9 10 num = 1 while num<=10: if num ==7: num += 1 continue print(n ...
- 【大数据技术】Sqoop
1.Sqoop是什么 Sqoop:SQL-to-Hadoop,传统数据库与Hadoop间数据同步工具.(MySQL.Oracle <==> HDFS.HBase.Hive) Sqoop ...
- HBase1.0.1.1 API与原来有所不同
package com.felix.hbaseapi_test; /* 这是旧版的 API操作 */ public class hbaseapifelix { public static final ...
- php文件管理,能够点击依照时间,大小,名称排序
php文件管理.能够点击依照时间.大小,名称排序 本例没实用到jquery 演示 PHP Code <?php $rootdir="./"; $spacen ...
- Python装饰器 [1]
装饰器本身是个函数 import time def log(func): def wrapper(*args, **kwargs): start = time.time() result = func ...