群赛地址:
https://vjudge.net/contest/186188#problem
(缺后2题)
A - The Wall
CodeForces - 340A题意:给出一段整数区间和两个数a,b,求区间中是a,b的倍数的数的个数.
题解:
#include<bits/stdc++.h>
using namespace std;
int gcd(const int &a,const int &b){
return b?gcd(b,a%b):a;
}
int lcm(const int &a,const int &b){
return a*b/gcd(a,b);
}
int main(){
int x,y,a,b,g,l,r,ret=0;
cin>>x>>y>>a>>b;
g=lcm(x,y);
ret=b/g-a/g;
if(a%g==0)ret++;
cout<<ret;
}
B - Maximal Area Quadrilateral
CodeForces - 340B题意:平面上有一些点,求以其中的点为顶点的四边形的最大值.
思路:暴力枚举四边形中最左和最右两点,其中最大面积的四边形就是与最上点,最下点构成的四边形.
题解;
#include <bits/stdc++.h>
using namespace std;
struct pt{
int x,y;
}s[303];
int n;
int cross3(int a,int b,int c){
return s[a].x*s[b].y+s[b].x*s[c].y+s[c].x*s[a].y
-(s[a].y*s[b].x+s[b].y*s[c].x+s[c].y*s[a].x);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d %d",&s[i].x,&s[i].y);
int ans=0;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
int ans1=0,ans2=0;
for(int k=1;k<=n;k++){
if(cross3(i,j,k)>0) ans2=max(ans2,cross3(i,j,k));
else ans1=max(ans1,-cross3(i,j,k));
}
if(ans1==0||ans2==0) continue;
ans=max(ans,ans1+ans2);
}
}
printf("%lf\n",ans/2.0);
return 0;
}
C - Tourist Problem
CodeForces - 340C
题意:一条路上有一些目标,一个人从0开始,每次跳到一个点.求他所有跳的可能性中总路程的平均数.
错的代码:
#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b){return b?gcd(b,a%b):a;}
long long n,a[100010],ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<n;i++){
ans+=2*i*(n-i)*(a[i+1]-a[i])+a[i];
}
ans+=a[n];
long long d=gcd(ans,n);
cout<<ans/d<<" "<<n/d;
}
题解:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll a[100010];
int main()
{
ll n; scanf("%lld", &n);
for (ll i = 0; i < n; i++) scanf("%lld", &a[i]);
sort(a, a + n);
ll s1 = 0, s2 = 0;
for (ll i = 0; i < n; i++){
s2 += i * a[i] - s1;
s1 += a[i];
}
ll num = 2*s2 + s1, d = n;
for (ll i = 2; i <= d; i++){
while (num % i == 0 && d % i == 0){ num /= i; d /= i; }
}
printf("%lld %lld", num, d);
return 0;
}
D - Bubble Sort Graph
CodeForces - 340D
E - Iahub and Permutations
CodeForces - 340E