普及C组第三题(8.10)
2301. 【普及组T3或T4】线索
(File IO): input:assassin.in output:assassin.out
时间限制: 1000 ms 空间限制: 262144 KB
题目描述(为毛是图片)
输入(为毛是图片)
输出(为毛是图片)
样例输入/输出(为毛是图片)
数据范围限制(为毛是图片)
思路:
(1)伪思路当然要小一点:暴力模拟左右两边判断,能像多少种情况就打多少种。。。hhh。
小代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,p=0,q=0,ans=0,sum=0;
bool flag1[1000001],flag2[1000001];
struct assassin
{
int left1,right1,money;
char a;
};
assassin ezio[1000001];
bool cmp1(assassin x,assassin y)
{
return x.left1<y.left1;
}
bool cmp2(assassin x,assassin y)
{
return x.right1<y.right1;
}
int main()
{
memset(flag1,true,sizeof(flag1));
memset(flag2,true,sizeof(flag2));
cin>>n;
for(int i=1;i<=n;i++)
cin>>ezio[i].a;
for(int i=1;i<=n;i++)
{
cin>>ezio[i].money;
sum=sum+ezio[i].money;
}
for(int i=1;i<=n;i++)
{
if(ezio[i].a=='('&&i!=n)
{
for(int j=i+1;j<=n;j++)
{
if(ezio[j].a==')'&&flag2[j]==true)
{
p++;
ezio[p].right1=ezio[j].money;
flag2[j]=false;
}
}
}
else if(ezio[i].a=='('&&i==n)
ans+=ezio[i].money;
if(ezio[i].a==')'&&i!=1)
{
for(int j=i-1;j>=1;j--)
{
if(ezio[j].a=='('&&flag1[j]==true)
{
q++;
ezio[q].left1=ezio[j].money;
flag1[j]=false;
}
}
}
else if(i==1&&ezio[i].a==')')
ans+=ezio[i].money;
}
cout<<q<<" "<<p<<endl;
sort(ezio+1,ezio+p+1,cmp1);
sort(ezio+1,ezio+q+1,cmp2);
for(int k=1;k<=p;k++)
cout<<ezio[k].left1<<" ";
for(int k=1;k<=q;k++)
cout<<ezio[k].right1<<" ";
for(int i=1;i<=n;i++)
{
if(p==0&&q==0)
break;
if(q>p)
{
ans=ezio[i].left1+ans;
q--;
}
else
if(p>q)
{
ans=ezio[i].right1+ans;
p--;
}
else
break;
}
if(p==0&&q==0)
cout<<sum;
else
cout<<ans;
}
真思路自然要大一点:(不会堆的这边请,一个大佬的:神奇传送门)
用一个大根堆维护左括号,小根堆维护右括号,遇上右括号就将大根堆堆顶弹出,如果大根堆空了,就加小根堆。如果小根堆空了就加大根堆,保证最后的一定小。
亲爱的代码同学又回来了:
#include<iostream>
#include<queue>
using namespace std;
int n,ans=;
char a[];
int b[];
priority_queue<int> q;
priority_queue<int,vector<int>,greater<int> >p;
int main()
{
cin>>n;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=n;i++)
cin>>b[i];
for(int i=;i<=n;i++)
{
if(a[i]=='(')
q.push(b[i]);
else
{
p.push(b[i]);
if(q.empty())
{
ans+=p.top();
p.pop();
}
else
q.pop();
}
}
while(q.empty()==false)
{
ans+=q.top();
q.pop();
}
cout<<ans;
}
结果测试点有毒,不开long long 毁一生。
(ノ=Д=)ノ┻━┻
#include<iostream>
#include<cstdio>
#include<queue>
#define int long long
using namespace std;
int n,ans=;
char a[];
int b[];
priority_queue<int> q;
priority_queue<int,vector<int>,greater<int> >p;
signed main()
{
freopen("assassin.in","r",stdin);
freopen("assassin.out","w",stdout);
cin>>n;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=n;i++)
cin>>b[i];
for(int i=;i<=n;i++)
{
if(a[i]=='(')
q.push(b[i]);
else
{
p.push(b[i]);
if(q.empty())
{
ans+=p.top();
p.pop();
}
else
q.pop();
}
}
while(q.empty()==false)
{
ans+=q.top();
q.pop();
}
cout<<ans;
}
完结撒花!!!
普及C组第三题(8.10)的更多相关文章
- 普及C组第三题(8.13)
2334. [NOIP普及组T2]战斗 (File IO): input:fight.in output:fight.out 时间限制: 1000 ms 空间限制: 524288 KB 开始贴图:. ...
- 普及C组第三题(8.12)
2304. 光芒 (File IO): input:light.in output:light.out 时间限制: 1000 ms 空间限制: 题目: 输入: 输出: 样例输入 5 1 1 0 1 ...
- NOIP 2008提高组第三题题解by rLq
啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...
- NOIP2008提高组(前三题) -SilverN
此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...
- 最优贸易 NOIP 2009 提高组 第三题
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...
- 第六届蓝桥杯java b组第三题
第三题 三羊献瑞 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容. 答案这个题目完全可以使用暴 ...
- 【动态规划】Vijos P1104 采药(NOIP2005普及组第三题)
题目链接: https://vijos.org/p/1104 题目大意: T时间,n个物品,每个耗时ti,可获得收益ci,求最大收益. 题目思路: [动态规划] 01背包裸题.一维二维都过了,放个一维 ...
- 【递归】Vijos P1132 求二叉树的先序序列(NOIP2001普及组第三题)
题目链接: https://vijos.org/p/1132 题目大意: 给定二叉树的中序和后序遍历,求该二叉树先序遍历. 题目思路: [递归] 这题妥妥递归. 二叉树先序根左右,中序左根右,后序左右 ...
- 【单调队列】Vijos P1771 瑞士轮 (NOIP2011普及组第三题)
题目链接: https://vijos.org/p/1771 题目大意: 给定2N个人(N<=100 000)和其初始分数.能力值(能力两两不同),比赛M次(M<=50),每次PK都是按分 ...
随机推荐
- MySQL 8 服务器日志
错误日志: 启动.运行.停止 mysqld(MySQL Server) 遇到的问题 通用查询日志: 建立客户端连接和从客户端接收的语句 二进制日志: 更改数据的语句(也用于复制) 中继日志: 从复制m ...
- C#中类的编程规范
C#中类的编程规范,或许这是一个好习惯. using System; using System.Collections.Generic; using System.Linq; using System ...
- python全栈学习 day02
pycharm 安装设置: 按照百度百科或者官网介绍下载,安装. 激活步骤 1:改host 2.输入激活信息,注意有效期. python 逻辑运算符://返回的均为bool值 与 and A and ...
- 使用Python爬虫整理小说网资源-自学
第一次接触python,原本C语言的习惯使得我还不是很适应python的语法风格.希望读者能够给出建议. 相关的入门指导来自以下的网址:https://blog.csdn.net/c406495762 ...
- 问题 I: 排名
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> ...
- 使用FDATOOL生成xilinx中FIR滤波器IP核的系数
1.在MATLAB命令窗口输入fdatool后回车,打开“Filter Designer & Analysis Tool”工具界面: 2.点击左下角的Set quantization para ...
- Python之四:控制流
1.If 逻辑判断: if a: b elif c: d else: e 先判断a语句块的值是否为真,如果为真,则执行b语句块,如果不为真则转到elif判断c语句块的值是否为真,如果为真执行d语句块, ...
- poj1000-1009小结
poj1000-1009小结 poj1000-1009小结 poj1000 AB poj1001 Exponentiation poj1002 poj1003 poj1004 Financial Ma ...
- 爬取豆瓣音乐TOP250的数据
参考网址:https://music.douban.com/top250 因为详细页的信息更丰富,本次爬虫在详细页中进行,因此先爬取进入详细页的网址链接,进而爬取数据. 需要爬取的信息有:歌曲名.表演 ...
- 点击按钮出现60秒倒计时,JS(按钮)
<script type="text/javascript"> var countdown=60; function settime(val) { var e = $( ...