目录
一.总结一下我最近每次 debug一个小时常犯还找不到的错误:
1. ++i里少了一个+
2. j=0;i<n;++j, i和 j不分
3.待更新
超全的高难度ACM/OI模板
二进制输出
1.itoa()函数
itoa()就是把一个整数转换成一个字符串,该函数接受3个参数。
第一个是整数,第2个是字符串,第三个是要储存的进制。
#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=0;i<=31;i++)
{
char s[10];
itoa(i, s, 2);
if(strlen(s)<5)
for(int i=0;i<5-strlen(s);i++)
cout<<0;
printf("%s\n", s);
}
return 0;
}
2.除二取余
void showbit2(int a){
/* 除二取余: 6/2=3 % 0 3/2=1 % 1 1/2=0 % 1 => 110 */
int ret = 0;
while(a){
ret = ret*10 + (a % 2);
a = a / 2;
}
cout<<ret<<endl;
}
(1)cin同步输入,一个cin语句中,无法互相调用,cin结束以后才真正赋值
#include<iostream>
using namespace std;
int x,y,d,n,maxm,num,sum=1,f[100],a;
int main()
{
ios::sync_with_stdio(false);
cin>>a>>f[a];
cout<<a<<endl<<f[a]<<endl;
}
注意!输出结果为:
10
0
(2)不开long long 见祖宗!!
速查表:
char -128 ~ +127 (1 Byte)
short -32767 ~ + 32768 (2 Bytes)
unsigned short 0 ~ 65536 (2 Bytes)
int -2147483648 ~ +2147483647 (4 Bytes)
unsigned int 0 ~ 4294967295 (4 Bytes)
long == int
long long -9223372036854775808 ~ +9223372036854775807 (8 Bytes)
double 1.7 * 10^308 (8 Bytes)
(3)getline,cin,(cin>>x).get();
#include<bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
#include<cmath>
#define debug cout<<"ok"<<endl
typedef long long ll;
const int maxn=1e4+500;
const int mod=1e9+7;
using namespace std;
string s,buf;
int n;
int main()
{
ios::sync_with_stdio(false);
(cin>>n).get();//cin>>n会忽略掉换行符而getline遇见换行符会停止所以cin不能配getline要用(cin>>n).get();代替
getline(cin,s);
stringstream ss(s);
while(ss>>buf)
{
cout<<buf<<endl;
}
}
[矩阵求斐波那契数列]
结构体重载比较运算符来排序
struct person
{
ll yu,shu,ying,sum,idx;
bool operator<(const person &t)const
{
if(t.sum!=sum)return sum>t.sum;
if(t.yu!=yu)return yu>t.yu;
return idx<t.idx;
}
}p[N];
。。。。。。。。。
sort(p+1,p+1+n);//直接sort就行了
(4)不要滥用return,不要随意建函数用return,我就是因为用return,导致还有数据要输入结果WA了QwQ
待解决
1.幂次方
2.CF1295C Obtain The String
文件输入输出:
采用重定向的形式进行输入输出,很方便
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
记得包含头文件#include<cstdio>
第二种方法是使用C语言的形式进行输入输出
#include<cstdio>
#define INF 1000000000
using namespace std;
int main()
{
FILE *fin,*fout;
fin=fopen("input.txt","rb");
fout=fopen("output.txt","wb");
int a,b;
fscanf(fin,"%d%d",&a,&b);
fprintf(fout,"%d\n",a+b);
return 0;
}
第三种方法是C++推荐的形式,以流的形式输入输出
#include<fstream>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
int main()
{
int a,b;
in>>a>>b;
out<<a+b;
return 0;
}
scanf和cin都是遇见空格停!!
OI选手推荐使用第一种方式
复旦考研复试机考可能会要求输入文件内哦