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的更多相关文章

  1. NOIP模拟赛-2018.11.7

    NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...

  2. NOIP模拟赛-2018.11.6

    NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...

  3. NOIP模拟赛-2018.10.22

    模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...

  4. 11/1 NOIP 模拟赛

    11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...

  5. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  6. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  7. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  8. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  9. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

随机推荐

  1. Spring基础(3) : 静态工厂和实例工厂创建bean

    public class Factory { public static Person staticCreate(){ Person p = new Person(); p.name="st ...

  2. 浅谈JSONP (vue-jsonp组件 XXXtoken:报错处理)

    由于同源策略的存在,特别是前后端两个项目存在的情况下,客户端访问服务端必然存在跨域的情况,而使用jsonp,则不存在这个问题. 主要是因为jsonp是在页面中插入一段js代码,而请求返回的也是一段js ...

  3. WebForm 【简单控件】【表单元素】

    一.HTML 表单元素复习 (1)文本类 文本框:<input type="text" name="" id="" value=&qu ...

  4. JavaScriptDay2-简单网页表单验证

    Html部分 <!-- 注册表单 1-用户名 text 2-密码 password 3-确认密码 password 4-性别 radio 5-爱好 hobby 6-籍贯 select-optio ...

  5. js 下拉加载

    // 下拉加载    var clientHeight = $(window).height() //当前可视的页面高度    console.log(clientHeight) //滚动条到页面底部 ...

  6. 5月23日——谈谈对BFC规范的理解

    一.什么是BFC? BFC(block  formatting context):简单来说它就是一种属性,这种属性会影响元素与元素之间的位置.间距 二.形成BFC的条件 1.float:给元素添加浮动 ...

  7. HTTPS的安全性

    一.Https介绍 1. 什么是Https HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道, ...

  8. bzoj1758Wc10重建计划——solution

    1758: [Wc2010]重建计划 Time Limit: 40 Sec  Memory Limit: 162 MBSubmit: 4707  Solved: 1200[Submit][Status ...

  9. Java 社区平台 - Sym 1.7.0 发布

    English | 中文 简介 Symphony([ˈsɪmfəni],n.交响乐)是一个现代化的社区平台,因为它: 实现了面向内容讨论的论坛 包含了面向用户分享.交友.游戏的社交网络 集成了聚合独立 ...

  10. SublimeText3常用插件及快捷键总结

    SublimeText可谓是前端工程师的代码编辑神器,自从用上它以后一直爱不释手,特别是它强大的插件功能,简直要逆天了.网上也有很多关于SublimeText3的各种插件介绍,其插件功能之多,让人眼花 ...