3.23

Educational Codeforces Round 62 (Rated for Div. 2)

C题

#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5+4;
#define ll long long 
struct node{
	ll t,v;
}nod[maxn];
priority_queue<int> q;

bool cmp(node a,node b){
	if(a.v!=b.v) return a.v>b.v;
	else return a.t>b.t;
}
int main(){
	ll n,k;
	ll maxx=0;ll s=0;
	cin>>n>>k;nod[0].t=(ll)0;
	for(ll i=1;i<=n;i++){
		cin>>nod[i].t>>nod[i].v;
	}
	sort(nod+1,nod+n+1,cmp);
	for(ll i=1;i<=n;i++){
		s=nod[i].t+s;q.push(-nod[i].t);
		if(q.size()>k)
		s+=q.top(),q.pop();
		maxx=max(maxx,(ll)(s*nod[i].v));
		
	}
	cout<<maxx<<endl;
	return 0;
}

要注意long long ,还有就是可能是思路错了,不一定是细节错了。

为什么呢,错的写法:

#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5+4;
#define ll long long 
struct node{
	ll t,v;
}nod[maxn];
int jian[maxn];

bool cmp(node a,node b){
	if(a.v!=b.v) return a.v>b.v;
	else return a.t>b.t;
}
int main(){
	int n,k;
	ll maxx=0;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>nod[i].t>>nod[i].v;
	}
	sort(nod+1,nod+n+1,cmp);
	for(int i=1;i<=n;i++){
		nod[i].t+=nod[i-1].t;
		maxx=max(maxx,(ll)(nod[i].t*nod[i].v));
		if(i==k) break;
	}
	cout<<maxx<<endl;
	return 0;
}

由于价值和时间不能同时最大而错,所以要用优先队列,否则几分钟就写好了,害我白高兴一场。

B题

极限思想为导向,否则逻辑实在混乱不清,本质挺重要的。耗了很长时间。

A题,水,看题要加快。

D题,先是靠感觉,然后再是稍微验证一下。虽然我比较弱,但是这种东西总结一下是可以节省一些时间的。

也就是做到D题是没问题的

这 100 题里面基本上也就是暴力,模拟,搜索,图,STL 应用,动态规划这几种类型

递归完了可以开始动态规划了,前期动态规划只用做两道题,爬楼梯和斐波那契数列,不要觉得太简单,掌握里面的思想才是精髓。接着你可以看我的一篇文章从暴力递归到动态规划,看完以后自己把里面的题做出来,你的动态规划就已经可以了。趁热打铁,去看一篇叫背包九讲的文章,然后继续多做题,至少要做满 20 道题

在此期间 STL 也可以穿插进行,当你发觉目前已有的数据结构不能很好的满足你的做题需求,此时就可以学一学 STL,将其应用到你的题目当中,我博客里也有一些 STL 讲解文章

最后,你要学的就是搜索,我博客有很多文章是讲搜索的,其中有八篇是入门可以看的,欢迎学习,不懂的可以来问我。看完以后你应该对 dfs,bfs 有一个很深刻的认识了,接下来就是刷题,virtual judge 上有很多搜索的专题——推荐一个叫 Kuangbin 带你飞之搜索专题,这里面的题目很经典难度适中,把这全部做完基本上就够了

  1. 结果填空题只要答案,你怎么搞出来的别人不管你,什么 Excel、数日历、暴力、手算都行,怎么简单怎么搞
  2. 程序填空题大部分是递归,既然是递归,函数往往不会只有一个地方调用自身,找一下其他调用自身的语句,稍微推理就能得出答案。PS:蓝桥杯很喜欢考 KMP 和快排
  3. 编程题不要空着,想不出来就暴力,暴力都写不出来就写个输入然后输出样例的结果,能骗一点分是一点
  4. https://www.wmathor.com/index.php/archives/1107/

还有一定要刷真题,我凉了

学好递归,你说你递归学好了?行,你去把蓝桥杯往年的一道真题——出栈次序做出来,做不出来就继续学

过了一遍数据结构,就可以开始学习算法了,什么《算法导论》、《算法》都不推荐你们看,你又不是打 ACM,你需要的是快速进阶的过程而不是专精,所以推荐书的话,可以看看《啊哈,算法》或者《妙趣横生的算法》,网上有 PDF,没必要花钱买。看视频的话,推荐 mooc 上北京大学郭老师的算法课程

你们数数,从 11 月到 3 月,总共也就 4~5 个月,一共 120~150 天,其中还有什么过年走亲戚,上课之类的,100 道题,差不多基本上就是一天一题吖,如果你能坚持一天一题,省一就稳了小老弟(前提是,别做水题,就是那种一眼就看出来思路的题别做,浪费时间而且得不到提高)。切记

我从去年 11 月份开始备战蓝桥杯,到 3 月底(好像是 3 月底)考试,总共前前后后加起来做的题撑死也就 100 题,这 100 题的构成大部分是历年真题,还有部分是计蒜客 oj 上的题,可以看下面的截图,有些是后来做的,所以我当时做的根本不到 100 题

!!!特别提醒
1、注意程序最后应有返回值,且返回值为0

2、万能头文件可以使用(bits/stdc++.h),比赛中使用c++的方法是,记得开全局空间using namespace std;

3、熟悉STL用法,包括vector、set、map、pair等结构的用法,这会给你剩下许多时间

4、例如max_element、lower_bound函数的用法请熟悉

5、在不能保证自己的算法的绝对正确性的情况下,可以选择保住现有的分,而不去尝试难度较高且自己没有把握的方法
set 加什么东西进去的时候一定要加个比较

魔方状态

跳蚱蜢

迷宫

方格分割

字母组串

递归的题,弄明白参数的含义和方向

最大公共子串

不是最大公共子序列,

  正则问题:

要求最值,动态规划和搜索

蓝桥杯已经过去了,但是我发现一个真理,起码要一个星期认真,才能保证结果不会太差。

而且不要随便乱猜,乱猜的不能当真的,否则逻辑就会混乱。

 

//状态表示出来,转移,判重,计数,8个块可以编号,上一层的顺时针旋转,右边的,前面的顺时针旋转 
//set 判重,状态加入queue(数组模拟
//宽搜
#include<stdio.h>
#include<algorithm>
#include<cstring>
using namespace std;
int len;
char s[100];
int pos;
//求出当前字符串,自当前下标,到结束,能匹配的字符串的长度
int f() {
	int ans=0;int temp=0;int maxx=0;//用于保存连续的X的数量 
	while(pos<len)
	{
	if(s[pos]=='('){
		pos++;
		temp+=f();//等待后面的结果,并累加到ans 
	}if(s[pos]=='x'){
		pos++;
		temp++; 
	} else if(s[pos]=='|'){
		maxx=max(maxx,temp);
		temp=0;pos++;
	} else if(s[pos]==')'){
		pos++;
		maxx=max(maxx,temp);
		break;
	}
	
}
maxx=max(maxx,temp);
	return maxx;
}
int main(){
	scanf("%s",s);
	len=strlen(s);
	int ans=f();
	printf("%d",ans);
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值