洗澡

/*
这个题不能单纯判断左括号和右括号的多少,而应该从左到右扫一遍,看应该如何配对
*/
#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的更多相关文章

  1. 清北刷题冲刺 10-30 a.m

    星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...

  2. 清北刷题冲刺 10-28 p.m

    水题(贪心) (water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...

  3. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  4. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  5. 2017-10-3 清北刷题冲刺班p.m

    a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...

  6. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  7. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  8. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  9. 2017-10-1 清北刷题冲刺班p.m

    一道图论好题 (graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...

  10. 清北刷题冲刺 11-03 a.m

    纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

随机推荐

  1. 目标检测 — one-stage检测(二)

    one-stage检测算法,其不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果,因此有着更快的检测速度,比较典型的算法如YOLO,S ...

  2. 在接口中的静态方法来获取model的实例对象

    直接先上代码: 接口代码 abstract class BaseModel { /** * @var null */ protected static $_instances = Array(); / ...

  3. Dedecms丨显示指定的导航栏

    代码实例: {dede:channelartlist type='top' typeid='9,12,10' row='3' orderby='sortrank'}<li><a hr ...

  4. BEC listen and translation exercise 41

    Its advantages are that it can be used for outside activities So my recommendation I'm afraid would ...

  5. CTS 2019 Pearl

    CTS2019 Pearl 每种颜色有奇偶两种情况,只有偶数和只有奇数个,其对应的的指数型生成函数分别为 \(\frac{e^x+e^{-x}}2,\frac{e^x-e^{-x}}2\) 考虑选出现 ...

  6. BZOJ1216:[HNOI2003]操作系统

    我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...

  7. C/C++文件读写操作总结

    本文主要从两方面介绍读写文件操作,一个是C,另一个是C++. 一.基于C的文件操作. 在ANSI C中对文件操作有两种方式,一种是流式文件操作,另一种是I/O文件操作.下面分别介绍. 1.流式文件操作 ...

  8. jQuery常用ajax操作

    在做asp.net项目的时候经常会用到ajax操作,现总结常用的ajax操作供平时项目中参考 第一种: 前端代码: <script type="text/javascript" ...

  9. Bellman-Ford算法及其队列优化(SPFA)

    一.算法概述 Bellman-Ford算法解决的是一般情况下的单源最短路径问题.所谓单源最短路径问题:给定一个图G=(V,E),我们希望找到从给定源结点s属于V到每个结点v属于V的最短路径.单源最短路 ...

  10. SQL常用语法及规则-表格的操作

    一.规则和标准 1)每一行SQL语句结尾,加分号: 2)所创建的对象,名字用反引号(不是引号,与~同一个键): 3)一般关键字或保留字要大写: 4)两个中划线 + 空格(-- ),后面的语句为注释语句 ...