2017-6-29 NOIP模拟赛

Problem 1 机器人(robot.cpp/c/pas)

【题目描述】

早苗入手了最新的Gundam模型。最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧。

早苗的新模型可以按照输入的命令进行移动,命令包括‘E’、‘S’、‘W’、‘N’四种,分别对应东南西北。执行某个命令时,它会向对应方向移动一个单位。作为新型机器人,它可以执行命令串。对于输入的命令串,每一秒它会按命令行动一次。执行完命令串的最后一个命令后,会自动从头开始循环。在0时刻时机器人位于(0,0)。求T秒后机器人所在位置坐标。

【输入格式】

第1行:一个字符串,表示早苗输入的命令串,保证至少有1个命令

第2行:一个正整数T

【输出格式】

2个整数,表示T秒时,机器人的坐标。

【样例输入】

NSWWNSNEEWN

12

【样例输出】

-1 3

【数据范围】

对于60%的数据 T<=500,000 且命令串长度<=5,000

对于100%的数据 T<=2,000,000,000 且命令串长度<=5,000

【注意】

向东移动,坐标改变改变为(X+1,Y);

向南移动,坐标改变改变为(X,Y-1);

向西移动,坐标改变改变为(X-1,Y);

向北移动,坐标改变改变为(X,Y+1);

水过。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
inline void read(long long &x){x = ;char ch = getchar();char c = ch;while(ch > '' || ch < '')c = ch, ch = getchar();while(ch >= '' && ch <= '')x = x * + ch - '', ch = getchar();}
inline int max(int a, int b){return a > b ? a : b;}
inline int min(int a, int b){return a < b ? a : b;}
inline void swap(int &a, int &b){int tmp = a;a = b;b = tmp;} const int INF = 0x3f3f3f3f;
const int MAXN = + ; char s[MAXN];
long long t;
long long len, xx, yy;
long long x,y; int main()
{
scanf("%s", s + );
read(t);
len = strlen(s + );
if(t < len)
{
for(register int i = ;i <= t;++ i)
{
if(s[i] == 'E')++ xx;
else if(s[i] == 'S')--yy;
else if(s[i] == 'W')--xx;
else ++yy;
}
x = xx;
y = yy;
}
else
{
for(register int i = ;i <= len;++ i)
{
if(s[i] == 'E')++ xx;
else if(s[i] == 'S')--yy;
else if(s[i] == 'W')--xx;
else ++yy;
}
int group = t / len;
x = xx * group;
y = yy * group;
group = t % len;
for(register int i = ;i <= group;i ++)
{
if(s[i] == 'E')++ x;
else if(s[i] == 'S')--y;
else if(s[i] == 'W')--x;
else ++y;
}
}
printf("%lld %lld", x, y);
return ;
}

Problem 2 数列(seq.cpp/c/pas)

【题目描述】

a[1]=a[2]=a[3]=1

a[x]=a[x-3]+a[x-1]  (x>3)

求a数列的第n项对1000000007(10^9+7)取余的值。

【输入格式】

第一行一个整数T,表示询问个数。

以下T行,每行一个正整数n。

【输出格式】

每行输出一个非负整数表示答案。

【样例输入】

3

6

8

10

【样例输出】

4

9

19

【数据范围】

对于30%的数据 n<=100;

对于60%的数据 n<=2*10^7;

对于100%的数据 T<=100,n<=2*10^9;

矩阵快速幂。

构造矩阵:

1 1 0 0

0 1 0 1

0 1 0 0

0 0 1 0

an

a(n - 2)

a(n - 3)

a(n - 4)

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
inline void read(long long &x){x = ;char ch = getchar();char c = ch;while(ch > '' || ch < '')c = ch, ch = getchar();while(ch >= '' && ch <= '')x = x * + ch - '', ch = getchar();}
inline int max(int a, int b){return a > b ? a : b;}
inline int min(int a, int b){return a < b ? a : b;}
inline void swap(int &a, int &b){int tmp = a;a = b;b = tmp;} const int INF = 0x3f3f3f3f;
const int MOD = ; long long s1[][];
long long s2[];
long long ans[][];
long long base[][];
long long tmp[][]; long long pow(int b)
{
for(int i = ;i <= ;i ++)
{
ans[i][i] = ;
for(int j = ;j <= ;j ++)
{
base[i][j] = s1[i][j] % MOD;
}
}
while(b)
{ if(b & )
{
for(int i = ;i <= ;++ i)
{
for(int j = ;j <= ;++ j)
{
tmp[i][j] = ans[i][j] % MOD;
}
}
// ans *= base;
memset(ans, , sizeof(ans));
for(int k = ;k <= ;++ k)
{
for(int i = ;i <= ; ++ i)
{
for(int j = ;j <= ;++ j)
{
ans[i][j] += ((tmp[i][k] % MOD) * (base[k][j] % MOD)) % MOD;
}
}
}
} for(int i = ;i <= ;i ++)
{
for(int j = ;j <= ;j ++)
{
tmp[i][j] = base[i][j] % MOD;
}
}
memset(base, , sizeof(base));
for(int k = ;k <= ;++ k)
{
for(int i = ;i <= ; ++ i)
{
for(int j = ;j <= ;++ j)
{
base[i][j] += ((tmp[i][k] % MOD) * (tmp[k][j] % MOD)) % MOD;
}
}
}
//base = base * base;
b >>= ;
}
return ((((ans[][]%MOD) * (s2[]%MOD) % MOD) + ((ans[][]%MOD) * (s2[]%MOD) % MOD))%MOD + (((ans[][]%MOD) *(s2[]%MOD)) % MOD + ((ans[][]%MOD) * (s2[]%MOD)) % MOD)%MOD) % MOD;
} long long n,t; int main()
{
read(t);
while(t)
{
memset(base, , sizeof(base));
memset(tmp, , sizeof(tmp));
memset(ans, , sizeof(ans));
read(n);
if(n == || n == || n == )
{
printf("1\n");
-- t;
continue;
}
else if(n == )
{
printf("2\n");
-- t;
continue;
}
else if(n == )
{
printf("3\n");
-- t;
continue;
}
s1[][] = ;s1[][] = ;s1[][] = ;s1[][] = ;
s1[][] = ;s1[][] = ;s1[][] = ;s1[][] = ;
s1[][] = ;s1[][] = ;s1[][] = ;s1[][] = ;
s1[][] = ;s1[][] = ;s1[][] = ;s1[][] = ;
s2[] = ;s2[] = ;s2[] = ;s2[] = ;
long long a = pow(n - );
printf("%lld\n", a % MOD);
-- t;
}
return ;
}

Problem 3 虫洞(holes.cpp/c/pas)

【题目描述】

N个虫洞,M条单向跃迁路径。从一个虫洞沿跃迁路径到另一个虫洞需要消耗一定量的燃料和1单位时间。虫洞有白洞和黑洞之分。设一条跃迁路径两端的虫洞质量差为delta。

1.从白洞跃迁到黑洞,消耗的燃料值减少delta,若该条路径消耗的燃料值变为负数的话,取为0。

2.从黑洞跃迁到白洞,消耗的燃料值增加delta。

3.路径两端均为黑洞或白洞,消耗的燃料值不变化。

作为压轴题,自然不会是如此简单的最短路问题,所以每过1单位时间黑洞变为白洞,白洞变为黑洞。在飞行过程中,可以选择在一个虫洞停留1个单位时间,如果当前为白洞,则不消耗燃料,否则消耗s[i]的燃料。现在请你求出从虫洞1到N最少的燃料消耗,保证一定存在1到N的路线。

【输入格式】

第1行:2个正整数N,M

第2行:N个整数,第i个为0表示虫洞i开始时为白洞,1表示黑洞。

第3行:N个整数,第i个数表示虫洞i的质量w[i]。

第4行:N个整数,第i个数表示在虫洞i停留消耗的燃料s[i]。

第5..M+4行:每行3个整数,u,v,k,表示在没有影响的情况下,从虫洞u到虫洞v需要消耗燃料k。

【输出格式】

一个整数,表示最少的燃料消耗。

【样例输入】

4 5

1 0 1 0

10 10 100 10

5 20 15 10

1 2 30

2 3 40

1 3 20

1 4 200

3 4 200

【样例输出】

130

【数据范围】

对于30%的数据: 1<=N<=100,1<=M<=500

对于60%的数据: 1<=N<=1000,1<=M<=5000

对于100%的数据: 1<=N<=5000,1<=M<=30000

其中20%的数据为1<=N<=3000的链

1<=u,v<=N, 1<=k,w[i],s[i]<=200

【样例说明】

按照1->3->4的路线。

不难发现,无论时间怎样变化,两个点的相对颜色总是不变(即总是同色或异色)

把一个点拆成两个点,分别代表白、黑,记为i,i'

每一s黑白互换,因此当i->j,权值为w时,我们令i->j',权值为w

又由于我们可以在某一个点上停留一个单位时间,从而使得点黑白互换,因此应让i->i'和i'->i连边即可。而又由于任何节点相对颜色不变,我们可以知道走这条边到达i'(i)后仍是合法的。

这样建图跑SPFA即可

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
inline void read(int &x){x = ;char ch = getchar();char c = ch;while(ch > '' || ch < '')c = ch, ch = getchar();while(ch >= '' && ch <= '')x = x * + ch - '', ch = getchar();}
inline int max(int a, int b){return a > b ? a : b;}
inline int min(int a, int b){return a < b ? a : b;}
inline void swap(int &a, int &b){int tmp = a;a = b;b = tmp;} const int INF = 0x3f3f3f3f;
const int MAXN = ;
const int MAXM = ; int n,m;
int bw[MAXN << ],weight[MAXN],s[MAXN];
int tmp1, tmp2, tmp3; struct Edge
{
int u,v,next,w;
}edge[MAXM];
int head[MAXN << ],cnt;
void insert(int a, int b, int c){edge[++cnt] = Edge{a, b, head[a], c};head[a] = cnt;} std::queue<int> q;
int b[MAXN << ],d[MAXN]; void SPFA()
{
memset(d, 0x3f, sizeof(d));
q.push();d[] = ;
b[] = true;
register int u,v;
while (!q.empty())
{
u = q.front();
q.pop();
b[u] = false;
for (int pos = head[u];pos;pos = edge[pos].next)
{
v = edge[pos].v;
if (d[v] > d[u] + edge[pos].w)
{
d[v] = d[u] + edge[pos].w;
if (!b[v])
{
b[v] = true;
q.push(v);
}
}
}
}
} int main()
{
read(n);read(m); for (register int i = ;i <= n;++ i)
{
read(bw[i << ]);
bw[i << | ] = ^ bw[i << ];
} for (register int i = ;i <= n;++ i)
{
read(weight[i]);
} for (register int i = ;i <= n;++ i)
{
read(s[i]);
int w = s[i];
if (!bw[i << ])
insert(i << , i << | , ),insert(i << | , i << , s[i]);
else
insert(i << , i << | , s[i]),insert(i << | , i << , );
} for (register int i = ;i <= m;++ i)
{
read(tmp1);read(tmp2);read(tmp3);
int w1 = ,w2 = ; //0 白 1 黑 //相同 不变化 if (bw[tmp1 << ] == bw[tmp2 << ])
w1 = w2 = tmp3; //0 -> 1 减小weight差 ,负数记为0 if (bw[tmp1 << ] == && bw[tmp2 << ] == )
w1 = tmp3 - abs(weight[tmp1] - weight[tmp2]);
if (bw[tmp1 << | ] == && bw[tmp2 << | ] == )
w2 = tmp3 - abs(weight[tmp1] - weight[tmp2]); //1 -> 0 增加weight差 if (bw[tmp1 << ] == && bw[tmp2 << ] == )
w1 = tmp3 + abs(weight[tmp1] - weight[tmp2]);
if (bw[tmp1 << | ] == && bw[tmp2 << | ] == )
w2 = tmp3 + abs(weight[tmp1] - weight[tmp2]); if (w1 < )
w1 = ;
if (w2 < )
w2 = ; insert(tmp1 << , tmp2 << | , w1);
insert(tmp1 << | , tmp2 << , w2);
} SPFA(); printf("%d", min(d[n << ], d[n << | ]));
return ;
}

第一次AK,开森~

题怪简单

NOIP模拟赛 6.29的更多相关文章

  1. Nescafe #29 NOIP模拟赛

    Nescafe #29 NOIP模拟赛 不知道这种题发出来算不算侵权...毕竟有的题在$bz$上是权限题,但是在$vijos$似乎又有原题...如果这算是侵权的话请联系我,我会尽快删除,谢谢~ 今天开 ...

  2. NOIP模拟赛20161022

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

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

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

  4. NOIP模拟赛 by hzwer

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

  5. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  6. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  7. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  8. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  9. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

随机推荐

  1. 【solr】Solr与JDK对应版本关系,Tomcat与JDK

    Solr与JDK对应版本关系,Tomcat与JDK版本对应关系 最新在部署solrCloud集群,由于自己机器上用的JDK都是JDK1.7的,然后我就从网上下载了最新下载了最先的solr6.6.0和最 ...

  2. OpenCASCADE 7.4.0 Released

    Open Cascade is pleased to announce a new public release of Open CASCADE Technology (version 7.4.0). ...

  3. 《DSP using MATLAB》Problem 8.28

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  4. vue swiper点击后返回不能自动播放

    解决方法: 在返回时重新开启轮播 组件中: <swiper :options="swiperOption" ref="mySwiper" :class=& ...

  5. Luogu P2149 [SDOI2009]Elaxia的路线(最短路+记忆化搜索)

    P2149 [SDOI2009]Elaxia的路线 题意 题目描述 最近,\(Elaxia\)和\(w**\)的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们必须合理地安排两个人在一起的 ...

  6. c语言一个例子对比php学习随记

    今天开始学写一些简单的C例子,发现很多和PHP不一样的地方,做个笔记. #include <stdio.h> int main(void) { int a,b; printf(" ...

  7. 转载 ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据

    ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据   最近碰巧发现一款比较好的Web即时通讯前端组件,layim,百度关键字即可,我下面要做的就是基于这个前 ...

  8. struts2-自定义拦截器-struts2标签

    1 自定义拦截器 1.1 架构 1.2 拦截器创建 创建方式1 创建方式2 创建方式3 ★★★★ 1.3 拦截器api 放行 前后处理 不放行,直接跳转到一个结果页面 不执行后续的拦截器以及Actio ...

  9. php匿名函数与闭包函数

    匿名函数:没有名字的函数:并没有牵扯到应用其他函数的变量问题.仅仅是没有名字 $f=function($param){} 闭包:A函数中嵌套着B函数,B程序中有用到A的变量,当外部函数C调用函数A时, ...

  10. Docker(六)安装Red5进行rtmp推流

    1.pull镜像 docker pull mondain/red5 2.启动原版red5 docker run --name red5 -d -p 5080:5080 -p 1935:1935 mon ...