北理工2018年推免上机考试
1.在日常生活中,我们常常听到这样的话:“X年是自Y年以来降水量最大的一年”,这句话的含义是,X年的降水量不超过Y年,并且对于任意的Y<Z<X,Z年的降水量严格小于X年。
给定一些年份和对应年份的降水量,其中年份是严格递增的,并且给出需要的X年和Y年,对于命题“X年是自Y年以来降水量最大的一年”可能出现三种情况:正确、错误或者存疑,其中“存疑”表示给定数据中存在一些年份的降水量未知,无法判定
第1行给出一个数字n,表示现有的年份及降水量数据个数
第2~n+1行给出年份及降水量,以空格隔开
第n+2行给出测试数据组数
对于每一组,给出年份Y和X,判定命题是否成立,正确输出“true”,错误输出“false”,存疑输出“maybe”
输入示例
5 2001 13 2002 19 2003 17 2004 16 2005 18 1 2002 2005
输出示例
true
AC代码
#include<iostream> #include<cstring> using namespace std; int a[2000]; int main() { int n; cin>>n; memset(a,-1,sizeof(a));//初始化为1 int fy, y;//first year和year cin>>fy>>a[0];//第一年年份和降水量 for(int i=1;i<n;i++) { int y; int drop; cin>>y>>drop; a[y-fy]=drop; } int T;//测试数据组数 int Y,X; cin>>T; while(T--) { cin>>Y>>X; Y=Y-fy; X=X-fy; int flag=1, mflag=0;//是否正确,是否存疑 for(int i=Y+1;i<X;i++) { if(a[i]==-1)mflag=1; else if(a[i]>=a[X])flag=0; } if(flag&&!mflag)cout<<"true"<<endl; else if(!flag&&!mflag)cout<<"false"<<endl; else if(flag&&mflag)cout<<"maybe"<<endl; } return 0; }
2. 对于一些字符串,它总是可以被看成是由自己的某一个子串顺序重复若干次得到的,其中子串是严格小于它本身的,对于给定的字符串,求能重复构成它本身的最小子串。输入一个长度不大于50的字符串,输出重复构成它的最小字串,如果没有,则输出“false”
poj2406 解题思路:设子串长度为i,重复n/i份,n是原字符串长度,比较重复后的字符串与原字符串是否相等。
#include<iostream> #include<string> using namespace std; int main() { string s; cin>>s; int n=s.size(),ans; for(int i=1;i<n;i++)//i是重复子串长度 { string str="", ss=""; if(n%i==0) { for(int j=0;j<i;j++)str+=s[j]; for(int j=0;j<n/i;j++)ss+=str; if(ss==s) { cout<<str<<endl; return 0; } } } cout<<"false"<<endl; return 0; }

浙公网安备 33010602011771号