• 刷题笔记


    教程:
    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
    ",abs(buff[y1][m1][d1]-buff[y2][m2][d2])+1);
        }
        
        return 0;
    }
    

    排版类

    一般有两种写法,一种是直接按规律输出,另一种是定义输出矩阵,先填好矩阵,在输出。

    Written with StackEdit.

  • 相关阅读:
    数字校验1
    数字校验
    千分位保留4位小数
    如何把一个字符串格式化位4位一个空格
    from里button会提交表单
    重新学习JavaScript2015年11月3日
    java设计模式之代理模式
    自定义标签 (choose)
    自定义标签 foreach
    获取一个表格的一行的值
  • 原文地址:https://www.cnblogs.com/YuQiao0303/p/9622834.html
Copyright © 2020-2023  润新知