9.30 noip模拟试题
时限均为1s,内存 256MB
1、某种密码(password.*)
关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY。若KEY=∑▒〖Ai*Bi〗,则密文就是原文的一组合法密码。
现在有原文和钥匙码,请编一个程序来帮助他统计到底有多少个符合条件的密文。
【输入数据】
第一行两个数N,KEY,意义同题目描述;
第二行N个数表示原文A,意义同题目描述。
【输出数据】
一个数ANS,表示对于原文A和KEY,有多少组可行的密文B。
【输入样例】
3 2
1 1 2
【输出样例】
2
【样例说明】
密文110,1*1+1*1+0*2=2
密文001,0*1+0*1+1*2=2
一共两组可行的密文。
【数据约定】
60%数据满足N<=25
100%数据满足N<=40,-maxlongint<=∑▒Ai<=maxlongint
暴力+hash
/*蒟蒻用map*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#define ll long long
using namespace std;
long long n,k,N,a[],falg,ans;
map<long long,long long>p;
void Dfs(long long now,long long s){
if(now==N+){
if(!falg)p[s]++;
else ans+=p[k-s];
return;
}
Dfs(now+,s);
Dfs(now+,s+a[now]);
}
int main()
{
freopen("password.in","r",stdin);
freopen("password.out","w",stdout);
cin>>n>>k;
for(long long i=;i<=n;i++)cin>>a[i];
N=n/;Dfs(,);
falg=;N=n;Dfs(n/+,);
cout<<ans;
return ;
}
2、球的序列(formation.*)
N个编号为1-n的球,每个球都有唯一的编号。这些球被排成两种序列,分别为A、B序列,现在需要重新寻找一个球的序列l,对于这个子序列l中任意的两个球,要求j,k(j<k),都要求满足lj在A中位置比lk在A中位置靠前,却lj在B中位置比lk在B中位置靠前,请你计算这个子序列l的最大长度。
输入:
第一行一个整数,表示N。
第二行N个整数,表示A序列。
第三行N个整数,表示B序列。
样例输入
5
1 2 4 3 5
5 2 3 4 1
//5 2 4 3 1
样例输出
2
样例说明
L可以是{2,3},也可以是{2,4}
数据范围:
40% N<=5000
100% N<=50000
暴力LCS 40
#include<cstdio>
#define maxn 10010
using namespace std;
int n,a[maxn],b[maxn];
short f[maxn][maxn];
int init(){
int x=;char s=getchar();
while(s<''||s>'')s=getchar();
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x;
}
short max(short x,short y){
return x>y?x:y;
}
int main()
{
freopen("formation.in","r",stdin);
freopen("formation.out","w",stdout);
n=init();
for(int i=;i<=n;i++)a[i]=init();
for(int i=;i<=n;i++)b[i]=init();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(a[i]==b[j])f[i][j]=f[i-][j-]+;
else f[i][j]=max(f[i-][j],f[i][j-]);
printf("%d\n",f[n][n]);
return ;
}
转化成LIS
/*并不难的题没好好想想~~*/
#include<cstdio>
#include<algorithm>
#define maxn 50010
using namespace std;
int n,a[maxn],b[maxn],c[maxn],r;
int init(){
int x=;char s=getchar();
while(s<''||s>'')s=getchar();
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x;
}
int max(int x,int y){
return x>y?x:y;
}
void LIS(){
for(int i=;i<=n;i++){
int x=b[i];
if(x>c[r]){
c[++r]=x;
continue;
}
int p=lower_bound(c+,c++r,x)-c;
c[p]=x;
}
}
int main()
{
//freopen("formation.in","r",stdin);
//freopen("formation.out","w",stdout);
n=init();int x;
for(int i=;i<=n;i++){
x=init();a[x]=i;
}
for(int i=;i<=n;i++){
x=init();b[i]=a[x];
}
LIS();
printf("%d\n",r);
return ;
}
3、大逃亡(escape.*)
给出数字N(1<=N<=10000),X(1<=x<=1000),Y(1<=Y<=1000),代表有N个敌人分布一个X行Y列的矩阵上,矩形的行号从0到X-1,列号从0到Y-1再给出四个数字x1,y1,x2,y2,代表你要从点(x1,y1)移到(x2,y2)。在移动的过程中你当然希望离敌人的距离的最小值最大化,现在请求出这个值最大可以为多少,以及在这个前提下,你最少要走多少步才可以回到目标点。注意这里距离的定义为两点的曼哈顿距离,即某两个点的坐标分为(a,b),(c,d),那么它们的距离为|a-c|+|b-d|。
输入:
第一行给出数字N,X,Y
第二行给出x1,y1,x2,y2
下面将有N行,给出N个敌人所在的坐标
输出:
在一行内输出你离敌人的距离及在这个距离的限制下,你回到目标点最少要移动多少步。
Sample input
2 5 6
0 0 4 0
2 1
2 3
Sample output
2 14
/*本来能A的 但写wa了 这种题又没法拍 哎QAQ*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 1010
using namespace std;
int n,m,k,f[maxn][maxn],dis[maxn][maxn];
int x1,x2,y1,y2,ans,step;
struct node{
int x,y,s;
};
int xx[]={,,,-};
int yy[]={,-,,};
queue<node>q;
void Bfs(){
while(!q.empty()){
node t=q.front();q.pop();
dis[t.x][t.y]=t.s;
for(int i=;i<;i++){
int nx=t.x+xx[i];
int ny=t.y+yy[i];
if(nx>&&nx<=n&&ny>&&ny<=m&&f[nx][ny]==){
f[nx][ny]=;dis[nx][ny]=t.s+;
q.push((node){nx,ny,t.s+});
}
}
}
}
int Judge(int S){
if(dis[x1][y1]<S)return -;//这里没考虑到
memset(f,,sizeof(f));
f[x1][y1]=;
while(!q.empty())q.pop();
q.push((node){x1,y1,});
while(!q.empty()){
node t=q.front();q.pop();
if(t.x==x2&&t.y==y2)
return t.s;//开始wa的时候是返回01 并且直接改
for(int i=;i<;i++){
int nx=t.x+xx[i];
int ny=t.y+yy[i];
if(nx>&&nx<=n&&ny>&&ny<=m&&f[nx][ny]==&&dis[nx][ny]>=S){
f[nx][ny]=;
q.push((node){nx,ny,t.s+});
}
}
}
return -;
}
int main()
{
freopen("escape.in","r",stdin);
freopen("escape.out","w",stdout);
scanf("%d%d%d",&k,&n,&m);
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1++;x2++;y1++;y2++;
int x,y;
memset(dis,/,sizeof(dis));
for(int i=;i<=k;i++){
scanf("%d%d",&x,&y);
x++;y++;
q.push((node){x,y,});
f[x][y]=;dis[x][y]=;
}
Bfs();
for(int i=;i<=n;i++){
for(int j=;j<=m;j++)
printf("%d ",dis[i][j]);
printf("\n");
}
int l=,r=maxn*maxn;
while(l<=r){
int mid=(l+r)/;
int tmp=Judge(mid);
if(tmp!=-){
l=mid+;ans=mid;
step=tmp;
}
else r=mid-;
}
printf("%d %d\n",ans,step);
return ;
}
9.30 noip模拟试题的更多相关文章
- 11.14 noip模拟试题
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer ...
- 11.9 noip模拟试题
NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, 而 ...
- 9.23 noip模拟试题
Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N ...
- 9.20 noip模拟试题
Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我 ...
- 2016.10.30 NOIP模拟赛 day2 PM 整理
满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...
- 2016.10.30 NOIP模拟赛 day2 AM 整理
题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分 2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...
- 【数论+技巧】神奇的Noip模拟试题第二试 T1 素数统计
1. 素数统计 (pcount.pas/.c/.cpp) [问题描述] 小tan的老师揣谙戈给同学们布置了一道题,要求统计给定区间内素数的个数.“这不是很简单吗?”小tan忍不住说.揣谙戈冷 ...
- 神奇的Noip模拟试题第一试 合理种植 枚举+技巧
1.合理种植 (plant.pas/.c/.cpp) [问题描述] 大COS在氯铯石料场干了半年,受尽了劳苦,终于决定辞职.他来到表弟小cos的寒树中学,找到方克顺校长,希望寻个活干. 于是他如愿以偿 ...
- 11.13 noip模拟试题
题目名称 笔记 括号 城堡可执行文件名 note brackets castle输入文件名 note.in brackets.in castle.in输出文件名 note.in brackets.ou ...
随机推荐
- Web Scale IT 与 6 种 DevOps 工具
新年伊始,在总结过去一年 IT 行业变化和发展的同时,不少企业更关注未来一年甚至几年的行业趋势.Gartner 于 2014 年发表了文章 Gartner Says By 2017 Web-Scale ...
- linux下常用网络操作汇总
首先说明下RHEL6下设置IP地址的确和RHEL5下有几点是不同的. 我装完RHEL6中默认选择的是DHCP自动获取方式: [root@localhost ~]# vi /etc/sysconfig/ ...
- ping详解
Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”.不能打开网页时会说“你先ping网关地址192.168.1.1试试”. ...
- Node.js权威指南 (2) - Node.js中的交互式运行环境——REPL
2.1 REPL运行环境概述 / 102.2 在REPL运行环境中操作变量 / 102.3 在REPL运行环境中使用下划线字符 / 122.4 在REPL运行环境中直接运行函数 / 122.5 在RE ...
- C语言基础课程 第四课 它山之石可以攻玉---C语言数据类型和表达式
1 C语言中的数据类型 1.1 常量 常量就是在程序中不可变化的量 1.1.1 #define #define MAX 10 Define;//定义了一 ...
- 在.net MVC中异步上传图片或者文件
@using (Ajax.BeginForm("AddMessages", "MenuInfo", new AjaxOptions { HttpMethod ...
- TimePicker,TimePickerDialog以及自定义timepicker(一)
场景:在activity上点击,弹出一个dialog,然后点击dialog上的一个按钮,在弹出时间.以及自定义dialog 懒,要用到一个选择时间的需求,只要求小时和分钟,弹出式,第一时间想到了tim ...
- 工作总结之动画与VR
一.Unity5的动画新特性: 1.animator controller默认就包含Any State.Entry.Exit三个状态 2.animator可以给每个动画片段添加脚本,该脚本继承 Sta ...
- 三大跨平台网盘--google driver
背景介绍 Google Drive,美国谷歌公司于2012年4月24日正式推出的一项云存储服务,可以向用户提供5GB的免费存储空间,同时还可以付费扩容. 准备工作 google帐号--帐号注册 软件- ...
- 部署war包到Tomcat
1. 开发给到一个war包,假设叫 a-b-c.war. 2. 打开Tomcat安装路径 ,假设是“D:\Tomcat\apache-tomcat-7.0.68”,然后进入到 webapps文件夹. ...