Day 1 模拟
1. P1088 火星人
利用STL中的next_permutation();函数求一种排列的下一种排列,循环m次即为答案。(STL大法好~~C++是世界上最好的语言~~逃
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = ;
int n, m, s[MAXN];
int main()
{
scanf("%d%d", &n, &m);
for(int i = ; i <= n - ; ++i)
scanf("%d", &s[i]);
for(int i = ; i <= m; ++i)
next_permutation(s, s + n);
for(int i = ; i <= n - ; ++i)
printf("%d ", s[i]);
return ;
}
2. P1015 回文数
将高精加推广到n进制即可,不再赘述,代码如下。高精 * 1
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXL = ;
int n, ans;
string s1, map = "0123456789ABCDEF";
bool judge(string s1)
{
string s2 = s1;
reverse(s2.begin(), s2.end());
if(s1 == s2) return true;
else return false;
}
string add(string s1)
{
int a[MAXL], b[MAXL], c[MAXL], len = s1.size(), lenc = s1.size();
memset(a, , sizeof(a));
memset(b, , sizeof(b)); memset(c, , sizeof(c));
string s2 = s1, sum;
reverse(s2.begin(), s2.end());
for(int i = ; i <= len; ++i)
{
if(isdigit(s1[len - i])) a[i] = s1[len - i] - '';
else a[i] = s1[len - i] - 'A' + ;
if(isdigit(s2[len - i])) b[i] = s2[len - i] - '';
else b[i] = s2[len - i] - 'A' + ;
}
for(int i = ; i <= lenc; ++i)
{
c[i] += a[i] + b[i]; if(c[i] >= n)
{
c[i] %= n;
++c[i + ];
}
}
++lenc;
while(c[lenc] == && lenc > ) --lenc;
for(int i = lenc; i >= ; --i)
sum += map[c[i]];
return sum;
}
int main()
{
cin >> n >> s1;
for(int i = ; i <= ; ++i)
{
s1 = add(s1); if(judge(s1) == true)
{
cout << "STEP=" << i << endl;
return ;
}
}
cout << "Impossible!" << endl;
return ;
}
3. P1604 B进制星球
与上题基本同理。高精 * 2
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = ;
int k, a[MAXN], b[MAXN], c[MAXN];
char s1[MAXN], s2[MAXN];
int max(int a, int b)
{
if(a >= b) return a;
return b;
}
int main()
{
scanf("%d%s%s", &k, s1, s2);
a[] = strlen(s1);
b[] = strlen(s2);
for(int i = ; i <= a[]; ++i)
{
if(s1[a[] - i] >= '' && s1[a[] - i] <= '')
a[i] = s1[a[] - i] - '';
else if(s1[a[] - i] >= 'A' && s1[a[] - i] <= 'Z')
a[i] = s1[a[] - i] - 'A' + ;
}
for(int i = ; i <= b[]; ++i)
{
if(s2[b[] - i] >= '' && s2[b[] - i] <= '')
b[i] = s2[b[] - i] - '';
else if(s2[b[] - i] >= 'A' && s2[b[] - i] <= 'Z')
b[i] = s2[b[] - i] - 'A' + ;
}
int len = max(a[], b[]);
for(int i = ; i <= len; ++i)
{
c[i] += a[i] + b[i];
if(c[i] >= k)
{
c[i] %= k;
++c[i + ];
}
}
++len;
while(c[len] == && len > ) --len;
for(int i = len; i >= ; --i)
{
if(c[i] <= )
printf("%c", char(c[i] + ''));
else if(c[i] >= )
printf("%c", char(c[i] - + 'A'));
}
return ;
}
4. P1402 乒乓球
字符串模拟,码农题。
#include <iostream>
using namespace std;
const int MAXN = ;
int now = , win[MAXN], w = , l = ;
char c;
int main()
{
for(int i = ; cin >> c && c != 'E'; ++i)
{
if(c == 'W') win[i] = ;
else if(c == 'L') win[i] = ;
}
for(int i = ; ; ++i)
{
if(win[i] == )
{
cout << w << ":" << l << endl;
w = ;
l = ;
break;
}
else if(win[i] == ) ++w;
else if(win[i] == ) ++l;
if((w - l >= || l - w >= ) && (w >= || l >= ))
{
cout << w << ":" << l << endl;
w = ;
l = ;
}
}
cout << endl;
for(int i = ; ; ++i)
{
if(win[i] == )
{
cout << w << ":" << l << endl;
w = ;
l = ;
break;
}
else if(win[i] == ) ++w;
else if(win[i] == ) ++l;
if((w - l >= || l - w >= ) && (w >= || l >= ))
{
cout << w << ":" << l << endl;
w = ;
l = ;
}
}
return ;
}
5. P1255 数楼梯
递推,第k阶的方法=第k-1阶+第k-2阶,其中k的数量比较大,需用高精。高精 * 3
#include <cstdio>
using namespace std;
const int MAXL = , MAXN = ;
int n, f[MAXN][MAXL];
int max(int a, int b)
{
if(a >= b) return a;
return b;
}
void add(int k)
{
int len = max(f[k - ][], f[k - ][]);
for(int i = ; i <= len; ++i)
{
f[k][i] += f[k - ][i] + f[k - ][i];
if(f[k][i] >= )
{
f[k][i] %= ;
++f[k][i + ];
}
}
++len;
while(f[k][len] == && len > ) --len;
f[k][] = len;
return ;
}
int main()
{
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
f[][] = ;
scanf("%d", &n);
if(n == || n == || n == )
{
printf("%d\n", f[n][]);
return ;
}
for(int i = ; i <= n; ++i)
add(i);
for(int i = f[n][]; i >= ; --i)
printf("%d", f[n][i]);
printf("\n");
return ;
}
6. P1192 台阶问题
和上一题差不多,只是每次上迈的阶数从2变为n,另外本题不用高精,答案%100003
#include <cstdio>
using namespace std;
const int MAXN = ;
int n, k;
long long f[MAXN];
int min(int a, int b)
{
if(a <= b) return a;
return b;
}
int main()
{
scanf("%d%d", &n, &k);
f[] = ;
f[] = ;
for(int i = ; i <= n; ++i)
for(int j = min(i, k); j >= ; --j)
{
f[i] += f[i - j];
if(f[i] >= ) f[i] %= ;
}
printf("%lld\n", f[n]);
return ;
}
By ZRQ
Day 1 模拟的更多相关文章
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- Python 爬虫模拟登陆知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
- HTML 事件(四) 模拟事件操作
本篇主要介绍HTML DOM中事件的模拟操作. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4. ...
- 模拟AngularJS之依赖注入
一.概述 AngularJS有一经典之处就是依赖注入,对于什么是依赖注入,熟悉spring的同学应该都非常了解了,但,对于前端而言,还是比较新颖的. 依赖注入,简而言之,就是解除硬编码,达到解偶的目的 ...
- webapp应用--模拟电子书翻页效果
前言: 现在移动互联网发展火热,手机上网的用户越来越多,甚至大有超过pc访问的趋势.所以,用web程序做出仿原生效果的移动应用,也变得越来越流行了.这种程序也就是我们常说的单页应用程序,它也有一个英文 ...
- javascript动画系列第一篇——模拟拖拽
× 目录 [1]原理介绍 [2]代码实现 [3]代码优化[4]拖拽冲突[5]IE兼容 前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容 ...
- C++ 事件驱动型银行排队模拟
最近重拾之前半途而废的C++,恰好看到了<C++ 实现银行排队服务模拟>,但是没有实验楼的会员,看不到具体的实现,正好用来作为练习. 模拟的是银行的排队叫号系统,所有顾客以先来后到的顺序在 ...
- MSYS2——Windows平台下模拟linux环境的搭建
最近从MSYS1.0迁移到了MSYS2.0,简单讲,MSYS2.0功能更强大,其环境模拟更加符合linux.虽然本身来自cygwin,但其集成了pacman软件管理工具,很有linux范,并且可以直接 ...
- trigger事件模拟
事件模拟trigger 在操作DOM元素中,大多数事件都是用户必须操作才会触发事件,但有时,需要模拟用户的操作,来达到效果. 需求:页面初始化时触发搜索事件并获取input控件值,并打印输出(效果图如 ...
随机推荐
- [原]UEFI+GPT启动VHD
1. 缘起 2. 创建VHD文件并写入系统镜像到VHD文件 2.1 制作VHD文件 2.1.1 纯界面创建 2.1.2 命令行创建 2.2 把系统镜像写入VHD文件 3. 添加VHD文件到系统引导 3 ...
- ZJNU 1129 - The sum problem——中级
枚举区间可能的长度len,将m减去1~len构成的序列和后如果结果是len的倍数,则可以构成答案区间. /* Written By. StelaYuri */ #include<stdio.h& ...
- TCP并发、GIL、锁
TCP实现并发 #client客户端 import socket client = socket.socket() client.connect(('127.0.0.1',8080)) while T ...
- MergeSort(归并排序)原理及C++代码实现
归并排序利用分治策略进行排序.原理如下 分解:分解待排的n个元素的序列成个具n/2个元素的两个子序列. 解决:使用归并排序递归地排序两个子序列. 合并:合并两个已排序的子序列以产生已排序的答案. 归并 ...
- [LC] 77. Combinations
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. Example: I ...
- zabbix 使用邮件发送告警信息
配置系统mail命令,使其可以发送外网邮件 mail 命令配置 修改zabbix_server配置文件,使其可以执行告警脚本 [root@rexen etc]# vim /usr/local/zabb ...
- 分布式消息队列Apache Pulsar
Pulsar简介 Apache Pulsar是一个企业级的分布式消息系统,最初由Yahoo开发并在2016年开源,目前正在Apache基金会下孵化.Plusar已经在Yahoo的生产环境使用了三年多, ...
- Linux shell Script初识
shell secript: 执行方式的差异: ./ sh执行都是在创建一个子程序来执行,只会继承环境变量, 其中的变量如果export声明,子程序的子程序会继承,不会升级为环境变量 source 的 ...
- 学习python-20191230(1)-Python Flask高级编程开发鱼书_第04章_应用、蓝图与视图函数
视频06: 1.自动导包快捷键——默认为alt + enter 键组合 选中的字符由小写变为大写——Ctrl + Shift + U键组合 2.DataRequired()——防止用 ...
- UFT安装
1.下载解压双击setup.exe 2.点击安装 3.点击下一步 4.检测是否需要安装插件之后一路向下 5.安装之后图标 下载: 链接:https://pan.baidu.com/s/1sa0h037 ...