NOIP模拟赛-2018.11.5
NOIP模拟赛
好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了。
今天的模拟赛好像很有技术含量的感觉.
T1:xgy断句.
好诡异的题目,首先给出一些词,一个字符串,要求断句:每个句子至少有三个词,词数是总单词数的因数,单词得是字典里的词.求最多能断多少句.
首先当然是暴力匹配每一段是否是单词,然后$f_i$表示以$i$结尾的前缀中最多能断多少句,枚举断点进行转移,如何判断能否构成句子呢?搜索啊.
这里一定要注意如果最后一个状态是极小值,那么输出$0$.因为这个挂了$20$分.
# include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# include <algorithm>
# include <cmath>
# define R register int
# define ll long long using namespace std; const int maxn=;
int n,len[maxn],l;
char dic[maxn][];
char s[];
int dp[],leng,checkf;
int f[][],c[][]; void dfs (int x,int s,int r)
{
if(x==r+)
{
if(s>=&&leng%s==) checkf=;
return ;
}
if(checkf) return;
for (R i=x;i<=r;++i)
if(c[x][i])
dfs(i+,s+,r);
} bool check (int l,int r)
{
if(f[l][r]!=-) return f[l][r];
leng=r-l+;
checkf=false;
dfs(l,,r);
f[l][r]=checkf;
return f[l][r];
} void init()
{
for (R i=;i<=l;++i)
for (R j=;j<=i;++j)
{
int f=false;
for (R k=;k<=n;++k)
{
if(len[k]!=i-j+) continue;
int ff=true;
for (R z=;z<=len[k];++z)
if(s[j+z-]!=dic[k][z]) ff=false;
if(ff) f=true;
if(f) break;
}
if(f) c[j][i]=;
}
} int main()
{
freopen("xgy.in","r",stdin);
freopen("xgy.out","w",stdout); scanf("%d",&n);
memset(f,-,sizeof(f));
for (R i=;i<=n;++i)
{
scanf("%s",dic[i]+);
len[i]=strlen(dic[i]+);
for (R j=;j<=len[i];++j)
if(dic[i][j]>='A'&&dic[i][j]<='Z') dic[i][j]=dic[i][j]-'A'+'a';
}
scanf("%s",s+);
l=strlen(s+);
for (R i=;i<=l;++i)
if(s[i]>='A'&&s[i]<='Z') s[i]=s[i]-'A'+'a';
init();
for (R i=;i<=l;++i)
dp[i]=-;
dp[]=;
for (R i=;i<=l;++i)
for (R j=;j<i;++j)
{
if(dp[j]==-) continue;
if(i-j+>) continue;
if(check(j+,i)) dp[i]=max(dp[i],dp[j]+);
}
printf("%d\n",dp[l]);
fclose(stdin);
fclose(stdout);
return ;
}
xgy断句
T2:多人背包.
显然前$k$优的状态不可能由比前$k$个还劣的状态转移过来,那么只保存前$k$优的即可.然而我强行把$KlogK$写成了$K^3$,竟然卡过了.
# include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# include <algorithm>
# include <cmath>
# define R register int
# define ll long long using namespace std; const int maxn=;
int k,V,n;
int w[maxn],v[maxn];
int dp[][];
int a[maxn]; int main()
{
freopen("bag.in","r",stdin);
freopen("bag.out","w",stdout); scanf("%d%d%d",&k,&V,&n);
for (R i=;i<=n;++i) scanf("%d%d",&w[i],&v[i]);
memset(dp,,sizeof(dp));
dp[][]=;
for (R i=;i<=n;++i)
for (R j=V;j>=w[i];--j)
{
for (R z=;z<=k;++z)
{
int T=dp[z][ j-w[i] ]+v[i];
if(T<) continue;
for (R l=z;l<=k;++l)
if(T>dp[l][j])
{
for (R t=k;t>l;--t)
dp[t][j]=dp[t-][j];
dp[l][j]=T;
break;
}
}
}
int ans=;
for (R i=;i<=k;++i) ans+=dp[i][V];
printf("%d",ans);
fclose(stdin);
fclose(stdout);
return ;
}
多人背包
T3:冰原探险.
似乎爆搜加$map$判重可过,离散化比较麻烦,而且把一些山之间的通道给离散没了...得了70.
# include <cstdio>
# include <iostream>
# include <map>
# include <algorithm>
# include <bitset>
# include <queue>
# define R register int using namespace std; const int dx[]={-,,,};
const int dy[]={,-,,};
const int maxn=;
const int knc=;
int n,N,M;
map <int,int> m;
int x[maxn],y[maxn],sx,sy,ex,ey,a[maxn],b[maxn],c[maxn],d[maxn];
bool ic[knc][knc],vis[knc][knc];
struct node
{
int x,y,v;
};
queue <node> q; int bfs ()
{
node a,b;
a.x=sx,a.y=sy,a.v=;
q.push(a);
while(q.size())
{
a=q.front();
q.pop();
int x=a.x,y=a.y;
vis[x][y]=;
if(a.x==ex&&a.y==ey) return a.v;
for (R d=;d<;++d)
{
x=a.x,y=a.y;
while(ic[x][y]==)
{
x+=dx[d],y+=dy[d];
if(x>N||y>M||x<||y<) break;
if(x==ex&&y==ey)
return a.v+;
}
if(x>N||y>M||x<||y<) continue;
if(!ic[x][y]) continue;
x-=dx[d],y-=dy[d];
if(vis[x][y]) continue;
vis[x][y]=;
b.x=x,b.y=y,b.v=a.v+;
q.push(b);
}
}
return ;
} int read ()
{
R x=,f=;
char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-f; c=getchar(); }
while(isdigit(c)) x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
} int main()
{
freopen("ice.in","r",stdin);
freopen("ice.out","w",stdout); n=read();
sx=read(),sy=read(),ex=read(),ey=read();
x[++x[]]=sx,x[++x[]]=ex;
y[++y[]]=sy,y[++y[]]=ey;
for (R i=;i<=n;++i)
{
a[i]=read(),b[i]=read(),c[i]=read(),d[i]=read();
x[++x[]]=a[i],x[++x[]]=c[i];
y[++y[]]=b[i],y[++y[]]=d[i];
}
sort(x+,x++x[]);
sort(y+,y++y[]);
int cnt=;
for (R i=;i<=x[];++i)
{
if(x[i]!=x[i-]||i==) cnt++;
m[ x[i] ]=cnt;
}
N=cnt;
for (R i=;i<=n;++i)
a[i]=m[ a[i] ],c[i]=m[ c[i] ];
sx=m[sx],ex=m[ex];
cnt=;
m.clear();
for (R i=;i<=y[];++i)
{
if(y[i]!=y[i-]||i==) cnt++;
m[ y[i] ]=cnt;
}
M=cnt;
for (R i=;i<=n;++i)
b[i]=m[ b[i] ],d[i]=m[ d[i] ];
sy=m[sy],ey=m[ey];
for (R i=;i<=n;++i)
for (R j=a[i];j<=c[i];++j)
for (R z=b[i];z<=d[i];++z)
ic[j][z]=; printf("%d",bfs());
fclose(stdin);
fclose(stdout);
return ;
}
冰原探险
---shzr
NOIP模拟赛-2018.11.5的更多相关文章
- NOIP模拟赛-2018.11.7
NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...
- NOIP模拟赛-2018.11.6
NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...
- NOIP模拟赛-2018.10.22
模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...
- 11/1 NOIP 模拟赛
11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
随机推荐
- C++ 小知识点 WINAPI
int WINAPI WINMain 中,WINAPI含义 网友给出回答:在windef.h头文件中有如下定义#define WINAPI __stdcall#define APIENTRY ...
- 几种流行的AJAX框架对比:Jquery,Mootools,Dojo,ExtJs,Dwr
1:Jquery 主页:http://jquery.com/ 设计思想:简洁的方案思想,几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性). ...
- SQL - 循环
declare @itemnumber int --定义需要循环的次数 declare @tagint int --定义标志字段,用于结束循环 select @itemnumber = count(d ...
- 月赛 && SX_ACM 惨痛教训
1.cnt变量若有多次询问,一定要记得初始化!!! 2.多组数据输出入,区泛~. 3.高性能问题,考虑位运算,
- JavaSE Collections类 , Iterator迭代器 , 增强for循环
Collections 它是集合的工具类,为集合体系扩展了一些其他的方法.类中都是静态的方法,可以使用类名直接调用. 可变参数 在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类 ...
- Netty中的LoggingHandler()
当添加.addLast("logging", new LoggingHandler(LogLevel.INFO))这行代码时 Netty就会以给定的日志级别打印出LoggingHa ...
- retrofit2 不创建对象直接返回字符串
retrofit请求直接返回string 有个需求是直接用retrofit去get网页得到html,不创建对象. 用上面文章讲的方法,直接返回ResponseBody ICollection: pub ...
- Android使用AOP
这里不讲aop的概念,网上资料很多,这里只讲如何配置aop和自定义plugin. 1.使用场景 在android中,有些业务是公共的,例如:登录判断.获取权限.网络判断等一些公用的业务逻辑,这些都可以 ...
- 语音识别(ASR) 阿里云
做语音识别这块的呢,国内领先的有科大讯飞,BAT这几家公司,鉴于使用科大讯飞的接口需要付费,腾讯云的语音识别申请了几天也没给通过,比较了一下阿里和百度的,个人觉得阿里云的好用一些,这篇博客来讲讲怎么讲 ...
- PHP trick(代码审计关注点)
随着代码安全的普及,越来越多的开发人员知道了如何防御sqli.xss等与语言无关的漏洞,但是对于和开发语言本身相关的一些漏洞和缺陷却知之甚少,于是这些点也就是我们在Code audit的时候的重点关注 ...