开始: 2024-06-02 14:30:00

20240602

结束: 2024-06-02 17:30:00
当前: 2025-06-12 05:25:12  类型:单人排位赛 状态:已经结束 

A-放音乐

#include<bits/stdc++.h>
using namespace std;
int n,a[1010],b[1010],sum;
int main()
{
cin>>n;
for(int i=0;i<n;++i)
{
cin>>a[i]>>b[i];
if(b[i]==1) sum+=a[i];
else sum+=10;
}
cout<<sum;
return 0;
}

B-龟兔赛跑

简单的数学题,乌龟可以先跑出xtx*t米,此时兔子醒了,它和乌龟的速度差为yxy-x,故xtyx\frac{x*t}{y-x}秒后,兔子将追上乌龟。乌龟在这段时间内还能走xtyxx\frac{x*t}{y-x}*x米,故如果总路程小于xt+xtyxxx*t+\frac{x*t}{y-x}*x米,乌龟就会赢。

注意我们输入的数据都是整数,但这里的除法应该是小数除法,最后得到的答案再向下取整。

#include<bits/stdc++.h>
using namespace std;
int main()
{
int x,y,t;
cin>>x>>y>>t;
int l=x*t;
cout<<l+int(1.0*l/(y-x)*x);
return 0;
}

C-男孩女孩

一个位置如果是b,或者这个位置的下一位是o,或者这个位置的下下一位是y,那么这里就是单词boy。同理可得单词girl的判断方式。

#include<bits/stdc++.h>
using namespace std;
int boy,girl,n;
string a;
int main()
{
cin>>a;
n=a.length();
for(int i=0; i<n-2; i++)
boy+=(a[i]=='b'||a[i+1]=='o'||a[i+2]=='y');
for(int i=0; i<n-3; i++)
girl+=(a[i]=='g'||a[i+1]=='i'||a[i+2]=='r'||a[i+3]=='l');
cout<<boy<<endl<<girl;
return 0;
}

D-求和

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
ll a, b, g;

int main()
{
cin>>n;
scanf("%lld/%lld", &a, &b);
//给第一个分数约分
g = __gcd(abs(a), b);
a = a/g;
b = b/g;

for(int i = 1; i < n; i++)
{
ll c,d;
scanf("%lld/%lld", &c, &d);
//给每次输入的分数约分
g = __gcd(abs(c), d);
c = c/g;
d = d/g;
//通分后再约分
a = a * d + c * b;
b = b * d;
g = __gcd(abs(a), b);
a = a/g;
b = b/g;
}

if(a<0) //如果是负数,先输出负号,再转为正数统一处理
{
cout<<'-';
a = -a;
}
if(a==0||a%b==0) cout<<a/b<<endl;
else if(a/b==0) cout<<a%b<<'/'<<b<<endl;
else cout<<a/b<<' '<<a%b<<'/'<<b<<endl;
return 0;
}

E-集合

这道题主要练习set的使用,因为需要维护集合的互异性,用set可以自动去重。

#include<bits/stdc++.h>
using namespace std;
set<int> s[55]; //集合的互异性用set来维护
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
for(int j=1;j<=x;j++)
{
int y;
cin>>y;
s[i].insert(y);
}
}
cin>>n;
for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;
int size1=s[x].size();
int size2=s[y].size();
int size3=0; //表示相同元素的个数
for(int tmp:s[x])
//这种写法的意思是遍历s[x]中的每个元素,当前遍历的元素取名为tmp
{
if(s[y].find(tmp)!=s[y].end()) size3++;
//在s[y]中用find函数找这个元素,如果没找到会返回.end()
}
printf("%.2lf\n",(double)size3/(double)(size1+size2-size3));
//两个集合中都存在的数的个数是分子
//两个集合中所有不相等的整数作为分母,用容斥原理计算
}
}