刷题笔记

教程:
http://www.cskaoyan.com/forum.php?mod=viewthread&tid=647811&highlight=����ָ��

总述

  • 数组小的定义在main里直接初始化,否则定义为全局变量,用for初始化
  • 查找一遍scanf,确认取址符用对
  • 如果自测过了,综测没过,可能是没考虑特殊情况如No answer

排序

  • 1秒约百万数量级复杂度
    1M能装25万个int

  • scanf 返回成功赋值的变量个数.对于不知道有多少组输入的情况,常见做法有:

while(scanf()!=EOF){}
或 while(gets(str)) {}

scanf输入,即使是字符串也可以用空格分割。例如i am a teacher 算作四个字符串

  • C++自带的排序函数:sort
#include<algorithm>
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 <stdio.h>

#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.

posted @ 2018-09-10 20:51  YuQiao0303  阅读(149)  评论(0编辑  收藏  举报