vijos题解
作者:互联网
Vijos题解
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;
}
P1097
题意:每次找最小的两堆进行合并,边合并边排序
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)cin>>a[i];
int ans=0;
sort(a,a+n);
for(int i=1;i<n;i++){
a[i]=a[i]+a[i-1];
ans+=a[i];
sort(a+i,a+n);
}
cout<<ans<<endl;
return 0;
}
P1103
题意:开数组把树的状态记录下来
#include <bits/stdc++.h>
using namespace std;
int main(){
int l,m;
cin>>l>>m;
int left,right,road[100000];
for(int i=1;i<=m;i++){
cin>>left>>right;
for(int j=left;j<=right;j++)road[j]=1;
}
int s=0;
for(int i=0;i<=l;i++){
if(!road[i])s++;
}
cout<<s;
return 0;
}
P1104
题意:标准01背包问题
#include<bits/stdc++.h>
using namespace std;
int Time[10000],Value[10000];
int dp[100000];
int main(){
int a,n;
cin>>a>>n;
for(int i=0;i<n;i++){
cin>>Time[i]>>Value[i];
}
for(int i=0;i<n;i++){
for (int j=a;j>=Time[i];j--){
dp[j]=max(dp[j],dp[j-Time[i]]+Value[i]);
}
}
cout<<dp[a];
return 0;
}
P1113
#include <iostream>
using namespace std;
int bgx,a,b,zdz;
int main(){
for(int i=0;i<7;i++){
cin>>a>>b;
if(a+b>8&&a+b>bgx)bgx=a+b,zdz=i+1;
}
cout<<zdz;
return 0;
}
P1115
题意:对数做排列,可以用STL的next_permutation函数
#include<bits/stdc++.h>
using namespace std;
int A[10000];
int n;
int a;
int main(){
int n;
cin>>n>>a;
for(int i=0;i<n;i++)
cin>>A[i];
for(int i=0;i<a;i++)
next_permutation(A,A+n);
for(int i=0;i<n;i++)
cout<<A[i]<<' ';
return 0;
}
P1316
题意:先去掉重复的,然后做排序,直接STL的sort函数即可
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int f=n;
int a[n];
for(int i=0;i<n;i++)scanf("%d",a+i);
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(i!=j && a[i]==a[j] && a[i]!=-1 && a[j]!=-1 )f--,a[j]=-1;
}
}
sort(a,a+n);
printf("%d\n",f);
for(int i=0;i<n;i++){
if(a[i]!=-1)printf("%d ",a[i]);
}
return 0;
}
P1911
题意:找出集合中一个数等于其他两数之和,三层循环枚举
#include<bits/stdc++.h>
using namespace std;
int n,*a,s,t,u,ans;
bool f[10001];
int main(){
cin>>n;
a=(int*)malloc(n*sizeof(int));
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++){
s=a[i];
for(int j=0;j<n;j++){
if(j==i)continue;//不同的数
t=a[j];
for(int k=0;k<n;k++){
if(k==i||k==j)continue;
u=a[k];
if(s+t==u && !f[u]){
ans++;f[u]=1;//已经算过的
}
}
}
}
cout<<ans<<endl;
return 0;
}
P1912
题意:将A 比 B 化简为 A’比 B’,要求在 A’和 B’均不大于 L 且 A’和 B’互质(两个整数的最大公约数是 1)的前提下,A’/B’ ≥ A/B 且 A’/B’ - A/B 的值尽可能小。
#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y){
if(y==0)return x;
return gcd(y,x%y);
}
int main(){
int a,b,l,a1=100000,b1=1;
cin>>a>>b>>l;
for(int i=1;i<=l;i++){
for(int j=1;j<=l;j++){
if(gcd(i,j)==1 && i*b>=j*a)
if(i*b1<=j*a1)a1=i,b1=j;
}
}
cout<<a1<<' '<<b1;
return 0;
}
P1913
题意:模拟,按照顺序构造符合条件的螺旋矩阵
#include<stdio.h>
int n,x,y;
int min(int n1,int n2){
if(n1<n2)return n1;
else return n2;
}
int solve(){
scanf("%d%d%d",&n,&x,&y);
int layer=min(x,n+1-x);//确定层,n方阵,如n=7,x=5就是第二层
layer=min(layer,min(y,n+1-y));
int num=0,side=n-1;
for(int i=1;i<layer;i++,side-=2){
int layer_total;
if(side==0)layer_total=1;
else layer_total=side*4;//当前层一圈总个数
num+=layer_total;
}
num++;
int nx=layer,ny=layer;
if(nx==x && ny==y)return num;
for(int i=1;i<=side;i++){
ny++;num++;//y列向右递增
if(nx==x && ny==y)return num;
}
for(int i=1;i<=side;i++){
nx++;num++;//x行向下递增
if(nx==x && ny==y)return num;
}
for(int i=1;i<=side;i++){
ny--;num++;//y列向左递增
if(nx==x && ny==y)return num;
}
for(int i=0;i<side;i++){
nx--;num++;//x行向上递增
if(nx==x && ny==y)return num;
}
return -1;
}
int main(){
int res=solve();printf("%d",res);
return 0;
}
标签:return,int,题解,cin,stu,&&,include,vijos 来源: https://www.cnblogs.com/jisuanjizhishizatan/p/14998627.html