基础:
Ctrl+Z,X,C,V,S,A,Ctrl+Shfit+Z:略
F9:Build+Run
F8:Debug
不广为人知的比较牛的快捷键:
Ctrl+O:打开项目
Alt+F5,F6:切换(上下)并激活Project
Ctrl+Alt+C:注释选中代码
Ctrl+Alt+X:取消注释选中代码
Alt+N
重构代码,光标停在一个变量或者符号上,然后按Alt+N,会自动检测全局中相同的变量,并替换成新的。
例如,define ll long long
,ll
改成LL
,ll ans
会变为LL ans
。
注意,V.end
改为V.begin
后,只有V.end
会变为V.begin
。
需要编译后才能使用。
缩写
类似于模板功能,在settings-Editor-Abbreviation中设置。
新建一个并自己命名,例如这里的begin,敲上自己的模板。$NOW L
是自带的宏,表示当前时间。当然可以自己写不确定的变量,例如$(Author)
,打开的时候会弹出提示框,让你自己输入变量。
使用方法:敲名字begin
,再按Ctrl+J即可。
自己的几个模板
begin
/*
* Author : Jk_Chen
* Date : $NOW_L
*/
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define rep(i,a,b) for(int i=(int)(a);i<=(int)(b);i++)
#define per(i,a,b) for(int i=(int)(a);i>=(int)(b);i--)
#define mmm(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define pill pair<int, int>
#define fi first
#define se second
void test(){cerr<<"\n";}
template<typename T,typename... Args>void test(T x,Args... args){cerr<<"> "<<x<<" ";test(args...);}
const LL mod=1e9+7;
const int maxn=1e5+9;
const int inf=0x3f3f3f3f;
LL rd(){ LL ans=0; char last=' ',ch=getchar();
while(!(ch>='0' && ch<='9'))last=ch,ch=getchar();
while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
if(last=='-')ans=-ans; return ans;
}
#define rd rd()
/*_________________________________________________________begin*/
int main(){
//ios::sync_with_stdio(false);
//cin.tie(0);
|
return 0;
}
/*_________________________________________________________end*/
edge
#define rep_e(i,p,u) for(int i=head[p],u=to[i];i;i=nex[i],u=to[i])
int head[maxn],to[maxn<<1],nex[maxn<<1],now;
void add(int a,int b){
nex[++now]=head[a];head[a]=now;to[now]=b;
}
void init_edge(){
memset(head,0,sizeof head);
now=0;
}|
/*_________________________________________________________edge*/
Pow
LL Pow(LL a,LL b,LL mod=mod){
if(a>=mod)a%=mod;
LL res=1;
while(b>0){
if(b&1)res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
LL inv(LL a){
return Pow(a,mod-2);
}
/*_________________________________________________________Pow*/
unique
struct Uni{
int num;
int tmp[maxn];|
int operator[](int idx)const{
return tmp[idx];
}
int& operator[](int idx){
return tmp[idx];
}
void push(int x){
tmp[++num]=x;
}
void init(){
sort(tmp+1,tmp+1+num);
num=unique(tmp+1,tmp+1+num)-tmp-1;
}
int idx(int val){
return lower_bound(tmp+1,tmp+1+num,val)-tmp;
}
}U;
/*_________________________________________________________unique*/
matrix
const int SIZE=5|;
struct matrix{
LL mat[SIZE][SIZE];
matrix(){memset(mat,0,sizeof mat);}
matrix operator * (const matrix & x)const{
matrix ans;
for(int i=0;i<SIZE;i++){
for(int j=0;j<SIZE;j++){
for(int k=0;k<SIZE;k++){
ans.mat[i][j]=(ans.mat[i][j]+mat[i][k]*x.mat[k][j])%mod;
}
}
}
return ans;
}
} ;
matrix Pow(matrix a,LL b){
matrix ans;
for(int i=0;i<SIZE;i++)ans.mat[i][i]=1;
while(b){
if(b&1)ans=ans*a;
a=a*a;
b>>=1;
}
return ans;
}
/*_________________________________________________________matrix*/
tree
|#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid (l+r>>1)
#define root int rt,int l,int r
#define lson ls,l,mid
#define rson rs,mid+1,r
Hash
namespace Hash{
const int Mod=1e6+9;
int head[Mod],nex[Mod],now;
struct node{
int val;
int cnt;
} val[Mod];
void init(){
now=0;
mmm(head,0);
}
node* Find(int v){
int key=(v%Mod+Mod)%Mod;
for(int i=head[key];i;i=nex[i]){
if(val[i].val==v)
return &val[i];
}
return nullptr;
}
void Insert(int v){
node* P=Find(v);
if(P==nullptr){
int key=(v%Mod+Mod)%Mod;
nex[++now]=head[key];head[key]=now;val[now].val=v,val[now].cnt=1;
}
else{
P->cnt++;
}
}
}|
/*_________________________________________________________Hash*/
fa
int fa[maxn];
int siz_fa[maxn];
void init_fa(int n){
rep(i,0,n)fa[i]=i,siz_fa[i]=1;
}
int fin(int p){
return fa[p]==p?p:fa[p]=fin(fa[p]);
}
int link(int u,int v){
int f1=fin(u),f2=fin(v);
if(f1!=f2){
if(siz_fa[f1]>siz_fa[f2])swap(f1,f2);
fa[f1]=f2;
siz_fa[f2]+=siz_fa[f1];
}
}|
/*_________________________________________________________fa*/