今天,小白参加了小白月赛,然后发现,自己连做小白的资格都没有(嘤嘤嘤),从此自封为小小白
真是得自我反省(10-1)道题啊!!!!!
下面请看那些“刀”是如何将小小白的心割成碎片的~~~~
Audio
(某位大佬的代码,膜拜膜拜)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x1,y1,x2,y2,x3,y3;
scanf("%d %d",&x1,&y1);//输入已知的三个点
scanf("%d %d",&x2,&y2);
scanf("%d %d",&x3,&y3);
double k2=-1.0*(x2-x1)/(y2-y1);//找出两条中垂线的斜率
double k3=-1.0*(x3-x1)/(y3-y1);
double ctx2=(x1+x2)*1.0/2,cty2=(y1+y2)*1.0/2;//求出中点
double ctx3=(x1+x3)*1.0/2,cty3=(y1+y3)*1.0/2;
double x=(cty3-cty2+k2*ctx2-k3*ctx3)/(k2-k3);//方程联立,求出交点坐标
double y=k2*(x-ctx2)+cty2;
printf("%.3f %.3f",x,y);
return 0;
}
看到上面的代码,反思一下,感觉这就是一道初中数学题,画个图就解决了
再来看看我的wa
#include <bits/stdc++.h>
using namespace std;
void juli(int x1,int y1,int x2,int y2,int x3,int y3)
{
double x0,y0;
for(x0=0,y0=0; x0<=1e9,y0<=1e9;)
{
double d1=pow(x1-x0,2),d3=pow(x2-x0,2),d5=pow(x3-x0,2);
double d2=pow(y1-y0,2),d4=pow(y2-y0,2),d6=pow(y3-x0,2);
double d=pow(d1+d2,0.5),d0=pow(d3+d4,0.5),d8=pow(d5+d6,0.5);
if(d==d0&&d0==d8&&d==d8) printf("%.3f %.3f",x0,y0);
}
}
int main()
{
int x1,x2,x3,y1,y2,y3;
scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3);
juli(x1,y1,x2,y2,x3,y3);
return 0;
}
这个代码没有输出,我觉得是在实数范围内找不到x0,y0,因为实数有无限个,所以for循环的最后一部分根本写不出来
Channels
(大佬代码,被我稍加修改)主体思路是两个时间节点都和起始时刻1比,然后作差,这个真的比我那个方法要快!算法优化果然是硬伤
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int t1,t2,x1,y1,x2,y2,ans,x,t,ans1,ans2;
while(cin>>t1>>t2)//输入起始时刻
{
t1-=1;//只有最开始将t1后退一位,在最后作差的时候才能把t1算上
x1=t1/60;//ti中含有完整的节目+广告的时刻
y1=t1%60;//为了下面与50作比较,判断t1是否落在广告时间段
x2=t2/60;//与t1类似
y2=t2%60;
x=x2-x1;//这步很迷,我觉得没啥用,应该可以去掉
ans1=x1*50;//完整节目的时刻数
if(y1>50)//如果落在广告时刻段
ans1+=50;
else //如果是节目时刻段
ans1+=y1;
ans2=x2*50;
if(y2>50)
ans2+=50;
else
ans2+=y2;
ans=ans2-ans1;//作差
cout<<ans<<endl;
}
return 0;
下面是我RE的代码(虽然我觉得想的也挺好的)
#include <bits/stdc++.h>
using namespace std;
int main()
{ long long int n,t1,t2,sum;
long long int flag[100000];
scanf("%lld%lld",&t1,&t2);
sum=0;
for(long long int i=t1;i<=t2;i++)
{flag[i]=1;
if((i/10)%6==1) flag[i]=0;
sum=sum+flag[i];
}
printf("%lld\n",sum);
return 0;
}
Exams
#include <bits/stdc++.h>
using namespace std;
double A[5000];
int B[5000];
int main(){
double ans = 0;
double sum = 0;
int n;
int op;
int len = 0;
double a,b,c,d,e,f,g;
cin >> n;
for(int i = 0;i < n;i++){
cin >> op >> a >> b >> c >> d >> e >> f >> g;
if(op == 2) continue;
sum += a;
A[len] = a;//len每次循环+1
B[len++] = b*c+d*e+f*g+0.5;//四舍五入到整数????
}
for(int i = 0;i < len;i++){
ans += A[i]*1.0/sum*B[i];//打破整除
}
printf("%.2f\n",ans);//四舍五入保留两位
return 0;
}
发现新大陆:转义字符可以自动四舍五入保留到要求的位数,如果不想四舍五入,可以使用floor函数(向下取整)
#include <bits/stdc++.h>
using namespace std;
int main()
{ double a;
while(~scanf("%lf",&a))
printf("%.2f\n",floor(a*100)/100);
return 0;
}
但是至于上面的int数组B+0.5就四舍五入了?这段我没想明白,于是自创一段四舍五入
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x;
double sum;
scanf("%lf",&sum);
x=sum*10;//对和进行四舍五入,保留到整数
if(x%10>=6&&x%10<=9) sum=x/10+1;
if(x%10>=0&&x%10<=4) sum=x/10;
printf("%.0f\n",sum);
return 0;
}
我是用结构体写的,但是不知哪里错了,希望有好心的大佬帮我改一下٩(๑òωó๑)۶(点开那个题目链接就能看到啦!)
来源:CSDN
作者:兴安仓鼠
链接:https://blog.csdn.net/LovelyZhou/article/details/104034619