水题 直接求出和 比较大小就行了 不过这题我比赛时候很顺地写下来了 比赛完重新写的时候 又一直读错题目意思了 以为每个回合是扣自己的hp..好险 真的好险
#include<iostream>
int main()
{
using namespace std;
int a[5];
int b[5];
int sum1=0,sum2=0;
for(int i=0;i<5;++i)
{
cin>>a[i];
sum1+=a[i];
}
for(int i=0;i<5;++i)
{
cin>>b[i];
sum2+=b[i];
}
if(sum1>=sum2)
cout<<"Blue"<<endl;
else
cout<<"Red"<<endl;
}
题意:
给八个顶点,判断这八个顶点能否构成正方体
思路:
如果是一个正方体,我们从一个顶点出发,到其余七个顶点的距离分别是a,a,a,√2 a,√2 a,√2 a,√3 a,对于任意一个顶点出发,都会满足上述条件。
我们可以把七个线段距离先算出来,然后进行排序,再进行比较,这样进行八个循环(即每个顶点都要作为起点算一次)如果有任意一个不符合条件就不是正方体。
注意:
由于根号难以计算,我们在计算及比较的时候要把他们平方,即算两点间距离公式的时候不用再将整体根号了
注意出现距离为0的情况,这样也能满足条件,但显然不是正方体。
代码:
#include<iostream>
#include<algorithm>
int main()
{
using namespace std;
int T;
int p[8][3];//存放8个点
int dis[8];//存放距离
cin>>T;
while(T--)
{
bool flag=true;
for(int i=0;i<8;++i)
for(int j=0;j<3;++j)
cin>>p[i][j];//输入八个点
for(int i=0;i<8;++i)//每一个顶点都要作为标准点算一次
{
for(int j=0;j<8;++j)
{
dis[j]=0;
if(i==j)
continue;
dis[j]=(p[i][0]-p[j][0])*(p[i][0]-p[j][0])+(p[i][1]-p[j][1])*(p[i][1]-p[j][1])+(p[i][2]-p[j][2])*(p[i][2]-p[j][2]);
}
sort(dis,dis+8);//注意这里dis[0]会是0 因为上面当i==j的时候 dis[j]会等于0 所以不参与下面的比较
// for(int i=0;i<8;++i)
// cout<<i<<' '<<dis[i]<<endl;
if(dis[1]!=dis[2]||dis[2]!=dis[3]||2*dis[3]!=dis[4]||3*dis[4]!=2*dis[7])
flag=false;
if(dis[1]==0||dis[4]==0||dis[7]==0)//考虑有0的情况
flag=false;
}
if(flag==true)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
Dijkstra+完全背包问题
比赛的时候和队友讨论这题的时候就突然想到这是背包 但是我最短路还不是太熟练所以也没敢开 等过段时间都熟练了我再来
......
应该会来叭
如果一直没时间来的话希望以后成为超级厉害的程序员的时候 看到这题能立马随手敲出代码哈哈哈哈(已经在开心了
题意:
老师与学生会互相给出1~20的分数,学生给分数的时候不知道老师的分数,但是会尽量使自己分数最大化。给出分数会失去相应分数。如果给出的分数比对方给的分数小,对方加10分,自己扣10分,反之就相反。输入班级人数,求老师最后的得分。
代码:(其实是队友的代码)
#include<iostream>
using namespace std;
int main()
{
double sum=0;
for(int i=1;i<=20;i++)
{
for(int j=1;j<=20;j++)
{
if(i==j)
continue;
else if(i<j)
sum+=0.05*(j-i-10);
else
sum+=0.05*(j-i+10);
}
}
int n;
cin >> n;
if(n==1)
cout << 0 <<endl;
else
cout << (n-1)*sum <<endl;
return 0;
}
emm自己不会数学 是什么 数学期望值 ??压根想不到啊救命 下面是别人的题解
不禁再次夸夸我的队友 也很惊讶大家怎么都能想到这里 还是自己的问题吧