9.16noip模拟试题
题目描述
在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女。某一天,早苗终于入手了最新款的钢达姆模型。作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧(好吧,我自重)。早苗的新模型可以按照输入的命令进行移动,命令包含’E’、’S’、’W’、’N’四种,分别对应四个不同的方向,依次为东、南、西、北。执行某个命令时,它会向着对应方向移动一个单位。作为新型机器人,自然不会只单单执行一个命令,它可以执行命令串。对于输入的命令串,每一秒它会按照命令行动一次。而执行完命令串最后一个命令后,会自动从头开始循环。在0时刻时早苗将钢达姆放置在了(0,0)的位置,并且输入了命令串。她想要知道T秒后钢达姆所在的位置坐标。
向东移动,坐标改变改变为(X+1,Y);
向南移动,坐标改变改变为(X,Y-1);
向西移动,坐标改变改变为(X-1,Y);
向北移动,坐标改变改变为(X,Y+1);
输入输出格式
输入格式:
第1行:一个字符串,表示早苗输入的命令串,保证至少有1个命令
第2行:一个正整数T
输出格式:
第1行:两个整数,表示T秒时,钢达姆的坐标
输入输出样例
NSWWNSNEEWN
12
-1 3
说明
对于60%的数据:T <= 500,000且命令串长度 <= 5,000
对于100%的数据:T <= 2,000,000,000且命令串长度<= 5,000
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 10010
using namespace std;
int n,x,y;
char s[maxn];
int main()
{
freopen("robot.in","r",stdin);
freopen("robot.out","w",stdout);
scanf("%s%d",s,&n);
int len=strlen(s);
for(int i=;i<len;i++){
if(s[i]=='E')x++;
if(s[i]=='S')y--;
if(s[i]=='W')x--;
if(s[i]=='N')y++;
}
int c=n/len;
x*=c;y*=c;
c=n%len;
for(int i=;i<c;i++){
if(s[i]=='E')x++;
if(s[i]=='S')y--;
if(s[i]=='W')x--;
if(s[i]=='N')y++;
}
printf("%d %d\n",x,y);
return ;
}
题目描述
在幻想乡,西行寺幽幽子是以贪吃闻名的亡灵。不过幽幽子可不是只会吃,至少她还管理着亡灵界。话说在幽幽子居住的白玉楼有一颗常年不开花的樱树——西行妖。幽幽子决定去收集人间的春度,聚集起来让西行妖开花。很快,作为幽幽子家园艺师的魂魄妖梦收集到了M个单位的春度。并且在这段时间里,幽幽子计算出要让西行妖开出一朵花需要N个单位的春度。现在幽幽子想要知道,使用所有的春度,能够让西行妖开出多少朵花。
输入输出格式
输入格式:
输入格式 第1行:一个正整数M
第2行:一个正整数N
N,M的位数不超过L,L的范围在题目后面给出
输出格式:
1行:一个整数ans,表示能开出花的朵数
输入输出样例
73861758
12471
5922
说明
对于60%的数据:L <= 2,000且ans <= 2,000
对于100%的数据:L <= 20,000且ans <= 2,000,000,000
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 21010
#define ll long long
using namespace std;
ll l,r,ans,a[maxn],b[maxn];
char s1[maxn],s2[maxn];
bool Judge(ll x){
ll c[maxn];memset(c,,sizeof(c));
c[]=b[];
for(int i=;i<=c[];i++)
c[i]=b[i]*x;
for(int i=;i<=c[];i++)
if(c[i]>){
c[i+]+=c[i]/;
c[i]%=;
}
while(c[c[]+]){
c[]++;
c[c[]+]+=c[c[]]/;
c[c[]]%=;
}
if(a[]>c[])return ;
if(a[]<c[])return ;
for(int i=c[];i>=;i--){
if(a[i]>c[i])return ;
if(a[i]<c[i])return ;
}
return ;
}
int main()
{
freopen("spring.in","r",stdin);
freopen("spring.out","w",stdout);
scanf("%s%s",s1,s2);
int l1=strlen(s1);
int l2=strlen(s2);
for(int i=;i<=l1;i++)
a[i]=s1[l1-i]-'';
for(int i=;i<=l2;i++)
b[i]=s2[l2-i]-'';
a[]=l1;b[]=l2;
l=;r=;
while(l<=r){
ll mid=(l+r)/;
if(Judge(mid)){
ans=mid;l=mid+;
}
else r=mid-;
}
cout<<ans;
return ;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 20010
using namespace std;
int l1,l2,p,ans[maxn];
char s1[maxn],s2[maxn];
int main()
{
scanf("%s%s",s1,s2);
l1=strlen(s1);l2=strlen(s2);
while(l2<=l1){
while(strncmp(s1,s2,l2)>=){
for(int i=l2-;i>=;i--)
s1[i]=s1[i]-s2[i]+'';
for(int i=l2-;i>=;i--)
if(s1[i]<''){
s1[i-]--;s1[i]+=;
}
ans[p]++;
}
p++;l2++;
for(int i=l2-;i>=;i--)
s2[i]=s2[i-];
s2[]='';
}
int k=;
for(int i=;i<l1;i++)
if(ans[i]){
k=i;break;
}
for(int i=k;i<p;i++)
printf("%d",ans[i]);
return ;
}
题目描述
在幻想乡,琪露诺是以笨蛋闻名的冰之妖精。某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来。但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸。于是琪露诺决定到河岸去追青蛙。小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子。而且琪露诺按照一种特殊的方式进行移动,当她在格子i时,她只会移动到i+L到i+R中的一格。你问为什么她这么移动,这还不简单,因为她是笨蛋啊。每一个格子都有一个冰冻指数A[i],编号为0的格子冰冻指数为0。当琪露诺停留在那一格时就可以得到那一格的冰冻指数A[i]。琪露诺希望能够在到达对岸时,获取最大的冰冻指数,这样她才能狠狠地教训那只青蛙。但是由于她实在是太笨了,所以她决定拜托你帮它决定怎样前进。开始时,琪露诺在编号0的格子上,只要她下一步的位置编号大于N就算到达对岸。
输入输出格式
输入格式:
第1行:3个正整数N, L, R
第2行:N+1个整数,第i个数表示编号为i-1的格子的冰冻指数A[i-1]
输出格式:
一个整数,表示最大冰冻指数。保证不超过2^31-1
输入输出样例
5 2 3
0 12 3 11 7 -2
11
说明
对于60%的数据:N <= 10,000
对于100%的数据:N <= 200,000
对于所有数据 -1,000 <= A[i] <= 1,000且1 <= L <= R <= N
暴力60:
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 200010
using namespace std;
int n,l,r,v[maxn],f[maxn],ans,c[maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Dfs(int k){
if(k<=n)c[++c[]]=k;
if(k==)return;
for(int i=max(k-r,);i<=max(k-l,);i++){
if(f[i]+v[k]==f[k]){
Dfs(i);
break;
}
}
}
int main()
{
freopen("iceroad.in","r",stdin);
freopen("iceroad.out","w",stdout);
n=init();l=init();r=init();
for(int i=;i<=n;i++)
v[i]=init();
for(int i=;i<=n;i++)
for(int j=l;j<=r;j++)
f[i+j]=max(f[i+j],f[i]+v[i+j]);
int k=;
for(int i=n+;i<=n+r;i++)
if(f[i]>ans){
ans=f[i];k=i;
}
printf("%d\n",ans);
Dfs(k);
for(int i=c[];i>=;i--)
printf("%d ",c[i]);
printf("-1\n");
return ;
}
线段树:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 400010
#define lc k*2
#define rc k*2+1
#define mid (l+r)/2
using namespace std;
int n,l,r,v[maxn],f[maxn],ans,mxx[maxn*],c[maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Build(int k,int l,int r){
if(l!=r){
Build(lc,l,mid);
Build(rc,mid+,r);
mxx[k]=max(mxx[lc],mxx[rc]);
}
else mxx[k]=;
}
void Change(int k,int l,int r,int x,int y,int z){
if(x<=l&&y>=r){
mxx[k]=z;return;
}
if(x<=mid)Change(lc,l,mid,x,y,z);
if(y>mid)Change(rc,mid+,r,x,y,z);
mxx[k]=max(mxx[lc],mxx[rc]);
}
int Query(int k,int l,int r,int x,int y){
if(x<=l&&y>=r)return mxx[k];
int ret=;
if(x<=mid)ret=max(ret,Query(lc,l,mid,x,y));
if(y>mid)ret=max(ret,Query(rc,mid+,r,x,y));
return ret;
}
void Dfs(int k){
if(k<=n)c[++c[]]=k;
if(k==)return;
for(int i=max(k-r,);i<=max(k-l,);i++){
if(f[i]+v[k]==f[k]){
Dfs(i);
break;
}
}
}
int main()
{
freopen("iceroad9.in","r",stdin);
//freopen("iceroad.out","w",stdout);
n=init();l=init();r=init();
for(int i=;i<=n;i++)
v[i]=init();
Build(,,n+r);
for(int i=l;i<=n+r;i++){
int L=i-r,R=i-l;
L=max(L,);R=max(R,);
int mx=Query(,,n+r,L,R);
f[i]=max(f[i],mx+v[i]);
Change(,,n+r,i,i,f[i]);
}
int k=;
for(int i=n+;i<=n+r;i++)
if(f[i]>ans){
ans=f[i];k=i;
}
printf("%d\n",ans);
Dfs(k);
for(int i=c[];i>=;i--)
printf("%d ",c[i]);
printf("-1\n");
return ;
}
单调队列:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 400010
using namespace std;
int n,l,r,v[maxn],t[maxn],q[maxn],f[maxn],head=,tail,ans,c[maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Dfs(int k){
if(k<=n)c[++c[]]=k;
if(k==)return;
for(int i=max(k-r,);i<=max(k-l,);i++){
if(f[i]+v[k]==f[k]){
Dfs(i);
break;
}
}
}
int main()
{
freopen("iceroad.in","r",stdin);
freopen("iceroad.out","w",stdout);
n=init();l=init();r=init();
for(int i=;i<=n;i++)
v[i]=init();
for(int i=l;i<=n+r;i++){
f[i]=q[head]+v[i];
while(head<=tail&&f[i-l+]>q[tail])tail--;
q[++tail]=f[i-l+];t[tail]=i;
if(t[head]<i-r+)head++;
}
int k=;
for(int i=n+;i<=n+r;i++)
if(f[i]>ans){
ans=f[i];k=i;
}
printf("%d\n",ans);
Dfs(k);
for(int i=c[];i>=;i--)
printf("%d ",c[i]);
printf("-1\n");
return ;
}
题目描述
在幻想乡,上白泽慧音是以知识渊博闻名的老师。春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄。因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点。人间之里由N个村庄(编号为1..N)和M条道路组成,道路分为两种一种为单向通行的,一种为双向通行的,分别用1和2来标记。如果存在由村庄A到达村庄B的通路,那么我们认为可以从村庄A到达村庄B,记为(A,B)。当(A,B)和(B,A)同时满足时,我们认为A,B是绝对连通的,记为<A,B>。绝对连通区域是指一个村庄的集合,在这个集合中任意两个村庄X,Y都满足<X,Y>。现在你的任务是,找出最大的绝对连通区域,并将这个绝对连通区域的村庄按编号依次输出。若存在两个最大的,输出字典序最小的,比如当存在1,3,4和2,5,6这两个最大连通区域时,输出的是1,3,4。
输入输出格式
输入格式:
第1行:两个正整数N,M
第2..M+1行:每行三个正整数a,b,t, t = 1表示存在从村庄a到b的单向道路,t = 2表示村庄a,b之间存在双向通行的道路。保证每条道路只出现一次。
输出格式:
第1行: 1个整数,表示最大的绝对连通区域包含的村庄个数。
第2行:若干个整数,依次输出最大的绝对连通区域所包含的村庄编号。
输入输出样例
5 5
1 2 1
1 3 2
2 4 2
5 1 2
3 5 1
3
1 3 5
说明
对于60%的数据:N <= 200且M <= 10,000
对于100%的数据:N <= 5,000且M <= 50,000
Tarjan:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#include<vector>
#include<algorithm>
#define maxn 50010
using namespace std;
int n,m,head[maxn],num,dfn[maxn],low[maxn],f[maxn],topt,sum,ans[maxn];
struct node{
int v,pre;
}e[maxn*];
stack<int>s;
vector<int>G[maxn/];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Add(int from,int to){
num++;e[num].v=to;
e[num].pre=head[from];
head[from]=num;
}
void Dfs(int u){
dfn[u]=low[u]=++topt;
f[u]=;s.push(u);
for(int i=head[u];i;i=e[i].pre){
int v=e[i].v;
if(dfn[v]==){
Dfs(v);low[u]=min(low[u],low[v]);
}
else if(f[v])low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
sum++;
while(u!=s.top()){
f[s.top()]=;G[sum].push_back(s.top());s.pop();
}
f[s.top()]=;G[sum].push_back(s.top());s.pop();
}
}
int main()
{
freopen("classroom.in","r",stdin);
freopen("classroom.out","w",stdout);
n=init();m=init();
int u,v,t;
for(int i=;i<=m;i++){
u=init();v=init();t=init();
Add(u,v);
if(t==)Add(v,u);
}
for(int i=;i<=n;i++)
if(dfn[i]==)Dfs(i);
int mxx=;
for(int i=;i<=sum;i++){
sort(G[i].begin(),G[i].end());
if(mxx<G[i].size())mxx=G[i].size();
}
printf("%d\n",mxx);
memset(ans,,sizeof(ans));
for(int i=;i<=sum;i++)
if(mxx==G[i].size()){
int falg=;
for(int j=;j<mxx;j++){
if(G[i][j]<ans[j]){falg=;break;}
if(G[i][j]>ans[j])break;
}
if(falg)for(int j=;j<mxx;j++)
ans[j]=G[i][j];
}
for(int i=;i<mxx;i++)
printf("%d ",ans[i]);
return ;
}
conclusion
今天题太简单了 准备好AK的
但是吧 数组开小了 这尼玛很打脸
T1模拟
T2高精除 然而高精除高精并不自信 间接写了二分+乘
T3线段树优化dp 数组开小 QAQ
T4 Tarjab模板 数组数组数组数组!!!! 还有就是T3也可以单调队列优化
考试的时候也想来 也想过优先队列
但是脑抽全都否了....
最后选了常数大的线段树
我是zhizhangQAQ
9.16noip模拟试题的更多相关文章
- 模拟试题C
模拟试题C 一.单项选择题(2′*14 =28′) 1.双线性法向插值法(Phong Shading)的优点是( ) A)法向计算精确 B)高光域准确 C)对光源和视点没有限制 D)速度较快 2.用编 ...
- 模拟试题B
模拟试题B 一.单项选择题(2′*8 =16′) 1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( ) A)512KB B)1MB C)2MB D)3MB 2.在多 ...
- 模拟试题A
模拟试题A 一.单项选择题(2′*12=24′) 1.下面各种坐标变换中,会产生变换前后维度的改变的是( ) A)建模变换 B)观察变换 C)投影变换 D)视口变换 2.下列描述深度缓冲消隐算法的特点 ...
- CCF 模拟试题——出现次数最多的数 官方答案解析及自己写的正确答案
前几天知道的CCF计算机职业资格认证考试,觉得好像比软考含金量高一些,就去了解了一下,做了模拟试题中的 “出现次数最多的数” 这道题,我的算法和官方答案算法不同,个人觉得觉得官方的好一点,没那么繁琐, ...
- 11.9 noip模拟试题
NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, 而 ...
- 10.26 noip模拟试题
enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...
- 9.29noip模拟试题
环上的游戏(cycle) 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这 ...
- 9.20 noip模拟试题
Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我 ...
- 9.6noip模拟试题
题目名称 盘子序列 四轮车 点名 提交文件 disk.pas/c/cpp car.pas/c/cpp rollcall.pas/c/cpp 输入文件 disk.in car.in rollcall.i ...
随机推荐
- [r]Setting up Django and your web server with uWSGI and nginx
Setting up Django and your web server with uWSGI and nginx This tutorial is aimed at the Django user ...
- [BZOJ 1188] [HNOI2007] 分裂游戏 【博弈论|SG函数】
题目链接:BZOJ - 1188 题目分析 我们把每一颗石子看做一个单个的游戏,它的 SG 值取决于它的位置. 对于一颗在 i 位置的石子,根据游戏规则,它的后继状态就是枚举符合条件的 j, k.然后 ...
- Hibernate如何一个类映射两个表
一个User类有username,password属性,还有 otherInformation等其他属性,username和password映射到一个表,otherInformation等其他属性映射 ...
- Strust2的json插件
以下这段摘自网上: Json是一种轻量级的数据交换格式,JSon插件提供了一种名为json的ActionResultType .一旦为Action指定了该结果处理类型,JSON插件就会自动将Actio ...
- PL/SQL developer export/import (转)
export/import图标为灰色:原因:相关应用程序没有关联菜单栏 --> Tools --> Import Tables... --> Oracle Import Export ...
- 中国linux论坛
linux在国内经过十多年的发展,已慢慢走向成熟.昔日如雨后春笋般成长的linux网站,现在已出现了明显的两极分化.一部分已成长壮大,公司化运作,一部分面临域名出售或关闭的境地. 以笔者经验,以下十 ...
- bzoj2424
比较简单的费用流,一目了然 ; type node=record next,point,flow,cost:longint; end; ..] of node; q:..] of longint; p ...
- COJ 2135 Day10-例1
Day10-例1 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 给定N个物品,价格分别为A1, A2…AN.设计一套面值互不 ...
- C#导出数据的EXCEL模板设计
一:将如下图中,查询出来的数据导出到EXCEL中 二:Excel的状态 三:设计的背后工作 四:最后一步,隐藏
- Android Service命令
service可给Android 服务传消息,具体用法如下: Usage: service [-h|-?] service list service check SERVI ...