清北刷题冲刺 10-29 p.m
洗澡

/*
这个题不能单纯判断左括号和右括号的多少,而应该从左到右扫一遍,看应该如何配对
*/
#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;
}
100分 模拟
日记


#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#define maxn 2010
#ifdef WIN32
#define PLL "%I64d"
#else
#define PLL "%lld"
#endif
using namespace std;
int T;
struct node{
int n,k;
}a[maxn];
bool flag=,vis[];
int p[],cnt,mx;
long long sum[];
void prepare(){
for(int i=;i<=mx;i++){
if(!vis[i])vis[i]=,p[++cnt]=i;
for(int j=;j<=cnt&&i*p[j]<=mx;j++){
vis[i*p[j]]=;
if(i%p[j]==)break;
}
}
for(int i=;i<=cnt;i++)sum[i]=sum[i-]+p[i];
}
int find(int x){//寻找不超过x的最大的数的位置
int l=,r=cnt,res=-;
while(l<=r){
int mid=(l+r)>>;
if(p[mid]<=x)res=mid,l=mid+;
else r=mid-;
}
return res;
}
int find2(int l,int r,int x,int k){//寻找结尾为l~r的,区间长度为k的,不超过x的最大的数的结尾位置
int res=-;
while(l<=r){
int mid=(l+r)>>;
if(sum[mid]-sum[mid-k]<=(long long)x)res=mid,l=mid+;
else r=mid-;
}
return res;
}
int main(){
freopen("diary.in","r",stdin);freopen("diary.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d",&T);
for(int i=;i<=T;i++){
scanf("%d%d",&a[i].n,&a[i].k);
if(i!=&&a[i].n!=a[i-].n)flag=;
mx=max(mx,a[i].n);
}
prepare();
if(flag){
int pos=find(a[].n);//寻找小于等于n的最大的数
if(pos==-){
for(int i=;i<=T;i++)puts("-1");
return ;
}
for(int i=;i<=T;i++){
if(a[i].k>pos||sum[a[i].k]>a[i].n){puts("-1");continue;}
int posnow=find2(a[i].k,pos,a[i].n,a[i].k);
if(posnow==-){puts("-1");continue;}
long long now=sum[posnow]-sum[posnow-a[i].k];
printf(PLL"\n",now);
}
return ;
}
for(int i=;i<=T;i++){
int pos=find(a[i].n);
if(pos==-){puts("-1");continue;}
if(a[i].k>pos||sum[a[i].k]>a[i].n){puts("-1");continue;}
int posnow=find2(a[i].k,pos,a[i].n,a[i].k);
if(posnow==-){puts("-1");continue;}
long long now=sum[posnow]-sum[posnow-a[i].k];
printf(PLL"\n",now);
}
return ;
}
100分 二分查找
洗衣



/*
对每个树暴力建图,map[i][j][k]表示第i棵树的j与k之间的距离
对于每棵树,先暴力经行边权赋值(根据a树和b树以及l),再跑一遍floyed,最后统计答案即可
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int map[][][];
int sz[];
int m,a,b,c,d,l;
void fl(int x){
for(int k=;k<sz[x];k++)
for(int i=;i<sz[x];i++)
for(int j=;j<sz[x];j++){
if(i==j||i==k||j==k)continue;
map[x][i][j]=min(map[x][i][j],map[x][i][k]+map[x][k][j]);
}
int ans=;
for(int i=;i<sz[x];i++)
for(int j=i+;j<sz[x];j++)
ans+=map[x][i][j];
printf("%d\n",ans);
}
int main(){
freopen("cloth.in","r",stdin);freopen("cloth.out","w",stdout);
// freopen("Cola.txt","r",stdin);
memset(map,0x3f,sizeof(map));
sz[]=;map[][][]=;
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d%d%d%d%d",&a,&b,&c,&d,&l);
sz[i]=sz[a]+sz[b];
for(int j=;j<sz[a];j++)
for(int k=j;k<sz[a];k++)
map[i][j][k]=map[i][k][j]=map[a][j][k];
for(int j=;j<sz[b];j++)
for(int k=j;k<sz[b];k++)
map[i][j+sz[a]][k+sz[a]]=map[i][k+sz[a]][j+sz[a]]=map[b][j][k];
map[i][c][d+sz[a]]=map[i][d+sz[a]][c]=l;
fl(i);
}
return ;
}
40分 暴力
预计得分100++
实际得分100++
T1是个比较简单的模拟,T2两次二分查找,前两道题都比较好想,代码已不太容易出错
T3完全没有思路,在想怎么存图,想到可以给数组增加一个维度,这样应该可以过前30%的数据,就这么做了
这次考试比上午简单一点,暴力分拿到了,也没有犯很低级的错误
小结
清北刷题冲刺 10-29 p.m的更多相关文章
- 清北刷题冲刺 10-30 a.m
星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...
- 清北刷题冲刺 10-28 p.m
水题(贪心) (water) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...
- 2017-10-4 清北刷题冲刺班p.m
P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...
- 2017-10-4 清北刷题冲刺班a.m
P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...
- 2017-10-3 清北刷题冲刺班p.m
a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...
- 2017-10-3 清北刷题冲刺班a.m
P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...
- 2017-10-2 清北刷题冲刺班a.m
一道图论神题 (god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...
- 2017-10-2 清北刷题冲刺班p.m
最大值 (max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...
- 2017-10-1 清北刷题冲刺班p.m
一道图论好题 (graph) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...
- 清北刷题冲刺 11-03 a.m
纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
随机推荐
- string 中的 length函数 和size函数 返回值问题
string 中的 length函数 和 size函数 的返回值 ( 还有 char [ ] 中 测量字符串的 strlen 函数 ) 应该是 unsigned int 类型的 不可以 和 -1 ...
- python 特征选择 绘图 + mine
demo代码: # _*_coding:UTF-8_*_ import numpy as np import sys import pandas as pd from pandas import Se ...
- 2018.5.28 PSOC第一枪:基于cypress的蓝牙开发
Cypress-BLE 开发套件可以快速开发 物联网电子产品. PSOC编程特点: A 拖放各PSoC 组件到工作区中,以设计原理图B 完成各组件之间的布线,并配置GPIOC 使用所包含的组件API ...
- nodejs 解析 base64 文本
使用Buffer对象,在创建Buffer,指定源的编码方式 Buffer.from(data, 'base64').toString(); 当然如果是解析图片或者二进制数据的话,就不需要toStrin ...
- Postgresql windows下安装过程
1.下载前三个软件: 理论上安装Perl,TCL,Bison and Flex这三个插件 实际上安装ActiveState Perl,ActiveState tcl ,MinGW 因为MinGW包括了 ...
- linux命令学习笔记(49):at命令
在windows系统中,windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务. 通过'添加任务计划'的一步步引导,则可建立一 ...
- ONVIF测试方法及工具
设备是否支持ONVIF验证1 ONVIF Test Tool安装1.1PC安装环境要求:装有Microsoft .Net Framework 3.5或以上版本.1.2安装源文件请见:ONVIF Con ...
- poj 2069 Super Star 模拟退火
题目大意: 给定三位空间上的n(\(n \leq 30\))个点,求最小的球覆盖掉所有的点. 题解: 貌似我们可以用类似于二维平面中的随机增量法瞎搞一下 但是我不会怎么搞 所以我们模拟退火就好了啊QA ...
- VC++6.0注释快捷键的添加使用
在eclipse等编辑工具中都有注释代码的快捷键,但是vc++6.0没有. vc++是以VB为脚本来控制的,在网上找到了一个VB的脚本供大家使用. 工具/原料 VC++6.0 方法/步骤 打开VC ...
- jexus入门
参考:https://www.linuxdot.net/bbsfile-3084 一.Jexus简介:Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux ...