2015编程之美资格赛
三道水题了。
题目1 : 2月29日
时间限制:2000ms
单点时限:1000ms
内存限制:256MB
描述
给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期)。
只有闰年有2月29日,满足以下一个条件的年份为闰年:
1. 年份能被4整除但不能被100整除
2. 年份能被400整除
输入
第一行为一个整数T,表示数据组数。
之后每组数据包含两行。每一行格式为"month day, year",表示一个日期。month为{"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November" , "December"}中的一个字符串。day与year为两个数字。
数据保证给定的日期合法且第一个日期早于或等于第二个日期。
输出
对于每组数据输出一行,形如"Case #X: Y"。X为数据组数,从1开始,Y为答案。
数据范围
1 ≤ T ≤ 550
小数据:
2000 ≤ year ≤ 3000
大数据:
2000 ≤ year ≤ 2×109
- 样例输入
-
4 January 12, 2012 March 19, 2012 August 12, 2899 August 12, 2901 August 12, 2000 August 12, 2005 February 29, 2004 February 29, 2012
- 样例输出
-
Case #1: 1 Case #2: 0 Case #3: 1 Case #4: 3
水题了,不用解释。#include <iostream> #include <cstring> #include <string.h> #include <cstdio> using namespace std; int findx(char *s){ if(strcmp(s,"January")==0) return 1; else if(strcmp(s,"February")==0) return 2; else if(strcmp(s,"March")==0) return 3; else if(strcmp(s,"April")==0) return 4; else if(strcmp(s,"May")==0) return 5; else if(strcmp(s,"June")==0) return 6; else if(strcmp(s,"July")==0) return 7; else if(strcmp(s,"August")==0) return 8; else if(strcmp(s,"September")==0) return 9; else if(strcmp(s,"October")==0) return 10; else if(strcmp(s,"November")==0) return 11; else return 12; } int main(){ char str[15]; int day,year; int icase=0,T,pre,now,ans; scanf("%d",&T); while(T--){ ans=0; scanf("%s%d, %d",str,&day,&year); int m=findx(str); pre=year; if(m<2) pre--; else if(m==2){ if(day<=29) pre--; } scanf("%s%d, %d",str,&day,&year); now=year; m=findx(str); now=year; if(m<2) now--; else if(m==2&&day<29) now--; int f4n1001=pre/4-pre/100; int f4n1002=now/4-now/100; ans=f4n1002-f4n1001; int f4001=pre/400; int f4002=now/400; ans+=(f4002-f4001); printf("Case #%d: %d\n",++icase,ans); } return 0; }
题目2 : 回文字符序列
时间限制:2000ms单点时限:1000ms内存限制:256MB描述
给定字符串,求它的回文子序列个数。回文子序列反转字符顺序后仍然与原序列相同。例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个。内容相同位置不同的子序列算不同的子序列。
输入
第一行一个整数T,表示数据组数。之后是T组数据,每组数据为一行字符串。
输出
对于每组数据输出一行,格式为"Case #X: Y",X代表数据编号(从1开始),Y为答案。答案对100007取模。
数据范围
1 ≤ T ≤ 30
小数据
字符串长度 ≤ 25
大数据
字符串长度 ≤ 1000
- 样例输入
-
5 aba abcbaddabcba 12111112351121 ccccccc fdadfa
- 样例输出
-
Case #1: 5 Case #2: 277 Case #3: 1333 Case #4: 127 Case #5: 17