一些小trick

一些小trick

  1. long long 的上限为 \(9223372036854775807\) ,然后 unsigned long long 的格式化符号为 scanf("%llu",&x) ,但是如果用于强制类型转换的话 1ull 或者 1llu 都行。另:直接这样做和 (unsigned long long) 强制转换时间上貌似没有什么差别,其他类型同理。

  2. unique 的去重原理是将后面不重复的元素覆盖前面重复的元素,代码实现是这样的:

    iterator My_Unique (iterator first, iterator last) {
    	if (first==last) return last;
    	iterator result = first;
    	while (++first != last) {
    		if(!(*result == *first)) *(++result)=*first;
    	}
    	return ++result;
    }
    
  3. 手写 max min 要快很多,\(1e8\) 的数据从 \(800+ms\) 变成 \(300+ms\) ,但是如果有递归函数则前往不要用,因为会重复递归,开销十分大。

  4. scanf 在读入空格或者回车的时候会将其重新放入缓冲区。

  5. 1e6 的数据下手写堆比 priority_queue 要快一倍,但是开 O2 之后就持平了……

  6. 1ull<<64 的结果是 \(1\) ……???然后发现……这好像是一种 \(UB(Undefined\ Behavior)\) 行为,听说左移位会先将操作的位数对字长取模。至于 \(UB\) 行为……具体怎么确定怎么实现就看编译器心情了,就好像 printf("%d %d\n",++i,++i) 一样。

posted @ 2021-03-10 21:18  pycr  阅读(78)  评论(0)    收藏  举报