精华内容
下载资源
问答
  • 2019快过去了,这一年经历太多,还是有很多的事萦绕在我的心头。过去一年了,我以为我长大了,想开了,现在才看来,我没有! 部队的生活结束了,但是我似乎还是沉浸在过去的日子里面回不来了!我不知道我出来究竟...

    2019

    2019年快过去了,这一年经历太多,还是有很多的事萦绕在我的心头。过去一年了,我以为我长大了,想开了,现在才看来,我没有!

    • 部队的生活结束了,但是我似乎还是沉浸在过去的日子里面回不来了!我不知道我出来究竟是对还是错?在里面我现在看来似乎是很舒服,我也混得很好!似乎出来我就完全没有机会了!新换的专业,求学的生活让我惊慌失措,让我措手不及!接触到考学升迁,难度之大,又让我咂舌!似乎在部队就不会再去考虑这些事了!不过也确实是!但是我已经出来了!回不去了!
    • 我还是不能完全的接受自己,我还是对自己充满的抵触,无论做什么,我似乎都认为自己做的很差劲!现在想来,似乎更多的是对现在的不满!但是又似乎没有足够的毅力去改变!在自己脑子里,我不接受自己!更加确切的说是不知道怎么去接受我自己,去引导我自己!我不能想小说里面一样,如古今大人物一般,为了目标废寝忘食!现在我心里想的是,承认自己的缺点,就是对自己的否定。
    • 不仅仅事不能完全接受自己,我也不知道自己究竟喜欢什么。更确切地说,我找不到当下手头上的事的乐趣!总是后悔自己每一次做的决定!当兵的时候觉得每一天浪费的日子太多了,每一天过得是那么的没有意义,我不适合当兵!退伍了,又开始想以前的日子真好,我似乎适合以前的日子!换专业了,看着面前的代码,觉得烦,似乎不适合当下的专业!我似乎还是适合以前的专业,适合学设计!但是真实的情况那!以前学设计又觉得每天的画画让自己觉得绞尽脑汁,觉得深恶痛绝,回来一定要换专业。我知道,每一次做决定都会面临舍弃,每一次的选择后面都有相应的选择成本,我总是不能坦然的接受当下的一切!现在想来,是学的不够深入!所以体验不到该有的乐趣!是付出的努力不够!如果你能够如于得水,还是讨厌才是讨厌。
    • 一次一次我都让父母失望透了!高考报志愿让他们失望,我不听他们的,不想上医校,不想当老师,非得来上海!就选了一个东华,来了大学我似乎有不满意,对自己后悔,但是从来没有想过父母的感受。在部队考军校,考上了,又不想去。当时脑袋里想的是如何对不起我的指导员,我的连长,我的队长,我的班长,我骗了他们!我说自己身体不适合,从来没有告诉他们我是自己选了不服从调剂,被退档了!他们还在维护我,安慰我,我又是何德何能?从来没有想过父母。回来了,我看着父母年迈的样子,看着他们失望透的样子,看着他们由最初的兴高彩烈到现在黯然神伤的样子,我心碎透了!头一次觉得自己好幼稚,好自私!似乎总是对未来抱着那样的一股无名幻想,被自己的无名幻想搞得热血激情,但是不知道自己真正想要什么。总是为着自己的这股激情热血去伤害周围爱我的人。一次一次消磨,我觉得我好可恨!
    • 身无长技的我,一身是病的我不想混日子,我知道自己不想混日子,但是有的时候就是提不起任何劲,我也不知道自己想干什么。有的时候看到网上的成年人的心酸,疲惫,我就能想到父母的心酸不易,但是我居然还能在那玩手机玩两三个小时。我以前一直以为每天早上五点钟起床很难,在部队是有体制去逼着你所以你能起,在外面就不一样了。我一直认为我哥自己成家后,还会像以前一样每天起得很晚,玩手机玩到很晚。后来我发现,哥变了。每天他会强逼着自己起来去上开摊,去上货,晚上会让自己早睡。为什么,还不是生活的。现在的生活,太安逸了。安逸到稍微受一点苦,就认为不得了了。现在受的一切,在他们看来又算什么?
    • 现在自己看到那些让你去做自己想做的事,去追求梦想的文章,总是会嗤之以鼻。看到那些人说,上大学要找自己喜欢的专业,找工作要找自己喜欢的专业。真的是这样吗?不喜欢又能怎么样?你要活,要生存,要养父母,要养家,你能说不干了吗?你只能忍着,因为没有时间了,没有时间再给你重新选择了,没了。你只能给自己的多发现一点兴趣让你自己不那么讨厌你现在的工作,让你能继续忍受现在的工作。为什么自己那么喜欢看小说,番剧,因为在那里面我能麻醉自己,去逃避,不在面对生活的折磨和重压,不用再看着生活的未来继续惆怅不已。但是麻痹一下,回过头来,只是让你陷入是你更加局促的困局中去。
    • 我总是那么的怕孤独,怕一个人,总是想找个女朋友,但是又不会交流。
      2020
    • 新的一年,不管过去的一年过的好坏如何,只当是在继往开来,继续努力。每天早点睡,周末去做做家教,去找一点兼职,去体验不同的生活,不同的经历,总是闭塞在一个屋子里,你会发霉的,总会做一些奇怪的事。
    • 在学业上,大二第二学期,把所有的大一没学过的课全部都补上,能够跟上大部队的进度,能够自己写一个程序。
    • 在生活上,找回在部队的规律作息,用另外一种健康的方式,积极向上的爱好,来陶冶自己,而不是去麻醉自己,让自己逃避。
    • 在家庭上,尽快让父母对我放心,不能再让他们再有过多的失望。
    展开全文
  • java获取每月最后一天

    万次阅读 多人点赞 2018-02-10 06:37:27
    其实,不纠结于最后一天啦,也可以是上个月的最后一天,下个月的第一天,等等之类的。我发现网上都是写好的一些例子,提供给大家解决那些固定要获取的一个月的最后一天或者第一天,但是代码注释却又惜字如金,导致...

    一个小问题,成为了一个坑。

    相信大家对这个题目——Java获取每个月的最后一天——都不陌生吧。其实,不纠结于最后一天啦,也可以是上个月的最后一天,下个月的第一天,等等之类的。我发现网上都是写好的一些例子,提供给大家解决那些固定要获取的一个月的最后一天或者第一天,但是代码注释却又惜字如金,导致使用者在完全不理解的情况下,Ctrl+C和Ctrl+V,一个坑就暗含在了这里。

    先上一组“凌乱”的代码,根据方法名,这个函数是要求得每月的最后一天:

    public static String getDateLastDay(String year, String month) {
    
          //year="2018" month="2" 
          Calendar calendar = Calendar.getInstance();
          // 设置时间,当前时间不用设置
          calendar.set(Calendar.YEAR, Integer.parseInt(year));
          calendar.set(Calendar.MONTH, Integer.parseInt(month));
    
          // System.out.println(calendar.getTime());
    
          calendar.set(Calendar.DAY_OF_MONTH, 1); 
          calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
          DateFormat format = new SimpleDateFormat("yyyy-MM-dd ");
          return format.format(calendar.getTime());
    }

    解析:
    1. 对于这两行代码:

    calendar.set(Calendar.DAY_OF_MONTH, 1); 
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));

    产生了一条冗余代码,首先Calendar.DAY_OF_MONTH和Calendar.DATE,本来就是一回事,如果你进入该行的JDK API你就会发现如下的解释:

     /**
         * Field number for <code>get</code> and <code>set</code> indicating the
         * day of the month. This is a synonym for <code>DATE</code>.
         * The first day of the month has value 1.
         *
         * @see #DATE
         */
        public final static int DAY_OF_MONTH = 5;

    这里明确阐明了DAY_OF_MONTH是DATE的同义词,可以理解成别名。
    因此,JDK对于 Calendar.DAY_OF_MONTH和Calendar.DATE的取值都是“5”,所以看到有人一会用Calendar.DAY_OF_MONTH进行calendar实例对象的set,一会又用Calendar.DATE进行calendar实例对象的set,可见没有理解这两行代码的意思。

    1. 那个老生常谈的问题。Calendar的体系中,month是从“0”开始数,Day却是从“1”开始数。
      对于month来讲,这句话calendar.set(Calendar.MONTH, Integer.parseInt(month)); 如果设置的是1,那么下面的这句System.out.println(calendar.getTime());打印的将是3月的当前日,可见month是从“0”开始计数;同样的,对于Day,上面的那段JDK代码中也说了“The first day of the month has value 1.” 所以,在这里java8之前的JDK版本对于Calendar的设计确实是存在着凌乱的,也是容易让我们程序员感到困惑的点。

    2. calendar.set和 calendar.add。曾经我也犯过这样的错误,把add和set混用,其实对于set来说,你按照month从0开始,day从1开始这条规则设置的某个月的第几天就是第几天,对比add,也确实是在“0和1”的基线上加天数和月数。
      如果改成这样:

    Calendar calendar = Calendar.getInstance();
    
    calendar.set(Calendar.YEAR, 2018);
    calendar.set(Calendar.MONTH, 2);
    System.out.println(calendar.getTime());
    
    calendar.add(Calendar.MONTH, 3);
    System.out.println(calendar.getTime());

    先后打印的结果就是:

    Tue Mar 06 10:50:38 CST 2018
    Wed Jun 06 10:50:38 CST 2018

    没有问题。
    我们可以把Calendar的设置简单想成一个指针,set和add都是以你设置的日期为基准加上之前提到的“0和1”规则,进行指针移动,如果想要后退指针,那么很简单,set或者add负数就可以了。

    1. calendar.set(Calendar.DAY_OF_MONTH, 0)的作用。我们之前说了,day是从1开始的,那么这句话又是什么鬼呢。其实很容易理解,如果按照第三条贴出的代码,此时指针指向了2018-06-06,那么再执行这句话就相当于将指针的天数归零,然后后退一个月,也就是会输出2018-05-31 。记住,如果你这样执行:
    Calendar calendar = Calendar.getInstance();
    
    calendar.set(Calendar.YEAR, 2018);
    calendar.set(Calendar.MONTH, 2);
    System.out.println(calendar.getTime());
    
    calendar.add(Calendar.MONTH, 3);
    System.out.println(calendar.getTime());
    
    calendar.set(Calendar.DAY_OF_MONTH, 12);
    calendar.set(Calendar.DAY_OF_MONTH, 0);  

    先设置了日子12,这时变成2018-06-12,再执行归零操作,那么还是变为2018-05-31,所以这句话就是将当前指针指向的日期回退到上个月的最后一天。

    1. calendar.getActualMaximum(Calendar.DATE))。在最初的凌乱代码中贴出的calendar.getActualMaximum(Calendar.DATE))这句话需要跟“归零”操作区分开,这句话是真真正正的求当前指针指向的月份的最后一天。强烈不建议把calendar.getActualMaximum(Calendar.DATE))放在calendar.set中,因为会让你对指针走到哪里了产生困惑,尤其在加入了“归零”操作的代码中,比如:
    Calendar calendar = Calendar.getInstance();
    
    calendar.set(Calendar.YEAR, 2018);
    calendar.set(Calendar.MONTH, 2);
    System.out.println(calendar.getTime()); //此处是三月
    
    calendar.add(Calendar.MONTH, 3);  
    System.out.println(calendar.getTime());  //此处是六月
    
    calendar.set(Calendar.DAY_OF_MONTH, 12);
    System.out.println(calendar.getTime());  //此处是6.12
    calendar.set(Calendar.DAY_OF_MONTH, 0);  //此处是5.31
    
    System.out.println(calendar.getActualMaximum(Calendar.DATE)); 
    //此处是5月份的31天
    System.out.println(calendar.getTime()); //此处是5.31
    
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
    
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    System.out.print(format.format(calendar.getTime()));

    我想这个例子看了我如下的操作以后,大家都会有困惑的:以上代码最后输出的是2018-05-31,如果你理解了之前讲的,这个结果是没有问题的。但是,如果我把这行:System.out.println(calendar.getTime()); //此处是5.31 注释掉,大家可以试一下,最后的输出结果是2018-07-01。
    为什么?这个留给大家作为思考题,因为需要自己跟代码才有印象,总之这里的结果如同执行了——
    calendar.add(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));—— “add”方法,而不是“set”方法,因为结果就是在5.31的基础上加上了31天,正好是7.1。

    困惑吧,实话说我都没有信息继续深究了,因为太凌乱了,所以,最好就是不要这样写。即不夹杂“归零”操作,也不在set方法中使用这句代码calendar.getActualMaximum(Calendar.DATE),calendar.getActualMaximum()方法就是获得当前月的最大天数,就只是这么用就好了。

    1. 这里还要提到的一个Tip就是DateFormat是线程不安全的,也就是说如果两个线程同时操作最初代码片段中的最后两句话,结果会出现意想不到的事情。

    那么,既然Calendar有这样那样的问题,而且时不时会出现凌乱的代码——也可以看出这是JDK最初设计上的一些瑕疵——那么JDK对这部分有没有升级呢?答案当然是肯定的。下面我就介绍一下Java8针对Calendar实现的一个完全的修改。

    Java8中引入了LocalDate、LocalTime、Instant、Duration和Period,这也是Oracle在原生的Java API中为引入对日期和时间的高质量的支持整合第三方日期和时间库Joda-Time的基础上提出的。它们都存在于java.time包下:

    LocalDate localDate = LocalDate.of(2018, 2, 6);
    int year = localDate.getYear();
    Month month = localDate.getMonth();
    int day = localDate.getDayOfMonth();
    DayOfWeek dow = localDate.getDayOfWeek();
    int len = localDate.lengthOfMonth();
    boolean bool = localDate.isLeapYear();
    LocalDate today = LocalDate.now();
    
    System.out.println(year);    // 2018
    System.out.println(month);   // FEBRUARY
    System.out.println(day);     // 6
    System.out.println(dow);     // TUESDAY
    System.out.println(len);     // 28
    System.out.println(bool);    // false
    System.out.println(today);   // 2018-02-06

    是不是一目了然呢,或许都不用做过多的解释,你就能获取你想要的日期的某一个部分了。而且,最后一个用LocalDate.now()直接获取的是格式化好的日期格式,而不是看起来有点凌乱的这种格式“Sat Feb 10 06:38:55 CST 2018”,是不是很优雅呢。(最后一个是判断闰年,提醒大家,不要自己判断闰年,但是测试的时候一定要考虑到这个规则:能被4和400整除的是闰年,能被100整除的不是闰年)。

    同样的新的日期时间JDK也提供了可读性强的枚举类型来实现如上的代码,比如:

    int year_value = localDate.get(ChronoField.YEAR);
    int month_value = localDate.get(ChronoField.MONTH_OF_YEAR);
    int day_value = localDate.get(ChronoField.DAY_OF_MONTH);
    
    System.out.println(year_value);    // 2018
    System.out.println(month_value);    // 2
    System.out.println(day_value);    // 6
    
    /*
     * YEAR(
     * "Year",
     *  ChronoUnit.YEARS,
     *  ChronoUnit.FOREVER,
     *  ValueRange
     *          .of(-999999999L,
     *                  999999999L),
     *  "year"
     */

    ChronoField实现了TemporalField接口,如果深入到底层代码你会发现我在最后贴出的注释样的源代码——列出了取值范围——等等,大家有兴趣可以参考。

    LocalTime也是一样,可以通过getHour()、getMinute()和getSecond()方法获取小时、分钟和秒数。

    上面提到了DateFormat在多线程的环境下会出现意想不到的结果,新的JDK也给我们提供了新的选择——DateTimeFormatter,所有的DateTimeFormatter实例都是线程安全的,因此我们可以用单例模式创建格式器实例,然后共享它。

    LocalDate localDate = LocalDate.of(2018, 2, 6);
    String str1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
    String str2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
    
    LocalDate date1 = LocalDate.parse("20180206", DateTimeFormatter.BASIC_ISO_DATE);
    LocalDate date2 = LocalDate.parse("2018-02-06", DateTimeFormatter.ISO_LOCAL_DATE);
    
    System.out.println(str1);   //20180206
    System.out.println(str2);   //2018-02-06
    
    System.out.println(date1);  
    //2018-02-06 ?不知道为什么这句话打印的不是期望的20180206,大家可以帮我看看,我也会在后续的博客中更新调查结果。
    System.out.println(date2);  //2018-02-06

    正如代码显示的可以使用format方法按照DateTimeFormatter提供的静态成员变量取值进行想要的日期格式化,使用parse获取期望格式的LocalDate对象。

    最后,介绍一下对日期和时间的操纵,也是对开篇提到的那段凌乱代码的一个交代。新的JDK提供了对日子和月份加减的优化处理,可读性和简洁性非常棒。

    LocalDate localDate = LocalDate.of(2018, 2, 6);
    LocalDate localDate1 = localDate.withYear(2019);                        //年份修改为2019
    LocalDate localDate2 = localDate1.withDayOfMonth(25);                   //日改为25
    LocalDate localDate3 = localDate2.with(ChronoField.MONTH_OF_YEAR, 9);   //月份改为9
    
    LocalDate localDate4 = localDate3.plusWeeks(1);                         //此时的日期是2019-09-25,在此基础上增加一周是2019-10-02
    LocalDate localDate5 = localDate4.minusYears(3);                        //减去三年 2016-10-02
    LocalDate localDate6 = localDate5.plus(6, ChronoUnit.MONTHS);           //加上六个月2017-04-02
    
    /* 使用TemporalAdjuster进行更复杂的日期调整 */
    //获取以2017-04-02为基准,第一个符合指定星期几要求的日期,2017-04-02就是星期日,程序会直接返回该对象
    LocalDate localDate7 = localDate6.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); 
    //获取2017-04-02所处月份的最后一天,同步取值还有lastDayOfNextMonth/firstDayOfMonth/firstDayOfNextMonth,等等
    LocalDate localDate8 = localDate7.with(TemporalAdjusters.lastDayOfMonth()); 
    
    
    System.out.println(localDate);  //2018-02-06
    System.out.println(localDate1); //2019-02-06
    System.out.println(localDate2); //2019-02-25
    System.out.println(localDate3); //2019-09-25
    System.out.println(localDate4); //2019-10-02
    System.out.println(localDate5); //2019-10-02
    System.out.println(localDate6); //2017-04-02
    System.out.println(localDate7); //2017-04-02
    System.out.println(localDate8); //2017-04-30

    最后的最后,再唠叨两句:
    首先,新的JDK处理日期和时间的方式是在JDK8的前提下支持的,如果你的代码还是JDK7或者以下,那么你只能小心的使用Calendar了;
    其次,这里针对新的日期和时间处理方式介绍的还不够详细,比如JDK8对日期和时间的处理同时还支持处理不同的时区和历法、利用和UTC/格林尼治时间的固定偏差计算时区以及使用别的日历系统,类似伊斯兰教日历这种复杂的日历。我准备再单独开一篇博客专门介绍,并且提供几个成熟且常用的工具类方法,这次就写到这里了,还要去加班 :)
    最后,真的希望光大的程序员小伙伴看看英文,因为再读源码的时候你真的可以省去很多时间,同时也会增加你的耐心,因为对英文头大的同学会看不下去。同时,对于输出结果,比如很简单的Mar和May,英文的熟悉能够帮你迅速的解除类似的混淆,尤其是在焦急的解决bug的时候,我就曾经遇到过把Mar当成May对着输出结果发呆的小伙伴。

    真心谢谢你能看到这里,其中的错漏之处还望海涵,我会继续努力的!

    展开全文
  • C语言题判断输入的年月日是一年中的第几

    万次阅读 多人点赞 2018-11-15 20:58:14
    这道题有几种方法,可以直接用数组做,也可以...思路:1st:定义个长度为12的整型数组,将每个月的天数放入这12个数组元素去。 2ed:定义整型变量分别代表 ,月, 日,还有有用与循环的变量,和累加的容器(...

    这道题有几种方法,可以直接用数组做,也可以调用函数来解决。
    这道题有考到数组,循环,逻辑表达式,等基础知识。
    并不是很难,只要厘清思路。

    唯一值得注意的地方是对闰年的判断,解决闰年,这个问题就会简单很多。

    方法1:数组累加法求天数

    思路:1st:定义一个长度为12的整型数组,将每个月的天数放入这12个数组元素中去。
    2ed:定义整型变量分别代表 年,月, 日,还有有用与循环的变量,和累加的容器(一个用于存储的变量)
    3rd:从键盘输入年月日的数据,赋给年月日变量。
    4th:用逻辑表达式分出闰年的情况,并将闰年的A【1】改为29;
    最后我们进行累加,然后输出累加值要加上输入的天数。

    下面贴出我的操作代码

    include <stdio.h>
    int main()
    {
    	int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    	
    	int years,months,days,i,j=0,flag = 1;
    	
    	printf("请输入年月日来判断\n");
    	
    	scanf("%d%d%d",&years,&months,&days);
    	
    	if(years%4==0&&years%100!=0||years%400==0)
    	{
    		a[1] = 29;
    	}
    
    	for(i=0;i<months-1;i++)
    	{
    		j+=a[i];
    	}
    	printf("这是第%d天",j+days);
    

    但是,我们并不能避免人们输入错误的月份的日子。或是提示错误后依旧给出诸如第378天的数子。

    我们应该怎么办呢?

    方法是我们设一个整形作为标记,将标记的初始为1,若是月份数超过12,日子超过31,便把标记赋为0;
    最后我们把输出日数放到一个IF语句中,就可以屏蔽在错误的月份和日数中输出天数。
    下面给出我的操作代码

    #include <stdio.h>
    int main()
    {
    	int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    	
    	int years,months,days,i,j=0,flag = 1;//j为累加容器,flag为标记//
    	
    	printf("请输入年月日来判断\n");
    	
    	scanf("%d%d%d",&years,&months,&days);
    	
    	if(years%4==0&&years%100!=0||years%400==0)//判断是否为闰年//
    	{
    		a[1] = 29;
    	}
    	if(months>12||days>31)//如遇到输入错误,则把标记便为假,就屏蔽了天数的输出//
    	{
    		flag = 0;
    	}
    	for(i=0;i<months-1;i++)
    	{
    		j+=a[i];
    	}
    	if(flag)
    	{
    		printf("这是第%d天",j+days);
    	}
    	else
    	{
    		printf("FUCK YOU");
    	}
    	
    		
    }
    

    现在,我们来看利用调用函数的方法来解决这个问题。

    月份仍然是关键,我们定义一个子函数,以它来实现月份的累加,
    我们在子函数内定义一个数组,仍然把月份的天数放在内,
    这里只需要一个简单的循环,将里面的元素累加,

    结束后再把累加的天数作为返回值带回主函数
    这样我们在主函数内调用这个月份累加函数就可以完成,
    如果是闰年,则将日加以即可.

    下面给出我的操作代码

    #include <stdio.h>
    int main()
    {
     int years,months,days,i,j,k;
     
     printf("请输入年月日\n");
     
     scanf("%d%d%d",&years,&months,&days);
     
     if(years%4==0&&years%100!=0||years%400==0)
     {
      days+=1;
     }
     printf("这是第%d天",leijia(months)+days); 
    }
    int leijia(int a)
    {
     int i,j = 0;
     
     int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    
    
     for(i=0;i<a-1;i++)
     {
      j+=b[i];  
     }
     return j;
    }
    

    这个代码并不能阻止对月份的月份与日子的错误输入,大家可以自己想想如何阻止错误的输入,比如用上面的标记法。

    展开全文
  • 本来以为HNU的huicpc035和我一样退役了,后来听说他组成了新的footman队,于是又关注了下他。 035体现了两个我觉得非常重要的品质: ...主要说后者:什么是有效地训练? 我想说下我的理解。 很

    本来以为HNU的huicpc035和我一样退役了,后来听说他组成了新的footman队,于是又关注了下他。

    035体现了两个我觉得非常重要的品质:
    1、刻苦的训练
    2、有效的训练

    (本文将主要讨论个人训练,不讨论团队合作)
    而这些品质对于我们弱校ACMer选手水平的提高我觉得很重要。
    刻苦的训练我打算最后稍微提一下。主要说后者:什么是有效地训练?

    我想说下我的理解。
    很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。

    我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。

    其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间,

    我们训练的目的是什么?我觉得有四点
    1、提高编程能力
    2、学习算法,(读书,读论文,包括做一些题目验证)
    3、准备好面临将到来的挑战(熟悉题型,调整心态)
    4、启发思维。

    这里四个目的,从训练的角度上,重要性逐次递减;为什么呢?
    因为前面的因素是后面的基础。而是后面的目的,想达成越为不易。我觉得前3者能保证你ac掉你能做的题,即使难题始终不会做,也可以ac掉中等偏难的题目。

    而需要一定思维难度的题,要以前三者为基础而且属于训练的后期,中期只能作为偶尔调节。当然,我思维也烂得要死,对这点没什么发言权,大家可以鄙视我。

    我这里想主要说下第2点。

    对于算法,我发现,很多我们这样的弱校ACMer选手没有侧重好算法的学习。
    下面要讲的几点,可能都很老套,但我想以035对比我自己的例子给大家做说明。

    <1>算法学习是ACM比赛所要推广或者要提倡的一个方面
    记得曾经路过某人的blog,上面说他作比赛的时候遇到了一个dijkstra,他没做出来,然后评论到(大意):我才不会花时间去搞明白“这种”算法。

    “这种”也许有可能是指:没什么实用性,对吧,这样我就不想评论了(又是有关科学和工程的讨论)。

    但起码有一点需要明确的:ACM-ICPC比赛时关于计算机科学的比赛,计算机科学是算法的科学,计算机算法中dijkstra有着重要的实际和启发意义,所以比赛一定要考。
    你参加这个比赛,要拿奖,就必须学习这种算法。你也许觉得你智商很高,但ACM-ICPC比赛本身不是智力比赛,比赛就是要让你去学习这些东西,所以,如果你不想学的话,我觉得也没有必要参加。

    说道这,可能偏题有点远,但是希望以上的分析能得出这样一个基础结论:不想学好算法,那没有必要来比赛。

    <2>用模板是不好的
    现在很多我们弱校的ACM-ICPC选手比较依赖模板,说实话,我也很依赖,但是我起码知道一点,这样是不对的,某种意义上说,这是你没有把算法学明白的一种表现。而且也严重影响编码速度

    在我见过的huicpc035参加过的比赛中,他从来没有看过模板,全部现场敲,有一次比赛有个图强连通分量+缩点+染色+什么的题去了,我在他们机房做,我则抄模板,结果总共敲了1个半小时,而035明确算法之后,啪啦啪啦,估计30多分钟就敲完了。这里顺便八卦一下他:我和kevin以前去湖大集训队玩的时候,给他取了个外号——打字猛男(他应该还不知道)。因为他敲键盘的声音特别大特别快,呵呵。

    我觉得他敲代码的时间没有浪费,某牛曾说:因为每次敲都有可能有不同的错误,所以不用模板是好习惯。我最开始学dancing link的的时候,自己敲出了代码,然后接下来的几道题部分参考了以前的代码,后来基本上是直接copy。现在,当别人问我dancing link算法或有关的题目的时候,我已经是一脸茫然。

    所以,用模板是不好的,有时候由于某些原因可能你用了模板,但你起码要知道这要做是不对的,并且有机会要改正。

    <3>需要深入学习
    像ACRush、zzy、ahyangyi...等等国家队的天才们,本身难以说我们与他们之间有什么可比性。但是他们的学习方法应该还是值得借鉴的,他们的学习方法当然我们得不到言传身教,但是从他们在国家队集训的论文中和他们搞完ACM-ICPC以后的轨迹中,可以有所体现。那就是:深入学习。

    其实这点我来讲可能还是不够有力,因为我这方面也很欠缺,我尽量说下我的想法。

    首先,觉得ACMer学算法不应停留在看看代码实现这个层面,在算法思想上要有清醒的认识,在正确性分析上要也应该要有较好的逻辑。因为网上的代码的实现上的一些细枝末节很可能掩盖了算法本身有的简洁性、美感和思想。因而丧失了对算法整体上的一些认识。还拿dijkstra算法打比方,有些算法不是基于dijskstra的直接建模,而是需要你修改这个算法,这时你对算法没有真正理解的话,也就一筹莫展了。

    我为什么老说Dijkstra算法,因为确实很多人都只知道用模板,而且模板还不好,在我看到的Dijkstra实现中,只有czyuan_acm的代码写得好。不是说其他的不对,但确实是有问题,投机取巧了的。

    所以,要阅读论文和书籍,尤其与英文书籍,窥到它的本质。另一方面,只有这样,你学的的东西才能在ACM-ICPC以外,给你一定的启发——否则你会迅速忘掉它的。

    据我所知,035起码阅读了几十篇集训队论文,orzorzorz,而且切掉了例题。

    <4>独立思考
    这点我也很惭愧,因为我也是缺乏独立思考的。很多题我不会了就去搜解题报告,所以反而我的搜资料能力变得特别强。

    035和许多大牛在这点上做的比我好多了,他们遇到题不会的时候,也不会很急于把题目做出来,可能每隔一段时间又拿出来想一次,总有一天想通了,之后这一类型的题目基本上也就没有什么问题了。

    而我恰恰比较“虚荣”,做到的题目不会不太愿意想太久,就想尽量快些AC,于是急于看解题报告,这样导致的一个问题就是有些重要的东西解题报告中没有提到,而我也没去想就把他们忽略了,这样,我还是不会做。

    我和035讨论问题的时候,我不会一般就直接找他要代码,但是他不懂的时候,顶多问我大体的思路,而绝对不会要代码的。

    在去年ACM赛区尾声的时候,我发现035做中难题的能力已经明显超过我一个档次。看他现在做的题目,已然是相当变态,几乎是都100以下人ac,这些题目我看了基本上没什么想法,更要命的时,解题报告也搜不到。

    035目前的状态让我想起一个人,不知道大家知道不:wangfangbob,他切bt题的能力也是令人汗颜的。

    <5>做有意义的题
    1是不要做水题,这里的水题定义为:一眼就能看出做法,而且中途的实现可以预计没有太多问题的题目。
    2是做能够强化你最近学到的东西的题目
    3你不会但你应该会的题目。
    这同时也是在说,某些没太多代表性的题目可以少做,因为对比赛帮助不大。(当然我这个参加比赛的目的很功利,非功利主义者另当别论)

    刚才,我把我在poj上的号和他的号对比了下,他ac而我没ac的基本上是难题,我ac他没ac的一般是水题,看得我想哭,5555。

    补充一点:ac的人多的并不一定代表着水题,有些几千人ac的题目,在现场赛中ac的人很少,这样的题目往往是有一定思维难度且编码不难的好题,这种题目要认真做,某个学长说:经典的题目啊,只有那么多,做一道,就少一道。

    <6>估算好某种训练所需要的时间

    我觉得我学网络流就是一个例子,我在大概赛区赛之前2个月开始学习网络流,1个月前开始学习费用流,但是对于我来讲,这两个月培养出来的网络流思维还是不够(虽然也做了不少题),特别是,这种题目往往作为中难的题目出现,不会让你随便水的,于是,北京赛区的那道网络流当时就没有想出来——功利地说,学习网络流没有得到好的效果。

    所以,现在来看,当时其实我可以不搞网络流。如果要学一种比较有难度的东西,并且还必须把他搞好,应该较早地,全面地学习,必须长期的训练以培养这种思维。打个比方,如果你微积分平时不学,仅仅考试前一周狂做题目,我觉得上90分是很困难的。
    当然,这要根据个人情况而定,我的理解能力应该说是中等水平,如果牛的话应该可以更快地学好。

    <7>有关训练的度
    我有时候通宵刷体,这里我不知道huicpc035有没有这个习惯,不过我通宵的时候没见到他通宵。
    我觉得其实通宵刷体,或者太长时间地做题,还是不好的。我们为什么会这样有热情的做题呢,因为我们有兴趣;但是一个人的成功不仅仅依赖于兴趣,还要依赖于自控。这和打游戏是一个道理,游戏太有趣以至于我们常常通宵——ICPC题目也太有趣,所以有时候通宵。而且很多时候是,由于一道题AC不掉,所以赌气一定要搞定才睡觉,这样一不小心,就通宵了。
    其实我明白,通宵不一定效果好,这仅仅说明了你兴趣很高涨而已。通宵往往会打乱你的时间安排,打乱你的生物钟,进而影响你短期或是中期的训练计划。而且,疲惫的状态下做题,你往往只有ac题目的欲望,而完全丧失了ac题目的灵气。所以,我建议,ACMer一定要合理安排作息,能够自控,这样不仅仅对你做ACM-ICPC有好处。


    总之,有效训练是很重要,只有通过有效的训练你才能获得你参加这个比赛应得的东西。

    还有就是,除了035以外,另一个值得大家学习的就是richardxx——我也很佩服,我并不觉得他是天才,我觉得他以全方位的努力让他自己变得优秀,大家看他的blog可以看到他的学习历程。

    最后要说下刻苦训练这一点,这个我主要想说给我们学校的acm队员:
    客观的说,我们学校很多名校落榜生(我相比而言是水进的)。确实都蛮聪明的,但再聪明也比不上ACRush吧?人家可是SGU都切满了!ACM不是智力测试,不是你什么都不做就可以天上掉馅饼的。

    当然我不是说题目一定要做多少多少道,但如果你觉得你可以一心二用,从概率上来讲,你百分之九十地错了,我是个工科生,我相信概率而非奇迹

    我觉得035这方面也是值得我们学习的,我比较喜欢扯淡,有时候聊题目的时候也经常不小心就去扯其他话题去了,在学习的时候,035是坚决不多聊乱七八糟的东西的,除了讨论上QQ,平时据我观察都是残酷地训练。现在回想起来,我有点后悔,QQ上和网上花掉的时间用来学习新的东西,也许结果会更好。

    ACM-ICPC绝不是大学生活的全部,也不是搞算法的全部,你大可以花时间去做其他研究,做项目,或者参加学生工作(我更欣赏那些对人生和职业有良好规划的ACMer);但是,如果你搞ICPC的那段时间你不是全部投入,那的在ACM-ICPC生涯中,将只有后悔。

    前几一段时间宁波理工大学举行了邀请赛,huicpc035和他的footman拿到的金奖,在这里先祝贺他,也祝福他今年有更大的突破。

    然后,不管以后035是否拿到了更好的成绩,我觉得,对于我们来说,都应该像他学习,做ACM题当如次,做ACMer当如此。

     

     

    附带另一篇日志.

              

     

                                   

    生命中的最后一天
    2011-04-15 22:47

     

    前些日子惊闻dsh的噩耗,是在网友的BLOG上看到的。当时我就笑了,怎么可能呢,愚人节还没过完么。不过仔细想想貌似有个把月没联系了, CALL之,但电话那头已经关机了。这时我就笑不出来了。后来从他同学那里得到消息,确实是几个月前查出肝癌晚期,几天前走了。还是不敢相信,精力如此旺盛的人,居然说走就走了。天妒奇才,尚未扬名立万而先逝,甚至连一篇讣告都没有。

     

           dsh生长于单亲家庭,母亲做项目,经常应酬,也许是这样塑造了他喜欢宁静、独处的性格。不得不承认,他是一个天才,真正的天才。初中就在理科方面显出了过人的天份。升入高中后,由于不喜欢教条的科目,他几乎没上过课。直到高考时他才有点“后悔”,但拥有过人天份的他依然不费吹灰之力就考上了某重点一本大学。

     

    我们往往被理想的世界欺骗,直到亲自去做的时候才理解现实。

     

        上了几年大学才明白为什么要考北大清华,可即使你在北大清华你也会这么认为:资源总是太少、视野还是太窄、时间永远不够。因为你本身就是个跟时间赛跑的人。

     

        上了大学后的他依然故我。每天研究最艰深的算法题,每个stats上都能看到dsh的大号小号。软件学院的他没有在一开始就得到教练的亲睐。甚至软件学院的老师把他从寝室拉出来告诉他,做软件靠的是拉项目和各种应酬。他不喜欢每天上课还要刷指纹的禁锢,看自己喜欢的论文,啃那些别人永远看不懂的书。

     

    你可以控制一个人的行为,但永远不能控制一个人的思想。

     

        母亲来看你,给你带了很多零食,可你狠心的将它们全都扔了下去;亲人喊你吃饭,你却依然待在电脑前写程序;妹妹跟你同校,但你却不知道小盆友们需要你的照顾。你像自私的葛朗台吝啬你的每一分情感,像一个极端自私的人。你说你要去美国,你说你要像先贤一样一辈子单身…

     

        还记得那时一起刷题,一起讨论,一起看《金田一少年事件簿》《最后的武士》,仿佛就是昨天。那年暑假,我们一起coding,你总是能想到别人想不到的算法,甚至连命题人都从来没有想到(比如北京赛区的那题destory bus station。你常常跟我提起年少时的经历使你讨厌数学,现在后悔当时没有好好学。后来有天你很激动地告诉我你做出了calculate trees那题我就知道你已经突破了内心的魔障。还记得那天夜里大家讨论各自的追求,你说了一句让我们震惊的话。是的,我从来没想过一个从来没有失败过的人是什么样的。这一刻我才真正认识到一个追求永恒不败的境界的人。

     

        你不是为奖牌而ACM。现在许多ACMer认为有了奖牌就等于有了好工作,或者保研的资本。你参加比赛从来都是以切掉最难的别人都做不出来的那道题为目标,因此你也丢了夺金的机会。大家做ACM的初衷是什么?对菜鸟来说是学习一些算法,对牛儿来说是领悟算法背后的哲学思想,对大神来说是去赛场show一下。对自己来说,学到东西、玩得快乐才是最重要的。在我看来,你仿佛天生就是为了解决类似于NP!=P这样终极问题的人。

     

        几个月前,我们聊了聊近况,你说你在啃傅立叶,你说你有看不完的论文,你还跟我说了许多出国留学的好处。你即将踏上你的留学之旅—纽约大学。纽约,多么美丽的城市,那里是全世界最繁华的城市之一、那里有华尔街、那里有全世界的智者贤才、那里有自由女神。据说你就是那时候查出的肝癌晚期,但你依然强势。你把QQ签名改成了“申请高峰期,请理解下”,我知道你又埋书堆了,就没敢打扰。不久前,你又在后面加了一句“看样子必须说再见了,我会想你们的”。我还以为你启程去美国了,却没想到这竟是最后的诀别!

     

    一个人只有当他获得应有的社会地位时,他的才能发挥出来。

     

        你说我贪玩,我说你太偏执。现在我终于理解了你的偏执。各种不幸的经历让你讨厌命运之神。你知道你还在跟死神赛跑,但是你有你的梦想,你知道片刻都不能耽误。所以你很果断地行动,即使是高烧40度依然在月赛冲进前十。你的灵魂或许已经去大洋彼岸继续追逐你的大师之路了吧。

     

    只有勇于面对死亡仍然不放弃梦想的人才是真正的武士,这就是武士道的精神。

     

        斯人去矣,群里常有只言片语的惋惜,大多数人只知道huicpc035。但他们不知道,你不喜欢这个名字,所以朋友们都叫你dsh,因为这是你的本名,是真正的自己。我们不应该只在记忆的碎片中怀念。故以此文:纪念那个逝去的友谊,纪念一个永恒的精神,纪念一个不灭的梦想,纪念一个勇于和命运抗争的斗士—杜思翰。

     

    *把每一天都当成生命中的最后一天,你就会轻松自在。

    *每天早上洗脸时,请在镜子前问自己:如果今天是此生最后一日,我今天要干些什么?

    *永远不要放弃梦想,即使是生命中的最后一秒。

    *珍惜生命,珍惜现在,因为它可以很短暂,它离开无预兆。


    展开全文
  • # 设计一个函数传入年月日返回这一天是这一年的第几天 def is_leap_year(year): return year % 4 == 0 and year % 100 != 0 or year % 400 == 0 # 2018 1 1 --&gt; 1 # 2016 3 1 --&gt;61 # 1980 11 28 --...
  • 说多了没意思,直接送上公式。 W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D Y:年 (年份后两位数) D:是这个日子在这一年中的累积天数 求出W后,在对7
  • 公历一年有十二个月,但不少人并不知道十二个月的英语名称的来历。... January——月 ——在罗马传说,有位名叫雅努斯的守护神,生有前后两副脸,副回顾过去,副眺望未来。人们认为选择他的名字
  • 写在冬日的第一天--一个女程序员第七工作总结

    万次阅读 多人点赞 2011-11-07 02:10:11
    如果在感情每年作份总结,是不是就不会有传说的坎儿。 我所在的公司不大,地方也不大。见识不广,深度不够,太多的随遇而安让我的工作这么多年都起伏不大,必须承认我骨子里就是个吃货和懒鬼。这篇文章仅仅是...
  • 个毕业一年程序员的感悟

    千次阅读 多人点赞 2018-07-22 00:01:04
    段看到朋友圈里的学弟学妹们开始晒毕业照,这一晃据我毕业也一年多了。走出了校园,工作了一年,见得多了,体会和感触也随之变多。所以,又开始习惯性地复盘过去的段经历,用现在不成熟的想法去回顾之前更不...
  • 一天,与计算机视觉顶会 CVPR 2017 同期举行的 Workshop——“超越 ILSVRC”(Beyond ImageNet Large Scale Visual Recogition Challenge),将宣布计算机视觉乃至整个人工智能发展史上的里程碑——IamgeNet ...
  • 写在冬日的第一天--一个女程序员第六工作总结

    万次阅读 热门讨论 2010-11-07 02:54:00
    工作这些,年年雷打不动一篇总结让初初参加工作的这一天刻在我的脑海。到现在我已经记不得恋爱纪念日了,却依然知道在冬天到来的第一天敲下过去一年工作的点点滴滴。   似乎在每个总结开篇都会说,我...
  • 如何计算某一天是星期几

    千次阅读 2014-09-22 15:45:12
    时间创世纪,第七休息,所以人们也就以七个周期来安排自己的工作和生  活,而星期日是休息日。从实际的角度来讲,以七个周期,长短也比较合适。所  以尽管中国的传统工作周期是十(比如王勃...
  • 确切地说我的产假开始于生产前一天,除了那种从岗位直接到产房的人我算是相当晚的了。肚子比较给力没有大到让我开不了车的程度,于是就一直上班,总比在家无聊要好。 还是那句话,我在小地方,小单位,属于...
  • 工作一年反思

    千次阅读 2019-07-07 10:37:58
    之前也确实没有过写总结的习惯,借着这两是工作日子,对去年的工作进行总结,希望能养成个对自己总结和复盘的习惯。 心理——重新认识自我         如果说用句话来总结在心理层面...
  • 计算任意一天是星期几的问题

    千次阅读 2012-09-12 17:25:10
    时间创世纪,第七休息,所以人们也就以七个周期来安排自己的工作和生  活,而星期日是休息日。从实际的角度来讲,以七个周期,长短也比较合适。所  以尽管中国的传统工作周期是十(比如王勃...
  • 冬天又到了啊,十二就这么过去了….  在技术上去年最大的进步就是可以把MVC写进简历里面了。有个面试题是让我做个MVC小东西,其实面试的主题是内部的运算逻辑,不过就是用MVC的形式表现出来而已。我通过把这个小...
  • 写在冬日的第一天--一个女程序员第八工作总结

    千次阅读 热门讨论 2012-11-08 03:23:48
    今年的冬天似乎来得特别早。...再加上自己的懒散,我其实就是个在井底的蛤蟆,看着头顶那一片还挺乐呵。这篇文章就是对自己过去一年的总结,对于有理想有冲劲的青年全当是反面教材。另外我现在
  • 一天到晚只会抱怨的人必定是不成熟的人 一天到晚只会抱怨的人,必定是不成熟的人   教你怎样做个会说话会办事的人! 一、社会不会等待你成长 在这个人才济济的时代,社会根本就没有功夫和耐心慢慢培养你。...
  • 版权归作者所有,任何形式转载请联系作者。...真的那些在个公司死磕了5-10的人真的非常少数。 陀思妥耶夫斯基也说:凡是新的事情在起头总是这样一来的,起初热心的人很多,而不久就冷淡下去,撒手不
  • 毕业一年小结——说好的战斗呢?

    千次阅读 多人点赞 2015-12-31 10:22:53
    引子:20157月3号是自己工作整一年的日子。一直想写篇文章,对这一年做一下总结。这篇文章在今年7月3号左右的时候是已经写出来了的,但是自己在反复读了几遍以后感觉写的不是怎么的好,就想着要再修改修改。之后...
  • 写在冬日的第一天--一个女程序员第四工作总结

    万次阅读 热门讨论 2008-11-08 04:14:00
    时光如水,岁月如梭快乐的时间总是短暂的,今年过得很快 工作四了,保持着每年写份总结的习惯。我很希望总结有个醒目的名字,比如从xx到XX,或者薪水从yyyy到YYYYY这样。可惜什么都没有,我的职位依然是软件...
  • 其中D是这个日子在这一年中的累积天数。算出来的W就是公元前1年(或公元0年)12月31日到这一天之间的间隔日数。把W用7除,余数是几,这一天就是星期几。比如我们来算2004年5月1日:  W = (2004-1)*365 + [(2004-1)/...
  • 写在冬日的第一天--一个女程序员第五工作总结

    万次阅读 热门讨论 2009-11-08 20:11:00
    每次转组的前一天我都会发邮件给各个组员,希望 J 和 Z 能够抽出一点点时间在我转组前碰个面,更新一下情况。邮件我还要询问一下需要的数据,文件准备的程度。我不希望转组后不能马上开展工作而影响工程进度。...
  • 悼高华——最后日子

    千次阅读 2012-01-14 15:03:27
    悼高华——最后日子 http://www.indaa.com.cn 2011-12-29 来源:新京报  编者按:历史学者高华本周去世,学界一片哀思之音。在此,我们特别约请高华逝世前长期交往的历史学者范泓,再现高华去世之前的最后...
  • 嗷,五了,我终于换了人生的第台MacBookPro

    万次阅读 多人点赞 2020-07-18 16:15:37
    本文已经收录于个人GitHub仓库:https://github.com/mmdapl/JavaScriptCollection ,请勿随便转载或商用 ...那,当我下班拿到顺丰给我邮过来的快递,就在B站下发了个动态,让大家猜一下是什么...
  • 不查日历怎么知道任何一天是星期几作者:刘夙 2004-5-2 1:53:20 博客中国(Blogchina.com) 文/葛民勤---------------------------------------------------------------------------摘要: 最常见的公式:W = [Y...
  • [葛勤民]怎样计算任一天是星期几

    千次阅读 2006-10-06 00:46:00
    据说因为《圣经·创世纪》规定上帝用了六时间创世纪,第七休息,所以人们也就以七个周期来安排自己的工作和生活,而星期日是休息日。从实际的角度来讲,以七个周期,长短也比较合适。所以尽管中国...
  • 火热报名:http://www.huodongxing.com/event/1412766276700 如果我可以给每个工程教育增加一门课,它不会涉及编译器、门电路或是时间复杂度,而是一门介绍行业现实的入门课,因为没人教过这些,所以我们...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,640
精华内容 21,456
关键字:

一年中的最后一天是什么日子