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;
  
}
View Code

 

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;
}
View Code

相关文章: