C++ 杂项 1

1.读入优化: 

首先只有正整数的是这样子的 注意有时可能要开 long long

inline int r()
{
	char q = getchar();
	int x = 0;
	while (q < '0' || q > '9') q = getchar();
	while ('0' <= q && q <= '9') x = (x << 3) + (x << 1) + q - (3 << 4),q = getchar();
	return x;
}

然后如果有负整数就加个判 注意有时可能要开 long long

inline int r()
{
	char q = getchar();
	int x = 0,y = 1;
	while (q < '0' && q != '-' || q > '9') q = getchar();
	if (q == '-') y = -1,q = getchar();
	while ('0' <= q && q <= '9')
		x = (x << 3) + (x << 1) + q - (3 << 4),q = getchar();
	return x * y;
}

然后这是偷来的 超快的fread ( 我不会的就对了) + 判 读入整数 但此处的 fread 只能用于文件 (stdin) 输入 (考试用处极大)

const int MAXSIZE = 1 << 22;
inline char gc()
{
	static char In[MAXSIZE], *at = In, *en = In;
	if (at == en) en = (at = In) + fread(In, 1, MAXSIZE, stdin);
	return at == en ? EOF : *at++;
}
inline long long gt()
{
	char c;
	while (c = gc(), !(c >= '0'&& c <= '9') && c != '-') {}
	bool f = c == '-';
	long long x = f ? 0 : c - '0';
	for (c = gc() ; c >= '0'&& c <= '9' ; c = gc()) x = x * 10 + c - '0';
	return f ? -x : x;
}
int main()
{
	freopen("*.in","r",stdin);
	freopen("*.out","w",stdout);
	int n = gt();
	long long a = gt();
	return 0;
}

嘛 小数的老老实实地 scanf 吧 字符串貌似优化也没啥用就不管了 反正都是 getchar getline 之类的

2. register :

暗♂示系统把某变量存在寄存器里(注意不能用来暗♂示全局变量 好吧会报错的不用注意) 并没有多大用的优化 (你不能否认机器会做出比你更优的选择) 听说比赛能用??

通常本人加在循环最里面一层=-=因为感觉寄存器放不下太多 不过我对这些设备的知识完全没了解过 只是出于人性化2333~

如 一次用完三行就消掉的子程序——邻接表存边

#define re register
void add(re int u,re int v)
{
	edge[++tot].to = v;
	edge[tot].next = first[u];
	first[u] = tot;
}

又如 最内层的循环=-=就不放了

3. for循环 :

(其实写的并没有什么卵用,至于为什么写可能是太闲了)

for (1 初始条件 ; 2 终止条件 ; 3 下次循环时的变量赋值)

其中 循环是先看1 然后看2 就直接进入循环了!!

然后循环完了再看3 之后看2 再进入循环=-= 所以3大概可以直接视为循环 但不能加if之类的

I.无限循环自行退出

可用以多组数据输入 特定条件退出~

for ( ; ; ) {++a; if (a > 233) break;}

II.定义多重循环变量

缩行必备~真的缩起来我都被自己吓到了

char q[233][233];
for (int a = 1,len = 0,mx = strlen(a); a <= 233 ; a ++,len = 0,mx = strlen(a))
	while (++len <= mx) if (q[a][len] == 'a') ++tot;

III.一行完事型(不走寻常路)

直接在for循环的括号后加分号~缩行必备~

for (int a = 1 ; a <= n ; s[a] = a,a ++);

4.位运算(部分)等效表达

位运算比一般运算快~~

还有位运算时 >>= 貌似比 >= 快玄学倍的样子

Expression_1   Expression_2
   a * 2          a << 1
 a * 2 + 1      a << 1 | 1
   a / 2          a >> 1
   a = 0          a ^= a
 a = a >> 1      a >>= 1
 a = a << 1      a <<= 1
  a >= 1         a >>= 1 // >=也是大于等于的意思哦 但千万不要拿来位运算
  a <= 1         a <<= 1 // <=也是小于等于的意思哦 但千万不要拿来位运算

5.检验质数

最近补补哈希 要拿个特别的质数23333 (不是这个虽然这个也是)

我决定我的就是19491001了噗哈哈哈哈

检验戳这里 Tip : 太大会卡死 如 23333333333 建议检验 - 2 ^ 31 ~ 2 ^ 31 - 1 之内的数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值