HIT_Training20140522

来源:互联网 发布:c界面编程怎么写 编辑:程序博客网 时间:2024/04/30 06:35

全场有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题。不会。

0 0