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 之内的数