ACM之近期学习总结

最近ACM没有学什么新算法,只是做了一些题,相当于补了一些以前掌握不好的知识点。接下来总结一下近期做题过程中所学。

一.对于年月日的理解

最近在洛谷上做了一道黑色星期五的问题,通过这道题我掌握了:

I.  为了方便用数组储存每月的天数,且月份符合实际意义,我们一般这样定义数组

int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 即将a[0]设为0,正常的a[1]=31,符合实际意义。写到这里,以后需要注意,数组的第一个数为a[0],不是a[1].

II.   可以通过上个月的13号是星期几推出这个月的13号是星期几

从某月1号开始,到下个月1号,要经过的天数为这个月的天数,分为两种情况:

 for(int j=1;j<=12;++j)//j代表月份
        {
            if(j==1)
                x=(a[12]+x)%7;//x为上月13号所在的星期几数
            else x=(a[j-1]+x)%7;
            b[x]++;
        }

 

二.要擅用结构体表示

在贪婪的送礼者这道题目中,当一个量具有多种性质时,我们可以用一个结构体组织起来,这样也方便对其中的某一个性质对所有量进行排序。

 

三.命名那个数字知识点注意

I.  当两个量具有对应关系时,我们要擅用map建立对应关系

II.  当建立char类型与int类型的map映射时,我们要注意:

map <char,int> m;
 m['A']=2;m['B']=2;m['C']=2;

在写char类型时不要忘记加单引号,在写string类型时不要忘记加双引号

 III.  将4734当做字符数组进行存储时,char b[5], 则b[i]-'0'才可以转换为i+1位所在的数字

IV.  在bool check()函数中,我们要擅用return 0,return 1,flag=1,flag=0等标志性变量

V.  字符数组一般在主函数定义,这样可以开大点

 

四.挤牛奶,安排教师开班会

这都是区间问题,套路都一样 ,写一个struct node函数,begin,end两个变量。对node 的begin进行一个cmp排序。

 

五. 回文数

判断是否是回文数

bool judge(char v[]){
    for(int i=0;i<b;i++)
        if(v[i]!=v[b-1-i])return 0;
    return 1;	
}

进制转换

char w[200000];
int b=0;
 while(x){
     w[b++]=x%b+'0';
     x/=b;
}

注意:不要忘记加单引号,这才能将数字转换为字符数组。

至于其他所做的题目,主要就是认真分析题意,考虑完整每种情况。要先对题目有完整的思路,再打代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值