您的位置:首页 > 其它

北邮新生排位赛1解题报告a-c

2014-07-17 11:35 316 查看


<div class="page-header" style="padding-bottom: 9px; margin: 20px 0px 30px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;"><h1 style="margin: 10px 0px; font-family: inherit; line-height: 40px; color: inherit; text-rendering: optimizelegibility; font-size: 31.5px;">
</h1></div>

413. 学姐的桌面
时间限制 1000 ms 内存限制 65536 KB
题目描述
学姐在加入集训队之后,学习了使用ubuntu系统来做题,但是没有了360电脑管家,学姐再也没办法看到她的飞速电脑开机到底虐了全国多少人。作为一个电脑高手,学姐花了几分钟黑到了360的数据库拿到了全国360用户的开机时间,现在学姐想自己算算到底打败了百分之多少的人?

输入格式
输入有多组数据。首先给出数据组数T(T≤10),下面T组数据,每组开头为n(1≤n≤100000),360的用户数,和t,学姐的开机时间,接下来n个数字,ti代表第i个用户的开机时间。其中t,ti为非负整数且小于109。

输出格式
每组数据一行,输出学姐打败了全国百分之多少的用户,精确到小数点后两位。

输入样例
1
5 3
1 1 2 2 3
输出样例
80.00%

不吐槽学姐开机时间越长越虐人了,注意等号

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
int t;
cin>>t;
while(t--){
int n,m;
cin>>n>>m;
int temp;
int ans=0;
for(int i=0;i<n;i++){
cin>>temp;
if(temp<m){
ans++;
}
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<ans/(double)n*100<<"%\n";
}
return 0;
}

B. 学姐去学车 2014新生暑假个人排位赛01

时间限制 1000 ms 内存限制 65536 KB

题目描述

趁着放假,学姐去学车好带学弟去兜风。但是学车真的很辛苦,每天五点半就要起床赶班车,但是学姐的教练更辛苦,他们要相同的时间到而且日日如此。于是温柔的学姐关切的问了他们的休息情况,教练告诉她,他们两个人倒班教学姐,每个教练每上n天班就会放一天假,如果一个教练放假,就由另一个教练来代课,一直代课到自己放假再换人。 现在学姐想知道,每一天是哪个教练给她上课。

输入格式

输入开始为数据组数T(T≤10),接下来T组输入,第一行为n,m,我们假设第一天教学姐的是教练1,而且他教学姐的前一天刚刚放完假,教练2则会在学姐上课的第m天放假,1≤m≤n 以保证每天都有教练教学姐。接下一行为q(q≤103),即询问次数,接着q行,每行ti表示学姐想问哪天的教练是谁。因为教练们非常非常厉害,而且学姐不知道自己到底会花多久学完车,你的程序要处理的n,m,ti上限为109。

输出格式

对于每个询问ti,输出一行,1或2代表当天的教练。

输入样例

1
5 3
3
6
9
13

输出样例

2
1
2
错了两次 卡在周期其实是n+1上

[/code]
C:

C. 学姐的学弟 2014新生暑假个人排位赛01

时间限制 1000 ms 内存限制 65536 KB

题目描述

学姐正在写作业,但是她写着写着就开始想学弟,走神的她就开始在纸上画圈圈。这时学弟突然出现了,好奇的学弟问学姐在做什么,惊慌之下,学姐随口说想算一下这些圆覆盖的面积为多少。学弟顿时非常仰慕学姐,但是学姐突然意识到自己不会做,为了自己能给学弟留下好印象,她来求助你帮她算出来这些圆覆盖的面积。
为了简化问题,我们假设所有圆的半径都为1。

输入格式

输入有多组数据。开头为一个整数T(T≤10),表示数据组数,接下来T组输入,每组开头为一个整数n(1≤n≤100),表示学姐画的圆的个数,接下来n行,每行两个整数xi,yi,表示圆的圆心坐标,1≤xi,yi≤100。

输出格式

输出一个数,表示面积并,精确到小数点后五位。

输入样例

1
2
1 1
2 1

输出样例

5.05482
这道题小学奥赛曾经写过类似的,当然不是程序.....但是排位赛的时候怎么想不到呢...
思路:因为都是整数,半径又是1,所以对任意一个坐标格,只有3种可能,恰有两个圆心在对角,完全覆盖,恰有两个圆心在同侧,卡高精度,恰有一个圆心,扇形,最后第四种 空的

#include <iostream>
#include <cmath>
#include <iomanip>
#include <cstring>
using namespace std;
#define pie (acos(-1))
bool circle[102][102];
int allfull;
int doublefull;
int halffull;
int main(){
int t;
cin>>t;
while(t--){
memset(circle,0,sizeof(circle));
int n;
cin>>n;
while(n--){
int x,y;
cin>>x>>y;
circle[x][y]=true;
}
allfull=0;
doublefull=0;
halffull=0;
for(int i=0;i<102;i++){
for(int j=0;j<102;j++){
if(j-1>=0&&circle[i][j-1]&&i+1<102&&circle[i+1][j])allfull++;
else if(i+1<102&&j-1>=0&&circle[i][j]&&circle[i+1][j-1]){
allfull++;
}
else if(i+1<101&&circle[i][j]&&circle[i+1][j]){
doublefull++;
}
else if(j-1>=0&&circle[i][j]&&circle[i][j-1]){
doublefull++;
}
else if(i+1<102&&j-1>=0&&circle[i+1][j]&&circle[i+1][j-1]){
doublefull++;
}
else if(i+1<102&&j-1>=0&&circle[i][j-1]&&circle[i+1][j-1]){
doublefull++;
}
else if(circle[i][j]){
halffull++;
}
else if(i+1<102&&j-1>=0&&circle[i+1][j-1]){
halffull++;
}
else if(i+1<102&&circle[i+1][j]){
halffull++;
}
else if(j-1>=0&&circle[i][j-1]){
halffull++;
}
}
}
//  cout<<"allfull: "<<allfull<<endl;
//  cout<<"halffull: "<<halffull<<endl;
//  cout<<"doublefull: "<<doublefull<<endl;
//cout<<"pie: "<<pie<<endl;
double ans=allfull*1.0+(halffull*3.0+doublefull*2.0)*pie/12.0+doublefull*sqrt(3)/4.0;
cout<<setiosflags(ios::fixed)<<setprecision(5)<<ans<<endl;
}
return 0;
}

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: