Vijos题解
题库地址:https://vijos.org/p
P1001 谁拿了最多奖学金
题意:按照指定要求计算奖学金,直接用if判断即可
#include<iostream>
using namespace std;
struct STUDENT{
string name;
int n1,n2;
char xsgb,xb;
int lw;
int jxj;
};
int main(){
int n;
int sum=0;
cin>>n;
struct STUDENT stu[n];
struct STUDENT zdz;
zdz.jxj=0;
for(int i=0;i<n;i++)stu[i].jxj=0;
for(int i=0;i<n;i++){
cin>>stu[i].name>>stu[i].n1>>stu[i].n2>>stu[i].xsgb>>stu[i].xb>>stu[i].lw;
if(stu[i].n1>80&&stu[i].lw>=1)stu[i].jxj+=8000;
if(stu[i].n1>85&&stu[i].n2>80)stu[i].jxj+=4000;
if(stu[i].n1>90)stu[i].jxj+=2000;
if(stu[i].n1>85&&stu[i].xb=='Y')stu[i].jxj+=1000;
if(stu[i].n2>80&&stu[i].xsgb=='Y')stu[i].jxj+=850;
if(stu[i].jxj>zdz.jxj)zdz=stu[i];
sum+=stu[i].jxj;
}
cout<<zdz.name<<endl<<zdz.jxj<<endl<<sum;
return 0;
}
P1007 绕钉子的长绳子
题意:求两点距离
#include<bits/stdc++.h> using namespace std; const double pi=3.14159265359; struct POINT{ double x; double y; }; int n; double r,ans=0; POINT p[100001]; inline double dis(POINT a,POINT b){ double x=a.x-b.x; double y=a.y-b.y; return sqrt(x*x+y*y);//两点距离 } int main(){ cin>>n>>r; for(int i=0;i<n;i++)cin>>p[i].x>>p[i].y; for(int i=1;i<n;i++){ ans+=dis(p[i],p[i-1]); } ans+=dis(p[0],p[n-1]);//第一个和最后一个之间 ans+=2*pi*r;//绕钉子的长度 cout<<fixed<<setprecision(2)<<ans<<endl; return 0; }