现在的位置: 首页 > 综合 > 正文

HIT_Training20140522

2018年02月21日 ⁄ 综合 ⁄ 共 2631字 ⁄ 字号 评论关闭

全场有9个题可以做。

训练地址

A题,水题。注意细节。

B题。注意读题,然后排序两次就ok了。

C题。不会。

D题。理想气体状态方程。一直wa不过,忽略了pV=nrT如果等式两边同时有两个0的话等式在一切情况都成立。

E题。dancling links。

F题。圆面积交,乱搞就对了。居然因为模板错误而没有过掉。

#include <iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long

#define maxn 1000003
#define maxm
#define eps
#define pp
#define inf 0x3f3f3f3f
#define re freopen("in.txt","r",stdin)
#define PI acos(-1.0)


//double area(double dis,double r1,double r2){
//    if(r1+r2<dis)return 0;
//    double ans=0;
//    dis/=2;
//    double ta=sqrt(r1*r1-dis*dis);
//    double alpha1=2*acos(dis/r1);
//    double tran1=dis*ta;
//    double shan1=alpha1*r1*r1/2;
//
//    double tb=sqrt(r2*r2-dis*dis);
//    double alpha2=2*acos(dis/r2);
//    double tran2=dis*tb;
//    double shan2=alpha2*r2*r2/2;
//
//    return shan1+shan2-tran1-tran2;
//}
double area(double d, double r1, double r2)
{
    if (d>=r1+r2) return 0;
    if (r2<r1) swap(r1, r2);
    if (d<=r2-r1) return PI*r1*r1;
    double a = d, b = r1, c = r2;
    double cta1 = acos((a * a + b * b - c * c) / 2 / (a * b)),
    cta2 = acos((a * a + c * c - b * b) / 2 / (a * c));
    double s1 = r1*r1*cta1 - r1*r1*sin(cta1)*(a * a + b * b - c * c) / 2 / (a * b);
    double s2 = r2*r2*cta2 - r2*r2*sin(cta2)*(a * a + c * c - b * b) / 2 / (a * c);
    return s1 + s2;
}
int main(){
   // re;
    double d,r1,R1,r2,R2;
    cin>>d>>r1>>R1>>r2>>R2;
    double total=area(0,R1,R1)-area(0,r1,r1)+area(0,R2,R2)-area(0,r2,r2);
    double sub=area(d,R1,R2)-area(d,R1,r2)-(area(d,r1,R2)-area(d,r1,r2));
    total-=sub;
    printf("%.6lf\n",total);
    return 0;
}

G题。贪心。每次过河的时候四个四个一组考虑。可以每次用最小的带最大的过去最小的再回来,也可以最小的两个故去,最小的回来,最大的两个过去,次小的回来。

#include <iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long

#define maxn 105
#define maxm
#define eps
#define pp
#define inf 0x3f3f3f3f
#define re freopen("in.txt","r",stdin)
#define pi acos(-1.0)
int a[maxn];
int ans=0;
void deal(int n) {
    if(n==1)ans+=a[1];
    else if(n==2)ans+=a[2];//printf("%d\n",a[1]);
    else if(n==3)ans+=a[3]+a[1]+a[2];//printf("%d\n",a[0]+a[1]+a[2]);
    else {
        if(2*a[2]>a[1]+a[n-1])
            ans+=a[n-1]+2*a[1]+a[n];
        else ans+=2*a[2]+a[1]+a[n];
        deal(n-2);
    }

}
int main() {
    int n;
    //re;
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>a[i];
    sort(a+1,a+1+n);
    ans=0;
    deal(n);
    printf("%d\n",ans);
    return 0;
}

H题,不会。

I题。裸的最小二乘法。

#include <iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cmath>
#include<vector>
using namespace std;
#define ll long long

#define maxn 10005
#define maxm
#define eps
#define pp
#define inf 0x3f3f3f3f
#define re freopen("in.txt","r",stdin)
#define pi acos(-1.0)

double  a[maxn];
int main(){
    int n;
    double xb=0,yb=0;
    double sx,sy;
    double tmp=0;
    double dx=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%lf",&a[i]);
        yb+=a[i];
        xb+=i;
        dx+=i*i;
        tmp+=a[i]*i;
    }
    sx=xb;
    xb/=n;
    yb/=n;
    double b=(tmp-n*xb*yb)/(dx-n*xb*xb);
    printf("%lf %lf\n",b+yb-b*xb,b);

    return 0;
}

J题。不会。

抱歉!评论已关闭.