教程:
http://www.cskaoyan.com/forum.php?mod=viewthread&tid=647811&highlight=%BB%FA%CA%D4%D6%B8%C4%CF
总述
- 数组小的定义在main里直接初始化,否则定义为全局变量,用for初始化
- 查找一遍scanf,确认取址符用对
如果自测过了,综测没过,可能是没考虑特殊情况如No answer
排序
1秒约百万数量级复杂度
1M能装25万个intscanf 返回成功赋值的变量个数.对于不知道有多少组输入的情况,常见做法有:
while(scanf()!=EOF){}
或 while(gets(str)) {}
scanf输入,即使是字符串也可以用空格分割。例如i am a teacher 算作四个字符串
- C++自带的排序函数:sort
#include
sort(buff,buff + n); // 数组首地址为buff,排n个数(即不包括buff[n])
- sort函数,利用自己的排序规则(compare函数)重载
bool compare(int x,int y)
{
balabala; //例如x>y
return true;
}
sort(buff,buff+n,compare); / /compare 为true,表示第一个参数将排在第二个参数前。
- string.h中的字符串处理函数
string.h
函数说明 strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。
返回值 若参数s1和s2字符串相同则返回0。s1长度大于s2长度则返回大于0 的值,s1 长度若小于s2 长度则返回小于0的值.
- 非零为true
日期类问题
- &&优先级高于||
- 大容量存储空间写在函数外面,作为全局变量以免不够
- 套路:
#include
#define isLeap(x) x%100!=0 && x%4==0 ||x%400==0
int dayOfMonths[13][2]
{
0,0,
31,31,
28,29,
31,31,
30,30,
31,31,
30,30,
31,31,
31,31,
30,30,
31,31,
30,30,
31,31
};
struct Date
{
int year;
int month;
int day;
void nextDay()
{
//Date tem = date;
day++;
if(day>dayOfMonths[month][isLeap(year)])
{
day=1;
month++;
if(month>12)
{
month=1;
year++;
}
}
}
};
int buff[5000][13][32];
int abs(int x)
{
return x>0?x:-x;
}
int main()
{
//预处理
int counter=1;
Date temp = {0,1,1};
buff[0][1][1]=1;
while(temp.year<5000)
{
temp.nextDay();
counter++;
buff[temp.year][temp.month][temp.day]=counter;
}
//输入日期
int y1,m1,d1,y2,m2,d2;
while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF)
{
scanf("%4d%2d%2d",&y2,&m2,&d2);
printf("%d\n",abs(buff[y1][m1][d1]-buff[y2][m2][d2])+1);
}
return 0;
}
排版类
一般有两种写法,一种是直接按规律输出,另一种是定义输出矩阵,先填好矩阵,在输出。
Written with StackEdit.