小算法

一.求模算法

资料来源:运算规则

模运算与四则运算有点相似,except除法
(a+b)%p=(a%p+b%p)%p;
(a-b)%p=(a%p-b%p)%p;
(a·b)%p=(a%p·b%p)%p;
a ^ b % p = ((a % p)^b) % p
例题链接:Fibonacci Again

AC code

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

//(a+b)%p=(a%p+b%p)%p;
int p[1000003];
int main() {
	int n;
	memset(p, 0, sizeof(p));
	p[0] = 7 % 3;
	p[1] = 11 % 3;
	int prev=0;
	while (scanf("%d", &n)!= EOF) {
		if (n > prev) {
			for (int i = 2; i <= n; i++) {
				p[i] = (p[i - 1] % 3 + p[i - 2] % 3) % 3;
			}
		}
		if (p[n] == 0)cout << "yes\n";
		else cout << "no\n";
	}
	return 0;
}

二.STL中好用的一些函数

  1. nth_element(p,p+k,p+n)+p[k]
    求出数组长度为n的数组中第k小的元素

  2. lower_bound(iterator it1,iterator it2,val)
    返回在有序序列中第一个大于val的迭代器
    若不存在,则返回it2的地址
    若要取其索引,index=lower_bound(p,p+n,val)-p;即减去起始迭代器

  3. upper_bound(iterator it1,iterator it2,val)
    返回在有序序列中第一个大于等于val的迭代器
    若不存在,则返回it2的地址
    若要取其索引,方法同上
    关于他们的返回值问题,在这位博主的博客里面有较好的解释

  4. next_permutation(iterator begin,iterator end)
    bool类型
    进行原序列的全排
    若原数组有序,该函数可以输出包括原序列在内的排列
    反之,则不包括
    对应prev_permutation(…)

  5. min_element(iterator begin,iterator end)
    返回该区间内最小值

  6. max_element(iterator begin,iterator end)
    同理

三.格式化读取字符串

int res = sscanf(cstr, "%d(%d)", &integer1, &integer2)
//若res值为2,说明读到了两个这样格式的整数

四.输入输出的优化

template<class T>
inline void read(T& x) {
	x = 0;
	T icon = 1;
	char c = getchar();
	for (; c < '0' || c>'9'; c = getchar()) {
		if (c == '-') {
			icon = -1;
		}
	}
	for (; c >= '0' && c <= '9'; c = getchar()) {
		x = x * 10 + (c - '0');
	}
	x *= f;
}
template<class T>
inline void write(T x) {
	if (x < 0) {
		putchar('-');
		x *= -1;
	}
	if (x >= 10)write(x / 10);
	putchar(x % 10 + '0');
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值