北邮新生排位赛1解题报告a-c
<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+1上题目描述
趁着放假,学姐去学车好带学弟去兜风。但是学车真的很辛苦,每天五点半就要起床赶班车,但是学姐的教练更辛苦,他们要相同的时间到而且日日如此。于是温柔的学姐关切的问了他们的休息情况,教练告诉她,他们两个人倒班教学姐,每个教练每上
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
int
main()
{
int
t;
cin>>t;
while
(t--){
int
n,m;
cin>>n>>m;
int
q;
cin>>q;
int
temp;
while
(q--){
cin>>temp;
temp--;
if
(temp<n){
cout<<1<<endl;
}
else
{
temp-=n;
temp%=(n+1);
if
(temp<m){
cout<<2<<endl;
}
else
cout<<1<<endl;
}
}
}
return
0;
}
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; }