1. 编译错误
1. Windows下GCC编译环境中文乱码
原因: Windows(中文)默认的字符集是Windows-936(GBK),而GCC编译器默认编译的时候是按照UTF-8解析的,当未指定字符集时一律当作UTF-8进行处理,于是造成乱码
// 在编译参数中增加以下两条指令:
-fexec-charset=gbk
-finput-charset=gbk
新增: 上述方法只有在只使用 cout 输出时有效。若要使得 printf 和 cout 输出中文均能正常显示,需把 cmd 的命令显示改为 UTF8
chcp 65001
2. Java中编译错误: 编码GBK的不可映射字符
javac -encoding utf-8 JAVA_FILE_NAME.java && java JAVA_FILE_NAME
2. Java
Java中 String 和 Integer 的相互转换
// 将字符串 String 转换成整数 int。
1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]);
2). int i = Integer.valueOf(my_str).intValue();
// 将整数 int 转换成字符串 String
1.) String s = String.valueOf(i);
2.) String s = Integer.toString(i);
3.) String s = "" + i;
3. C/C++
C++ 中 int 和 string 的相互转换
// int 转 string
string Int_to_String(int n) {
ostringstream ss;
ss<<n; //n为int类型
return ss.str();
}
// string 转 int
int str2int(string str) {
istringstream ss(str);
int res;
ss>>res;
return res;
}
cin cout 加速
cin、cout慢是因为: 默认的时候,
c
i
n
cin
cin 与
s
t
d
i
n
stdin
stdin 总是保持同步的,也就是说
s
c
a
n
f
scanf
scanf 、
c
i
n
cin
cin 两种方法可以混用,而不必担心文件指针混乱,同时
c
o
u
t
cout
cout 和
s
t
d
o
u
t
stdout
stdout 也一样,两者混用不会输出顺序错乱。也正因为这个兼容性的特性,导致许多额外的开销。
解决方法:sync_with_stdio()
这个函数是一个“是否兼容stdio”的开关,
f
a
l
s
e
false
false 关闭所有C++标准流与其相应标准C流的同步。
进一步加速(接近scanf): 在默认的情况下
c
i
n
cin
cin 绑定的是
c
o
u
t
cout
cout(cin.tie() == &cout),调用
c
i
n
>
>
a
;
cin>>a;
cin>>a; 导致
c
o
u
t
cout
cout 刷新。通过调用 cin.tie(0)
解除
c
i
n
cin
cin 与
c
o
u
t
cout
cout 的绑定 ,
c
i
n
cin
cin 读数据将不再导致
c
o
u
t
cout
cout 刷新。
ios::sync_with_stdio(false);
cin.tie(0);
C/C++快速读写
整数
#include<cctype>
inline int read()
{
int X=0,w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
inline void write(int x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
浮点
inline double dbread()
{
double X=0,Y=1.0; int w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=X*10+(ch^48),ch=getchar();
ch=getchar();//读入小数点
while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar();
return w?-X:X;
}
4. 经典问题
1. 一维线段是否有交集问题
线段 (a1,a2) 和 (b1,b2) 是否有交集,根据数学知识我们可以知道,当 min(a2, b2) > max(a1, b1) 时,这两条线段有交集。