新生排位赛第一场 dp 大数处理与模板
第一场的D题已经单独列出,C题我来不及做了,可能以后会补上第一题本题要注意的就是两点输出? %---------------"%%";输出? ----------""? 输出? "------------------"""A. 学姐的桌面 2014新生暑假个人排位赛01
时间限制 1000 ms
内存限制65536 KB
题目描述学姐在加入集训队之后,学习了使用ubuntu系统来做题,但是没有了360电脑管家,学姐再也没办法看到她的飞速电脑开机到底虐了全国多少人。作为一个电脑高手,学姐花了几分钟黑到了360的数据库拿到了全国360用户的开机时间,现在学姐想自己算算到底打败了百分之多少的人? 输入格式输入有多组数据。首先给出数据组数
输出格式每组数据一行,输出学姐打败了全国百分之多少的用户,精确到小数点后两位。 输入样例1 5 3 1 1 2 2 3 输出样例80.00%
#include <iostream> #include <cstdio> #include <string.h> #include <vector> #include<cmath> using namespace std; int ats[100005]; int main() { int T; scanf("%d",&T); while (T--) { int n,t; int cnum,ccout=0; float ans; scanf("%d %d",&n,&t); for (int i=0; i<n; i++) { scanf("%d",&cnum); if (cnum<t) ccout++; } ans = ccout*100.0/n; printf("%.2f%%n",ans); } return 0; }
第二题、有的人不喜欢简单题,可是我觉得简单题做对了也不容易这道题需要仔细考虑一下,其实是有规律的,时间有个周期,想仔细了,就会好一些
B. 学姐去学车 2014新生暑假个人排位赛01
时间限制 1000 ms内存限制65536 KB
题目描述趁着放假,学姐去学车好带学弟去兜风。但是学车真的很辛苦,每天五点半就要起床赶班车,但是学姐的教练更辛苦,他们要相同的时间到而且日日如此。于是温柔的学姐关切的问了他们的休息情况,教练告诉她,他们两个人倒班教学姐,每个教练每上
输入格式输入开始为数据组数
输出格式对于每个询问
输入样例1 5 3 3 6 9 13
输出样例2 1 2
第三题 没做,当时比赛时题目看错了,每个坐标点都是整数,所以还是有规律,至少可以分情况讨论的C. 学姐的学弟 2014新生暑假个人排位赛01
时间限制 1000 ms
内存限制65536 KB
题目描述学姐正在写作业,但是她写着写着就开始想学弟,走神的她就开始在纸上画圈圈。这时学弟突然出现了,好奇的学弟问学姐在做什么,惊慌之下,学姐随口说想算一下这些圆覆盖的面积为多少。学弟顿时非常仰慕学姐,但是学姐突然意识到自己不会做,为了自己能给学弟留下好印象,她来求助你帮她算出来这些圆覆盖的面积。 输入格式输入有多组数据。开头为一个整数
输出格式输出一个数,表示面积并,精确到小数点后五位。 输入样例1 2 1 1 2 1 输出样例5.05482 第四题 详见单独解析第五题?? 这道题是一道好题,使用了dp的思想,并且用运用到了大数的知识//a[i][j],i 为数字个数,j为有不等关系的数字种类可取从1到i,1为全部相等,i为全部不等?//i个不同物品? 分成j堆 的组合情况的种数,因为是大数,所以用字符串表示或者用java??//a[i][j]=a[i-1][j-1]*j+a[i-1][j]*jE. 数的关系 2014新生暑假个人排位赛01
时间限制 5000 ms
内存限制65536 KB
题目描述用关系“<”和“=”将3个数A、B和C依序排列时有13种不同的序关系:
现在输入数字的个数,要求你给出上述关系的数目。 数的个数不大于100 输入格式多组数据,EOF结束 每行一个输入 输出格式对于每个输入,输出一行,即对应答案 输入样例3 输出样例13 #include <sstream> #include <iostream> #include <cstdio> #include <string.h> #include <cctype> #include <cstdlib> #include <cmath> #include <algorithm> using namespace std; inline int compare(string str1,string str2) { if(str1.size() > str2.size()) //长度长的整数大于长度小的整数 return 1; else if(str1.size() < str2.size()) return -1; else return str1.compare(str2); //若长度相等,从头到尾按位比较,compare函数:相等返回0,大于返回1,小于返回-1 } //高精度加法//str2.erase(0,1));erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符 string ADD_INT(string str1,string str2) { string str; //把两个整数对齐,短整数前面加0补齐 string::size_type l1,l2; int i; l1 = str1.size(); l2 = str2.size(); if(l1 < l2) { for(i = 1; i <= l2 - l1; i++) str1 = "0" + str1; } else { for(i = 1; i <= l1 - l2; i++) str2 = "0" + str2; } int int1 = 0,int2 = 0; //int2 记录进位 for(i = str1.size() - 1; i >= 0; i--) { int1 = (int(str1[i]) - 48 + int(str2[i]) - 48 + int2) % 10; //48 为 '0' 的ASCII 码 int2 = (int(str1[i]) - 48 + int(str2[i]) - 48 +int2) / 10; str = char(int1 + 48) + str; } if(int2 != 0) str = char(int2 + 48) + str; return str; } //高精度乘法 string MULTIPLY_INT(string str1,string str2) { int sign = 1; //sign 为符号位 string str; if(str1[0] == '-') { sign *= -1; str1 = str1.erase(0,1); } if(str2[0] == '-') { sign *= -1; str2 = str2.erase(0,1); } int i,j; string::size_type l1,l2; l1 = str1.size(); l2 = str2.size(); for(i = l2 - 1; i >= 0; i --) { //实现手工乘法 string tempstr; int int1 = 0,int2 = 0,int3 = int(str2[i]) - 48; if(int3 != 0) { for(j = 1; j <= (int)(l2 - 1 - i); j++) tempstr = "0" + tempstr; for(j = l1 - 1; j >= 0; j--) { int1 = (int3 * (int(str1[j]) - 48) + int2) % 10; int2 = (int3 * (int(str1[j]) - 48) + int2) / 10; tempstr = char(int1 + 48) + tempstr; } if(int2 != 0) tempstr = char(int2 + 48) + tempstr; } str = ADD_INT(str,tempstr); } //去除结果中的前导0 str.erase(0,str.find_first_not_of('0')); if(str.empty()) str = "0"; if((sign == -1) && (str[0] != '0')) str = "-" + str; return str; } int main() { int n; string sum[300],a[105][105]; //a[i][j],i为数字个数,j为有不等关系的数字个数可取从1到i,//i个不同数有j个有不等关系的组合情况的种数,用字符串表示 //a[i][j]=a[i-1][j-1]*j+a[i-1][j]*j string temp; temp = "0"; sum[0] = "0"; sum[1] = "1"; a[1][1] = "1"; for(int i=2;i<=100;i++) { for(int j=1; j<=i; j++) { string c = ADD_INT(a[i-1][j-1],a[i-1][j]); string d; ostringstream oss; oss<<j; d = oss.str(); a[i][j] = MULTIPLY_INT(c,d); //cout << i << " " << j << " a[i][j] " << a[i][j] << endl; sum[i] = ADD_INT(sum[i],a[i][j]); } //cout << i << " sum[i] " << sum[i] << endl; } while(scanf("%d",&n)!=EOF) { cout << sum[n] << endl; //printf("%sn",sum[n]); } return 0; }
??
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |