0x18 总结与练习
这一章不太满意啊。。
还是有点痛苦,但就是做的挺慢啊。。。
1、就是例题
2、括号画家 感觉这种提高组类型的细节题都没什么信心啊,fail了几次才A
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; char ss[];
int top,sta[],sum[];
int main()
{
scanf("%s",ss+);int len=strlen(ss+);
top=;int mmax=,nx=;
memset(sum,,sizeof(sum));
for(int i=;i<=len;i++)
{
if(ss[i]=='(')sta[++top]=;
else if(ss[i]=='[')sta[++top]=;
else if(ss[i]=='{')sta[++top]=;
else if(ss[i]==')')
{
if(top>&&sta[top]==)
{
sum[top-]+=sum[top]+;
sum[top]=,top--;
nx=max(nx,sum[top]);
}
else
{
mmax=max(mmax,nx);nx=;
while(top>)sum[top]=,top--;
sum[top]=;
}
}
else if(ss[i]==']')
{
if(top>&&sta[top]==)
{
sum[top-]+=sum[top]+;
sum[top]=,top--;
nx=max(nx,sum[top]);
}
else
{
mmax=max(mmax,nx);nx=;
while(top>)sum[top]=,top--;
sum[top]=;
}
}
else if(ss[i]=='}')
{
if(top>&&sta[top]==)
{
sum[top-]+=sum[top]+;
sum[top]=,top--;
nx=max(nx,sum[top]);
}
else
{
mmax=max(mmax,nx);nx=;
while(top>)sum[top]=,top--;
sum[top]=;
}
}
}
printf("%d\n",max(mmax,nx));
return ;
}
括号画家
3&&6、更加细节题,怂了
upd 完了表达式计算这种NOIP水题都写了这么久还fail了几发姿势很丑
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL p=(1LL<<);
int quick_pow(int A,int p)
{
int ret=;
while(p!=)
{
if(p%==)ret*=A;
A*=A;p/=;
}
return ret;
} char ss[];
int top,nxt[],las;LL sta[];
int readnum(int &i)
{
int ret=;
while(''<=ss[i]&&ss[i]<='')
ret=ret*+ss[i]-'', i++;
i--;
return ret;
}
int t,s[];
int solve(int l,int r)
{
t=;
if(sta[l+]==p+)sta[l+]=-sta[l+],l++;
s[++t]=sta[l+];
for(int i=l+;i<=r-;i+=)
{
if(sta[i-]>p+)
{
if(sta[i-]==p+)s[t]=s[t]*sta[i];
if(sta[i-]==p+)s[t]=s[t]/sta[i];
if(sta[i-]==p+)s[t]=quick_pow(s[t],sta[i]);
}
else
{
if(sta[i-]==p+)s[++t]=sta[i];
if(sta[i-]==p+)s[++t]=-sta[i];
}
}
int ret=;
for(int i=;i<=t;i++)ret+=s[i];
return ret;
}
int main()
{
scanf("%s",ss+);int n=strlen(ss+);n++;
ss[]='(';ss[++n]=')'; las=;top=;
for(int i=;i<=n;i++)
{
if(''<=ss[i]&&ss[i]<='')sta[++top]=readnum(i);
else if(ss[i]=='(')sta[++top]=p, nxt[top]=las,las=top;
else if(ss[i]=='+')sta[++top]=p+;
else if(ss[i]=='-')sta[++top]=p+;
else if(ss[i]=='*')sta[++top]=p+;
else if(ss[i]=='/')sta[++top]=p+;
else if(ss[i]=='^')sta[++top]=p+;
else if(ss[i]==')')
{
int r=top+;
top=las, sta[top]=solve(las,r), las=nxt[las];
}
}
printf("%d\n",sta[top]);
return ;
}
表达式计算4
4、poj1964 这个不就是2559嘛,枚举一下列就行了(鄙视rainbowcat卖狗粮)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int m,n,c[];
char ss[];
void sc()
{
for(int i=;i<=n;i++)
{
scanf("%s",ss+);
if(ss[]=='R')c[i]=;
else c[i]++;
}
}
int top,sta[],w[];
int solve()
{
int ret=;c[n+]=;
top=;sta[++top]=;w[top]=;
for(int i=;i<=n+;i++)
{
int L=;
while(top>&&c[i]<=c[sta[top]])
{
ret=max(ret,c[sta[top]]*(w[top]+L));
L+=w[top];top--;
}
sta[++top]=i;w[top]=L+;
}
return ret*;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int mmax=;
scanf("%d%d",&m,&n);
memset(c,,sizeof(c));
for(int T=;T<=m;T++)
sc(), mmax=max(mmax,solve());
printf("%d\n",mmax);
}
return ;
}
poj1964
5、这题都做到烂了
7、Matrix 这题真是做到人心态血崩。。。首先A是到100的,我就直接把每一列长度为A的区间用两个long long存,然后xjb hash前10位弄个hash表,结果这狗逼数据居然故意卡我,弄个全是0的矩阵询问还只有最后一位1,然后我也很不要脸的把后10位hash了做。。。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; char ss[][],sc[][];
LL zt[][][],hh[][]; int n,m,A,B;
int nxt[],last[];
int point(int x,int y){return (x-)*m+y;}
int main()
{
scanf("%d%d%d%d",&n,&m,&A,&B);
for(int i=;i<=n;i++)scanf("%s",ss[i]+); memset(zt,,sizeof(zt));
for(int i=;i<=n-A+;i++)
for(int j=;j<=m;j++)
for(int k=;k<=A;k++)
{
LL x=ss[i+k-][j]-'';
if(k<=)zt[i][j][]+=(x<<(k-));
else zt[i][j][]+=(x<<(k-));
}
for(int i=;i<=n-A+;i++)
for(int j=;j<=m-B+;j++)
{
int p=point(i,j);LL ke=;
int li=min(B,);
for(int k=B-li+;k<=B;k++)
{
LL d=(zt[i][j+k-][]*+zt[i][j+k-][])%;
ke=(ke*+d)%;
}
nxt[p]=last[ke];
last[ke]=p;
} int Q;
scanf("%d",&Q);
while(Q--)
{
for(int i=;i<=A;i++)scanf("%s",sc[i]+);
memset(hh,,sizeof(hh));
for(int j=;j<=B;j++)
for(int i=;i<=A;i++)
{
LL x=sc[i][j]-'';
if(i<=)hh[j][]+=(x<<(i-));
else hh[j][]+=(x<<(i-));
}
LL ke=;int li=min(B,);
for(int k=B-li+;k<=B;k++)
{
LL d=(hh[k][]*+hh[k][])%;
ke=(ke*+d)%;
}
int QAQ=;
for(int k=last[ke];k;k=nxt[k])
{
int x,y;
y=(k%m==)?m:k%m;
x=(k-y)/m+; bool bk=true;
for(int j=;j<=B;j++)
if(hh[j][]!=zt[x][y+j-][]||
hh[j][]!=zt[x][y+j-][])
{bk=false;break;}
if(bk==true){QAQ=;break;}
}
printf("%d\n",QAQ);
}
return ;
}
Matrix
8、做KMP那章的时候没有最小表示法的例题,就随便找了道,结果就是这个0x15 KMP
9、poj2185 先把行hash,然后做kmp求循环节,同样把列这样搞一次,乘起来就行了
contest hunter里面还有道EXKMP的,懒得复习了zzz
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n,m;
char ss[][];
int ha[];
bool check(int x,int y)
{
if(ha[x]!=ha[y])return false;
for(int j=;j<=m;j++)
if(ss[x][j]!=ss[y][j])return false;
return true;
}
bool check2(int x,int y)
{
if(ha[x]!=ha[y])return false;
for(int i=;i<=n;i++)
if(ss[i][x]!=ss[i][y])return false;
return true;
}
int p[];
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%s",ss[i]+); for(int i=;i<=n;i++)
{
ha[i]=;
for(int j=;j<=m;j++)
ha[i]=(ha[i]*+(ss[i][j]-'A'+))%;
}
p[]=;int j=;
for(int i=;i<=n;i++)
{
while(j>&&check(i,j+)==false)j=p[j];
if(check(i,j+)==true)j++;
p[i]=j;
}
int d1=n-p[n]; for(int j=;j<=m;j++)
{
ha[j]=;
for(int i=;i<=n;i++)
ha[j]=(ha[j]*+(ss[i][j]-'A'+))%;
}
p[]=;j=;
for(int i=;i<=m;i++)
{
while(j>&&check2(i,j+)==false)j=p[j];
if(check2(i,j+)==true)j++;
p[i]=j;
}
int d2=m-p[m]; printf("%d\n",d1*d2);
return ;
}
poj2185
10、poj3630 水
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; struct Trie
{
int w[];bool b;
Trie(){}
void clean(){b=false;memset(w,,sizeof(w));}
}tr[];int trlen;
char ss[];
bool maketree()
{
int now=,len=strlen(ss+);bool bk=false;
for(int i=;i<=len;i++)
{
int x=ss[i]-'';
if(tr[now].w[x]==)
tr[now].w[x]=++trlen, tr[trlen].clean(), bk=true;
now=tr[now].w[x];
if(tr[now].b==true){bk=false;break;}
}
tr[now].b=true;
return bk;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;bool qwq=true;
scanf("%d",&n);
trlen=;tr[trlen].clean();
for(int i=;i<=n;i++)
{
scanf("%s",ss+);
if(qwq==true)qwq=maketree();
}
if(qwq==true)printf("YES\n");
else printf("NO\n");
}
return ;
}
poj3630
11、poj1442 难度在题意。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std; int a[],b[];
priority_queue<int,vector<int>,greater<int> >q;
priority_queue<int>d;
int main()
{
int n,m,ti,tp=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=m;i++)
{
scanf("%d",&ti);
while(tp<=n&&tp<=ti)
{
d.push(a[tp]);tp++;
q.push(d.top());d.pop();
}
printf("%d\n",q.top());
d.push(q.top()),q.pop();
} return ;
}
poj1442
12、bzoj2288: 【POJ Challenge】生日礼物
0x18 总结与练习的更多相关文章
- (.text+0x18): undefined reference to `main'
在将VS中的程序移植到ubuntu中出现的一个问题,主要原因是在vs中默认的主函数写成int _tmain(), 而在gcc编译时要找的是int main().改过来就可以了.
- Gradle 实现 Android 多渠道定制化打包
Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...
- 破解SQLServer for Linux预览版的3.5GB内存限制 (RHEL篇)
微软发布了SQLServer for Linux,但是安装竟然需要3.5GB内存,这让大部分云主机用户都没办法尝试这个新东西 这篇我将讲解如何破解这个内存限制 要看关键的可以直接跳到第6步,只需要替换 ...
- Response.Redirect引起的性能问题分析
现象: 最近做的一个系统通过单点登录(SSO) 技术验证用户登录.用户在SSO 系统上通过验证后,跳转到该系统的不同模块.而跳转的时间一直维持子啊几分钟左右. 分析步骤: 在问题复现时抓取Hang d ...
- 你所能用到的BMP格式介绍
原理篇: 一.编码的意义. 让我们从一个简单的问题开始,-2&-255(中间的操作符表示and的意思)的结果是多少,这个很简单的问题,但是能够写出解答过程的人并不 多.这个看起来和图片格式没有 ...
- 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...
- Windbg Extension NetExt 使用指南 【2】 ---- NetExt 的基本命令介绍
摘要 : 本章节介绍NetExt常用的命令. 并且对SOS进行一些对比. NetExt的帮助 要想玩好NetExt, 入门就得看帮助. 看NetExt的帮助可以调用!whelp 命令. 这样hi列举出 ...
- 一个由Response.Redirect 引起的性能问题的分析
现象: 某系统通过单点登录(SSO) 技术验证用户登录.用户在SSO 系统上通过验证后,跳转到某系统的主页上面.而跳转的时间很长,约1分钟以上. 分析步骤: 在问题复现时抓取Hang dump 进行分 ...
- C#调用SendMessage 用法
函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.该函数是应用程序和应用程序之间进行消息传递的主要手段之一. 函数原型:LRESUL ...
随机推荐
- golang图片压缩
package main import ( //"encoding/json" "fmt" //"os" //&qu ...
- 前端(小程序)项目Aes.js/Md5.js加密的处理方法
做项目中需要对前端数据加密传输这个时候需要用到前端加密的算法主要是:Aes.js,Md5.js 一.Vue项目用到的aes.js加密. 1.直接在index.html引入aes.js或者在npm in ...
- Javassist介绍
要想将编译时不存在的类在运行时动态创建并加载,通常有两种策略: 1. 动态编译 2. 动态生成二进制字节码(.class) 对于第二种策略,实际上已经有诸多比较成熟的开源项目提供支持,如CGLib.A ...
- 在无任何报错的情况下 pagehelper.startpage分页无效问题
问题原因:自从spring boot开始使用2.0x版本以上后,很多相应的依赖文件版本开始变化 该版本为spring-boot 1.4.1 <dependency> <groupId ...
- PostgreSQL的HA解决方案-项目概述
公司使用的数据库时postgresql,一直运行都很流畅,但是最近java新做的管理平台,由于登录用户较多,并发性比较大.另外新系统可能优化也存在问题,所以pg经常崩溃,所以我就开始研究如何事项pg的 ...
- 如何上传SNAPSHOT类型的JAR文件到nexus中
在要上传的文件的目录中执行以下命令即可: mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.5.4 ...
- Python框架、库和软件资源大全(整理篇)
有少量修改,请访问原始链接.PythonWIn的exe安装包;http://www.lfd.uci.edu/~gohlke/pythonlibs/ 原文链接:codecloud.net/python- ...
- 场景报错Error -27492: "HttpSendRequest" failed, Windows error code=12029 (cannot connect) and retry limit (0) exceeded for URL=""
1.现象:loadrunner场景执行,tps图是一段很平稳,然后直线触底,一段时间,直线恢复平稳,触底这段时间报错信息如下: Action.c(6): Error -27492: "Htt ...
- 利用chrome浏览器断电调试确定函数触发的位置
比如某天遇到这样一个问题,页面有一个按钮,上面绑定了事件可能是多个事件,然后我们点击后出现了bug,我们要如何快速定位到这个事件,如果页面只有一个js或少量的js,我们一个打开查找,也可以接受.但是如 ...
- python编写简单的html登陆页面(4)
python编写简单的html登陆页面(4) 1 在python编写简单的html登陆页面(2)的基础上在延伸一下: 可以将动态态分配数据,建立表格,存放学生信息 2 实现的效果如下: 3 动 ...