2017-10-24 NOIP模拟赛
括号序列
(bracket)
Time Limit:1000ms Memory Limit:128MB
题目描述
LYK有一个括号序列,但这个序列不一定合法。
一个合法的括号序列如下:
()是合法的括号序列。
若A是合法的括号序列,则(A)是合法的括号序列。
若A和B分别是合法的括号序列,则AB是合法的括号序列。
LYK想通过尽可能少的操作将这个不一定合法的括号序列变成合法的括号序列。一次修改操作是将某个字符变成另一个字符。
你能帮帮它吗?
输入格式(bracket.in)
一行一个字符串S。
输出格式(bracket.out)
一个数表示最少修改次数。
输入样例
()))
输出样例
1
样例解释
将第二个字符修改成(即可。
数据范围
对于30%的数据|S|<=10。
对于60%的数据|S|<=1000。
对于100%的数据|S|<=100000。且|S|是偶数。
/*
这个题不能单纯判断左括号和右括号的多少,而应该从左到右扫一遍,看应该如何配对
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[];
int cnt,ans;
int main(){
freopen("bracket.in","r",stdin);freopen("bracket.out","w",stdout);
//freopen("Cola.txt","r",stdin);
scanf("%s",s+);
int len=strlen(s+);
for(int i=;i<=len;i++){
if(s[i]==')'){
if(cnt==)cnt++,ans++;
else cnt--;
}
else cnt++;
}
ans+=cnt/;
cout<<ans;
}
AC 模拟
公交车
(bus)
Time Limit:1000ms Memory Limit:128MB
题目描述
LYK在玩一个游戏。
有k群小怪兽想乘坐公交车。第i群小怪兽想从xi出发乘坐公交车到yi。但公交车的容量只有M,而且这辆公交车只会从1号点行驶到n号点。
LYK想让小怪兽们尽可能的到达自己想去的地方。它想知道最多能满足多少小怪兽的要求。
当然一群小怪兽没必要一起上下车,它们是可以被分开来的。
输入格式(bus.in)
第一行三个数k,n,M。
接下来k行每行3个数xi,yi和ci。其中ci表示第i群小怪兽的小怪兽数量。
输出格式(bus.out)
一个数表示最多有多少只小怪兽能满足要求。
输入样例
3 5 3
1 3 4
3 5 2
1 5 3
输出样例
5
样例解释
第一群的3只小怪兽在1号点上车,并在3号点下车。
第二群的2只小怪兽在3号点上车,5号点下车。
数据范围
对于30%的数据小怪兽的总数不超过10只,n<=10。
对于另外30%的数据k,n<=1000。
对于100%的数据1<=n<=20000,1<=k<=50000,1<=M<=100,1<=ci<=100,1<=xi<yi<=n。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int ans,n,m,c,w[];
struct node{
int l,r,v;
bool operator < (const node b)const{
return r<b.r;
}
}a[];
int main(){
freopen("bus.in","r",stdin);freopen("bus.out","w",stdout);
scanf("%d%d%d",&n,&m,&c);
for(int i=;i<=m;i++)w[i]=c;
for(int i=;i<=n;i++){
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].v);
a[i].r--;
}
sort(a+,a+n+);
for(int i=;i<=m;i++){
int mn=a[i].v;
for(int j=a[i].l;j<=a[i].r;j++)mn=min(mn,w[j]);
if(mn!=){
for(int j=a[i].l;j<=a[i].r;j++)w[j]-=mn;
ans+=mn;
}
}
printf("%d",ans);
}
60分 贪心+暴力
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int ans,n,m,c,w[],opl,opr,mn;
struct node{
int l,r,v;
bool operator < (const node b)const{
return r<b.r;
}
}a[];
struct Node{
int l,r,v,lazy;
}tr[];
void update(int k){
if(tr[k].l==tr[k].r){tr[k].lazy=;return;}
tr[k<<].lazy+=tr[k].lazy;
tr[k<<].v+=tr[k].lazy;
tr[k<<|].lazy+=tr[k].lazy;
tr[k<<|].v+=tr[k].lazy;
tr[k].lazy=;
}
void build(int l,int r,int k){
tr[k].l=l;tr[k].r=r;
if(l==r){tr[k].v=c;return;}
int mid=(l+r)>>;
build(l,mid,k<<);
build(mid+,r,k<<|);
tr[k].v=min(tr[k<<].v,tr[k<<|].v);
}
int query(int l,int r,int k){
if(tr[k].l>=opl&&tr[k].r<=opr){return tr[k].v;}
if(tr[k].lazy!=)update(k);
int mid=(tr[k].l+tr[k].r)>>;
int res=0x7fffffff;
if(opl<=mid)res=min(res,query(l,mid,k<<));
if(opr>mid)res=min(res,query(mid+,r,k<<|));
tr[k].v=min(tr[k<<].v,tr[k<<|].v);
return res;
}
void change(int l,int r,int k){
if(l>=opl&&r<=opr){tr[k].lazy+=mn;tr[k].v+=mn;return;}
if(tr[k].lazy!=)update(k);
int mid=(l+r)>>;
if(opl<=mid)change(l,mid,k<<);
if(opr>mid)change(mid+,r,k<<|);
tr[k].v=min(tr[k<<].v,tr[k<<|].v);
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("bus.in","r",stdin);freopen("bus.out","w",stdout);
scanf("%d%d%d",&n,&m,&c);
build(,m,);
for(int i=;i<=n;i++)scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].v),a[i].r--;
sort(a+,a+n+);
for(int i=;i<=n;i++){
mn=a[i].v;
opl=a[i].l,opr=a[i].r;
mn=min(mn,query(,m,));
ans+=mn;
mn=-mn;
if(mn!=){change(,m,);}
}
printf("%d",ans);
return ;
}
100分 贪心+线段树
解谜游戏
(puzzle)
Time Limit:1000ms Memory Limit:128MB
题目描述
LYK进了一家古董店,它很想买其中的一幅画。但它带的钱不够买这幅画。
幸运的是,老板正在研究一个问题,他表示如果LYK能帮他解出这个问题的话,就把这幅画送给它。
老板有一个n*m的矩阵,他想找一个和最大的子矩阵,这个子矩阵可以由四个参数x,y,x2,y2(1<=x<=x2<=n,1<=y<=y2<=m)来表示,表示一个左上角为(x,y),右下角为(x2,y2)的矩阵。
为了让游戏更加有趣,老板给了一个常数P,他想将原来这个矩阵中恰好一个数变为P,使得这个矩阵的最大的子矩阵尽可能大。
老板想知道这个最大值是多少。
你能帮帮LYK吗?
输入格式(puzzle.in)
第一行三个数n,m,P。
接下来n行,每行m个数ai,j描述整个矩阵。
输出格式(puzzle.out)
输出一个数表示答案。
输入样例
3 3 3
-100 3 3
3 -4 3
3 3 3
输出样例
20
样例解释
改变左上角那个数。
数据范围
对于20%的数据n,m<=10。
对于40%的数据n,m<=25。
对于60%的数据n,m<=50。
对于80%的数据n,m<=100。
对于100%的数据1<=n,m<=300,|P|,|ai,j|<=1000。
#include<iostream>
#include<cstdio>
#include<cmath>
#define maxn 301
using namespace std;
int n,m,p,a[maxn][maxn],MIN[maxn],b[maxn],dp[maxn][],s[maxn][maxn],ans=-0x7fffffff;
int main(){
freopen("puzzle.in","r",stdin);freopen("puzzle.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
for(int i=;i<=n;i++)for(int j=;j<=m;j++)scanf("%d",&a[i][j]);
for(int i=;i<=n;i++)for(int j=;j<=m;j++)s[i][j]=s[i-][j]+a[i][j];
for(int i=;i<=n;i++){//枚举上界
for(int j=;j<=m;j++)MIN[j]=a[i][j];
for(int j=i;j<=n;j++){//枚举下界
for(int k=;k<=m;k++)MIN[k]=min(MIN[k],a[j][k]);//更新竖着的子段最小值
for(int k=;k<=m;k++)b[k]=s[j][k]-s[i-][k];dp[][]=-;
for(int k=;k<=m;k++){
dp[k][]=max(dp[k-][]+b[k],b[k]);
dp[k][]=max(max(dp[k-][]+b[k],dp[k-][]+b[k]-MIN[k]+p),b[k]-MIN[k]+p);
}
for(int k=;k<m;k++)ans=max(ans,max(dp[k][],dp[k][]));
if(i==&&j==n){
ans=max(ans,dp[m][]);
int sum=;
for(int k=m;k>;k--)sum+=b[k],ans=max(ans,sum);
}
else ans=max(ans,max(dp[m][],dp[m][]));
}
}
printf("%d",ans);
}
AC 前缀和+dp
2017-10-24 NOIP模拟赛的更多相关文章
- 2017 10.25 NOIP模拟赛
期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- 2018.10.16 NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...
- 2017.6.11 NOIP模拟赛
题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...
- 2016.10.30 NOIP模拟赛 day2 PM 整理
满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...
- 2016.10.30 NOIP模拟赛 day2 AM 整理
题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分 2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...
- 10.24 noip模拟试题
尼玛pdf依旧不会粘23333 /* 每段合并到总的里面 假设总的有X个 这一段有Y个 一共有X+1个空 那么就有 C(X+1,1)+C(X+1,2)+C(X+1,3)+...+C(X+1,Y) 这样 ...
- 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)
期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...
- 2018.10.03 NOIP+ 模拟赛 解题报告
得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...
随机推荐
- 分享知识-快乐自己:PageHelper 分页关键基础代码
关键代码:点我下载样式 详细介绍 //使用分页插件 jQuery("#pagination").pagination(data.total, { items_per_page: ...
- jQuery与javascript库
[jquery-javascript库] 为了简化javascript的开发,诞生了javascript程序库,他封装了很多预定的对象和实用函数.下面是几种流行的javascript程序库:proto ...
- python实现无序列表:链表
介绍链表前我们先了解下什么是列表. 在对基本数据结构的讨论中,我们使用 Python 列表来实现所呈现的抽象数据类型.列表是一个强大但简单的收集机制,为程序员提供了各种各样的操作.然而,不是所有的编程 ...
- PS 滤镜——(扭曲)逆球面化 (凹陷效果)
%%% Inverse_Spherize %%% 逆球面化 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Proce ...
- bzoj 2434: 阿狸的打字机 fail树+离线树状数组
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2434 题解: 首先我们可以发现这个打字的过程本身就是在Trie上滚来滚去的过程 所以我们 ...
- RTSP协议分析(二)
以下是某省IPTV的RTSP协商过程: DESCRIBE rtsp://118.122.89.27:554/live/ch10083121594790060557.sdp?playtype=1& ...
- hdu 5909 Tree Cutting —— 点分治
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治,每次的 rt 是必选的点: 考虑必须选根的一个连通块,可以DP,决策就是在每个子树中决定选不 ...
- spring IOC 注解@Autowired
自动装配:按照类型来找 会在xml中找类型一样的, 比如 setMessage(SetName setName)上面有@Autowired,会到xml中找<bean id="setna ...
- Poj_1045
这道题难点在于基本物理知识和数学的结合. 得出公式后再code,那就是小菜一碟了. import java.util.Scanner; import java.lang.Math; public cl ...
- POJ3630(Trie树)
Phone List Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26385 Accepted: 7957 Descr ...