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)的更多相关文章

  1. Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)

    Codeforces Round #521 (Div. 3)  E. Thematic Contests 题目传送门 题意: 现在有n个题目,每种题目有自己的类型要举办一次考试,考试的原则是每天只有一 ...

  2. 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 ...

  3. CodeForces Round #521 (Div.3) E. Thematic Contests

    http://codeforces.com/contest/1077/problem/E output standard output Polycarp has prepared nn competi ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. Codeforces Round #521 Div. 3 玩耍记

    A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  9. 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 ...

随机推荐

  1. Linux系统修改日期时间

    linux修改时间   服务器时间与网络时间不符: 一.手动修改 1. date命令:查看当前时间 2. date -s  时分秒 :修改时间 还需要把日期改过来 3. date -s  完整日期时间 ...

  2. Solidity高级理论(二):Gas

    solidity高级理论(二):Gas 关键字:Gas.结构体.节省小技巧 Gas是什么 在Solidity中,用户想要执行DApp都需要支付一定量的Gas,Gas可以用以太币购买,所以,用户每次使用 ...

  3. python爬虫之小说网站--下载小说(正则表达式)

    python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/244 ...

  4. rabbitMQ模式

    1.hello  消息生产者p将消息放入队列 消费者监听队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列删除(隐患,消息可能没有被消费者正确处理,已经消失了,无法恢复) 应用场景:聊天室 案 ...

  5. python--私有属性--私有方法

    Class 定义类 def 初始化方法(形参) 属性1 属性2   私有属性(属性之前加--) def  方法1() print() 属性和方法定义好以后,在创建对象 对象=类名(“”) print( ...

  6. [Hive_5] Hive 的 JDBC 编程

    0. 说明 Hive 的 JDBC 编程 1. hiveserver2 介绍 hiveserver2 是 Hive 的 JDBC 接口,用户可以连接此端口来连接 Hive 服务器 JDBC 驱动类为 ...

  7. 【Teradata SQL】使用SQL将多个逗号分隔改为一个逗号分隔

    1.问题说明: //将如下字符串改为一个逗号分隔 张三,李四,王五,,,,,,六,,,,其,,,,,,,,,,,把 ==> 张三,李四,王五,六,其,把 2.解决方法 sel oreplace( ...

  8. maven中可以直接引用的java系统属性和环境变量属性

    一.查看命令: 1 mvn help :system 二.引用 在pom文件中通过 ${变量名}来引用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

  9. (转)Spring Boot 2(一):【重磅】Spring Boot 2.0权威发布

    http://www.ityouknow.com/springboot/2018/03/01/spring-boot-2.0.html 就在今天Spring Boot2.0.0.RELEASE正式发布 ...

  10. (转)Spring Boot(四):Thymeleaf 使用详解

    http://www.ityouknow.com/springboot/2016/05/01/spring-boot-thymeleaf.html 在上篇文章Spring Boot (二):Web 综 ...