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 ...
随机推荐
- VS 通用产品密钥
BWG7X-J98B3-W34RT-33B3R-JVYW9 HMGNV-WCYXV-X7G9W-YCX63-B98R2 HM6NR-QXX7C-DFW2Y-8B82K-WTYJV
- winform窗体 小程序【移动窗体和阴影】
窗体无边框设置后无法移动,引用API 使其获得功能 移动 //窗体移动API [DllImport("user32.dll")] public static extern bool ...
- 收集整理的oracle常用命令大全
一.Oracle的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl ...
- php根据命令行参数生成配置文件
像npm, composer等工具,在开始使用的使用,都需要初始化项目,生成一个项目的配置文件.这种功能的原理是怎么实现的呢? 比如: D:\>npm init --yes Wrote to D ...
- JSz中的静态方法和实例方法的分析
我又回来了,最近忙着喝枸杞,没来写博客感觉很有负罪感,今晚我来写一点小小的知识点 可能我们在用形如Array.of()的方法时会产生一些疑问,为什么我们能不实例化直接使用Array上的of()方法呢, ...
- 【读书笔记】iOS-网络-使用Bonjour实现自组织网络
Bonjour就是这样一种技术:设备可以通过它轻松探测并连接到相同网络中的其他设备,整个过程只需要很少的用户参与或是根本就不需要用户参与.该框架提供了众多适合于移动的使用场景,如基于网络的游戏,设备间 ...
- 【读书笔记】iOS-网络-三种错误
一,操作系统错误. iOS人机界面指南中,Apple建议不要过度使用AlertViews,因为这会破坏设备的使用感受. 操作系统错误: 1,没有网络. 2,无法路由到目标主机. 3,没用应和监听目标端 ...
- css选取table元素的第一列
table tr td:first-child
- web界面 之 登录 (初稿)
web登录一般注意以下几点: 1)拥有元素:用户名,密码(密码字符显示与隐藏功能),登录按钮,忘记密码链接(忘记用户名链接),注册链接 2)用户体验: •页面显示,光标默认停在第一个输入框 利用htm ...
- json_encode无返回结果
今天写php curl模拟客户端访问测试一个抽奖post数据,拿回来的数据是json,使用json_decode函数就是没结果,百度谷歌好久.终于发现是BOM的文件头造成的, 微软为utf-8文件添加 ...