Problem 1 双色球(ball.cpp/c/pas)

【题目描述】

机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233

“来来来,学弟,我考你道水题检验一下你的水平……”

一个栈内初始有n个红色和蓝色的小球,请你按照以下规则进行操作

  1. 只要栈顶的小球是红色的,将其取出,直到栈顶的球是蓝色
  2. 然后将栈顶的蓝球变成红色
  3. 最后放入若干个蓝球直到栈中的球数为n

以上3步骤为一次操作

如栈中都是红色球,则操作停止,请问几次操作后停止

chenzeyu97出完题发现他自己不能AC所以想请你帮忙

【输入格式】

第一行为一个整数n,表示栈的容量为n

第二行为一个字符串,第i个字符表示自顶向下的第i个球的颜色,R代表红色,B代表蓝色

【输出格式】

一个整数表示操作数

【样例输入】

样例1:

3

RBR

样例2:

4

RBBR

【样例输出】

样例1:2

样例2:6

【数据范围】

50%的数据,1<=n<=20

100%的数据,1<=n<=50

【题解】

定义cnt[i]表示连续i个蓝色球需要的移动次数,不难得到cnt[i] = 2cnt[i - 1] + 1

我用了大整数。。结果不需要。。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
const int INF = 0x3f3f3f3f;
const int MAXN = + ; 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();
if(c == '-')x = -x;
} struct Bignum
{
long long data[],len;
void add(long long x)
{
int tmp = ;
data[] += x;
while(data[tmp] >= )
{
data[tmp + ] += data[tmp] / ;
data[tmp] = data[tmp] % ;
tmp ++;
}
if(tmp > len) len = tmp;
}
void put()
{
for(int i = len;i >= ;-- i)
{
printf("%d", data[i]);
}
}
}; long long n;char s[MAXN];
long long blue[MAXN], top;
long long cnt[MAXN]; Bignum ans; int main()
{
cnt[] = ;
for(int i = ;i <= ;++ i)
cnt[i] = (cnt[i - ] << ) + ;
read(n);
register int i;
scanf("%s", s + );
for(i = ;i <= n;++ i)
if(s[i] == 'B')
blue[++top] = i;
memset(ans.data, , sizeof(ans.data));
ans.len = ;
while(top)
ans.add(cnt[blue[top] - ] + ), top --;
ans.put();
return ;
}

Problem 2 魔方(cube.cpp/c/pas)

【题目描述】

ccy(ndsf)觉得手动复原魔方太慢了,所以他要借助计算机。

ccy(ndsf)家的魔方都是3*3*3的三阶魔方,大家应该都见过。

(3的“顺时针”改为“逆时针”,即3 4以图为准。)
ccy(ndfs)从网上搜了一篇攻略,并找人翻译成了他自己会做的方法。现在告诉你他的魔方情况,以及他从网上搜到的攻略,请你求出最后魔方变成什么样子。

【输入格式】
   第一行,一串数字,表示从网上搜到的攻略。
   下面6*3行,每行3个数字,每三行表示魔方一个面的情况,六个面的顺序是前、后、左、右、上、下。

【输出格式】
   6*3行,表示处理后的魔方,形式同输入。

【样例输入】

23
121
221
111
123
321
111
123
321
132
132
231
132
121
112
233
332
111
333

【样例输出】

123
222
113
212
321
113
122
321
132
121
333
121
211
312
113
331
111
331

【数据范围】

40%的数据,攻略的长度小于5且仅有4种操作的其中一种

100%的数据,攻略的长度小于100

【题解】

题目样例数据均有误,只能按错的做了。暴力。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
const int INF = 0x3f3f3f3f;
const int MAXN = + ; 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();
if(c == '-')x = -x;
}
inline void swap(int &a, int &b){int tmp = a;a = b;b = tmp;} int q[MAXN],n;
int squ[][][];
int tmp[],tmp2[][]; inline void put()
{
for(int i = ;i <= ;++ i)
{
for(int j = ;j <= ;++ j)
{
for(int k = ;k <= ;++ k)
printf("%d", squ[i][j][k]);
putchar('\n');
}
}
} int main()
{
char c = getchar();
while(c > '' || c < '')c = getchar();
while(c <= '' && c >= '')q[++n] = c - '',c = getchar();
for(int i = ;i <= ;++ i)
{
for(int j = ;j <= ;++ j)
{
while(c > '' || c < '')c = getchar();
for(int k = ;k <= ;++ k)
{
squ[i][j][k] = c - '';
c = getchar();
}
}
}
for(int k = ;k <= n;++ k)
{
if(q[k] == )
{
//5上最右->2后最右
//1前最右->5上最右
//6下最右->1前最右
//2后最右->6下最右
//4右面 顺时针转90度
for(int i = ;i <= ;++ i)
tmp[i] = squ[][i][];
for(int i = ;i <= ;++ i)
squ[][i][] = squ[][i][];
for(int i = ;i <= ;++ i)
squ[][i][] = squ[][i][];
for(int i = ;i <= ;++ i)
squ[][i][] = squ[][i][];
for(int i = ;i <= ;++ i)
squ[][i][] = tmp[i]; for(int i = ;i <= ;++ i)
for(int j = ;j <= ;++ j)
tmp2[i][j] = squ[][i][j];
for(int i = ;i <= ;++ i)
for(int j = ;j <= ;++ j)
squ[][i][j] = tmp2[ - j + ][i];
}
else if(q[k] == )
{
//5上最右->1前最右
//2后最右->5上最右
//6下最右->2后最右
//1前最右->6下最右
//4右面 逆时针转90度 for(int i = ;i <= ;++ i)
tmp[i] = squ[][i][];
for(int i = ;i <= ;++ i)
squ[][i][] = squ[][i][];
for(int i = ;i <= ;++ i)
squ[][i][] = squ[][i][];
for(int i = ;i <= ;++ i)
squ[][i][] = squ[][i][];
for(int i = ;i <= ;++ i)
squ[][i][] = tmp[i]; for(int i = ;i <= ;++ i)
for(int j = ;j <= ;++ j)
tmp2[i][j] = squ[][i][j];
for(int i = ;i <= ;++ i)
for(int j = ;j <= ;++ j)
squ[][i][j] = tmp2[j][ - i + ];
}
else if(q[k] == )
{
//1前最上->4右最上
//3左最上->1前最上
//2后最上->3左最上
//4右最上->2后最上
//5上逆时针
for(int i = ;i <= ;++ i)
tmp[i] = squ[][][i];
for(int i = ;i <= ;++ i)
squ[][][i] = squ[][][i];
for(int i = ;i <= ;++ i)
squ[][][i] = squ[][][i];
for(int i = ;i <= ;++ i)
squ[][][i] = squ[][][i];
for(int i = ;i <= ;++ i)
squ[][][i] = tmp[i];
for(int i = ;i <= ;++ i)
for(int j = ;j <= ;++ j)
tmp2[i][j] = squ[][i][j];
for(int i = ;i <= ;++ i)
for(int j = ;j <= ;++ j)
squ[][i][j] = tmp2[ - j + ][i]; }
else
{
//1前最上->3左最上
//4右最上->1前最上
//2后最上->4右最上
//3左最上->2后最上
//5上顺时针
for(int i = ;i <= ;++ i)
tmp[i] = squ[][][i];
for(int i = ;i <= ;++ i)
squ[][][i] = squ[][][i];
for(int i = ;i <= ;++ i)
squ[][][i] = squ[][][i];
for(int i = ;i <= ;++ i)
squ[][][i] = squ[][][i];
for(int i = ;i <= ;++ i)
squ[][][i] = tmp[i];
for(int i = ;i <= ;++ i)
for(int j = ;j <= ;++ j)
tmp2[i][j] = squ[][i][j];
for(int i = ;i <= ;++ i)
for(int j = ;j <= ;++ j)
squ[][i][j] = tmp2[j][ - i + ]; }
}
put();
return ;
}

Problem 3 czy的后宫(harem.cpp/c/pas)

【题目描述】

czy要妥善安排他的后宫,他想在机房摆一群妹子,一共有n个位置排成一排,每个位置可以摆妹子也可以不摆妹子。有些类型妹子如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看了。假定每种妹子数量无限,求摆妹子的方案数。

【输入格式】

输入有m+1行,第一行有两个用空格隔开的正整数n、m,m表示妹子的种类数。接下来的m行,每行有m个字符1或0,若第i行第j列为1,则表示第i种妹子第j种妹子不能排在相邻的位置,输入保证对称。(提示:同一种妹子可能不能排在相邻位置)。

【输出格式】

输出只有一个整数,为方案数(这个数字可能很大,请输出方案数除以1000000007的余数。

【样例输入】

2 2

01

10

【样例输出】

7

【样例说明】

七种方案为(空,空)、(空,1)、(1、空)、(2、空)、(空、2)、(1,1)、(2,2)。

【数据范围】

20%的数据,1<n≤5,0<m≤10。

60%的数据,1<n≤200,0<m≤100。

100%的数据,1<n≤1,000,000,000,0<m≤100。

注:此题时限1.5s是因为本评测机跑太慢,大家正常做

但写的太丑可能T一俩个点

【题解】

f[i][j]表示前i个妹子(包括0)最后一个是j的方案数;

f[i][j] = fΣ[i - 1][k]

矩阵加速

现场读入写挂了只拿了10分。。

险些AK

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
const long long INF = 0x3f3f3f3f3f3f3f3f;
const long long MAXN = + ;
const long long MAXM = +;
const long long MOD = ;
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();
if(c == '-')x = -x;
} long long n,m;
long long g[MAXM][MAXM];
long long tmp[MAXM][MAXM];
long long ans[MAXM][MAXM];
long long base[MAXM][MAXM];
void pow(long long b)
{
register long long i,j,k;
//int r = 1;
for(i = ;i <= m;++ i)
ans[i][i] = ;
//int base = a;
for(i = ;i <= m;++ i)
for(j = ;j <= m;++ j)
base[i][j] = g[i][j];
while(b)
{
if(b & )
{
memset(tmp, , sizeof(tmp));
//r *= base;
for(k = ;k <= m;++ k)
for(i = ;i <= m;++ i)
for(j = ;j <= m;++ j)
{
tmp[i][j] += ((ans[i][k] * base[k][j]) % MOD);
while(tmp[i][j] >= MOD)
tmp[i][j] -= MOD;
}
for(i = ;i <= m;++ i)
for(j = ;j <= m;++ j)
ans[i][j] = tmp[i][j];
}
memset(tmp, , sizeof(tmp));
//base *= base;
for(k = ;k <= m;++ k)
for(i = ;i <= m;++ i)
for(j = ;j <= m;++ j)
{
tmp[i][j] += ((base[i][k] * base[k][j]) % MOD);
while(tmp[i][j] >= MOD)
tmp[i][j] -= MOD;
}
for(i = ;i <= m;++ i)
for(j = ;j <= m;++ j)
base[i][j] = tmp[i][j];
b >>= ;
}
} int main()
{
read(n);read(m);
register long long i,j;
register char c;
register long long as = ;
for(i = ;i <= m;++ i)
{
while(c > '' || c < '')c = getchar();
for(int j = ;j <= m;++ j)
{
g[i][j] = c - '';
g[i][j] ^= ;
c = getchar();
}
}
m ++;
for(i = ;i <= m;++ i)
g[m][i] = g[i][m] = ;
pow(n - );
as = ;
for(i = ;i <= m;++ i)
for(j = ;j <= m;++ j)
{
as += ans[i][j] % MOD;
while(as >= MOD)
as -= MOD;
}
if(as < )as += MOD;
if(n == )printf("%lld", n + );
else printf("%lld", as % MOD);
return ;
}

Problem 4 mex(mex.cpp/c/pas)

详见BZOJ。

暂时留着,以后再说

NOIP模拟 7.05的更多相关文章

  1. ZROI提高组模拟赛05总结

    ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生 ...

  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. Linux-c glib库hash表GHashTable介绍

    百度云glib  链接:https://pan.baidu.com/s/1W9qdlMKWRKIFykenTVuWNQ 密码:ol6y hash表是一种提供key-value访问的数据结构,通过指定的 ...

  2. mahout in Action2.2-给用户推荐图书(3)-评价推荐系统

    推荐系统引擎是一个工具,一种回答问题的手段,"对用户来讲什么是最好的推荐?",在研究回答的前先研究一下这个问题.一个好的推荐的准确含义是什么?如何知道推荐系统是如何生成推荐的?下面 ...

  3. [Bzoj3696]化合物【暴力+树形Dp】

    Online Judge:Bzoj3696 Label:暴力,树形Dp 题目描述 首长NOI惨跪,于是去念文化课了.现在,他面对一道化学题. 这题的来源是因为在一个奇怪的学校两个化竞党在玩一个奇怪的博 ...

  4. axios post请求后台接收不到参数 和 一些配置问题

    原因: axios 的 headers的 content-type  默认是 “application/json ”,传给后台的格式是这样的: 但是后台接收数据的格式一般是表单格式的,就是formda ...

  5. jeeCMS首页加载流程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/gyshun/article/details/79669293 如果JEECMS部署完毕之后,在浏览器 ...

  6. SpringData初探

    前言 项目中用到这个,没有学过,手动搭建,测试执行流程, 理论的东西有时间再补充 Maven依赖 <?xml version="1.0" encoding="UTF ...

  7. PHP的cURL扩展库使用详解

    在还没有接触curl的时候,相信大家在获取网页内容的时,使用得最多的一个函数就是:file_get_contents(),但是它的可控制性不够灵活,无法处理错误情况,对于各种复杂情况的采集更是显得有点 ...

  8. Luogu P2678 跳石头(二分)

    P2678 跳石头 题意 题目背景 一年一度的"跳石头"比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起 ...

  9. Luogu P3295 [SCOI2016]萌萌哒(并查集+倍增)

    P3295 [SCOI2016]萌萌哒 题面 题目描述 一个长度为 \(n\) 的大数,用 \(S_1S_2S_3 \cdots S_n\) 表示,其中 \(S_i\) 表示数的第 \(i\) 位, ...

  10. Leetcode82. Remove Duplicates from Sorted List II删除排序链表中的重复元素2

    给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1-&g ...