写在杭电热身赛2之后

  11点40左右感到新校,我们到的时候才几个人啊.

期间随便看了看网站,也就是苹果的发布会,等到12点开始做题了,不过队友还没有来啦,首先A了一道水水水题

A Computer Graphics Problem

按格式输出不同的符号而已
直接贴代码了
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    int n,x;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        x = x/10;
        printf("Case #%d:\n",i);
        printf("*------------*\n");
        for(int j=10-x;j>0;j--)
            printf("|............|\n");
        for(int k=x;k>0;k--)
            printf("|------------|\n");
        printf("*------------*\n");
    }
    return 0;
}

 

The Number Off of FFF

做完这道呢,队友也都来了,就进入了正式的比赛节奏,我先准备做最后一道The Number Off of FFF,WA了很久不知道错在哪里

最后马骋A过了,看了下,基本思路一样啊

我为什么WA了啊,题目意思很简单啊,就是报数,后面一个跟着前面一个报数,每次加一,有且只有一个报错了

我用的数组存了,马骋用的直接用的两个int 保存前后的,时间也快多,开始没想到

先贴AC代码

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;

int main()
{
    int t;
    cin>>t;
    for(int i=1; i<=t; i++)
    {
        printf("Case #%d: ",i);
        int n,a,b,j;
        bool iff=0;
        cin>>n>>a;
        for(j=2; j<=n; j++)
        {
            cin>>b;
            if(b!=a+1)
            {
                printf("%d\n",j);
                iff=1;
                break;
            }
            a=b;
        }
        for(; j<n; j++) scanf("%d",&a);
        if(!iff) printf("1\n");
    }
    return 0;
}

 然后是我的WA

#include <iostream>
#include <cstdio>
typedef long long ll;
using namespace std;

int  num[10005];
int main()
{
    int t,n,x;
    scanf("%d",&t);
    for(int ii=1;ii<=t;ii++)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
        }
        x=1;

        for(int i=2;i<=n;i++)
        {
            if(num[i]!=num[i-1]+1)
            {
                x=i;
                break;
            }
        }
        printf("Case #%d: %d\n",ii,x);
    }
    return 0;
}

 明天继续写,室友要碎觉了

 

有些东西不写下来就会忘记的

这道题目不会做,开始随便写了个暴力测试数据,发现一个规律,就是所有以0结尾的数x,从0到x各位上的数的和为10的倍数的数的数量为x/10-1

就是用这个规律,碰巧过了这一道题目,有人说可以用什么数位dp,表示实在不会的说

贴代码

#include <iostream>
#include <cstdio>
using namespace std;
long long c;

bool isGood(long long x)
{
    long long count  = 0;
    while(x!=0)
    {
        count += x % 10;
        x=x/10;
    }
    if(count % 10 == 0)
        return true;
    return false;
}

long long NUM(long long a , long long b)
{
    long long cc=0;
    for(long long i = a; i<=b; i++)
    {
        if(isGood(i))
        {
            cc++;
        }
    }
    return cc;
}
int main()
{
    long long  t;
    long long x,y;

    scanf("%I64d",&t);
    for(long long ii=1; ii<=t; ii++)
    {
        c=0;
        scanf("%I64d %I64d",&x,&y);
        long long xa = (x-1) / 10 * 10;
        long long ya = y / 10 * 10;
        long long aa = (x-1) /10 - 1 + NUM(xa,x-1);
        long long bb = y/10 - 1 + NUM(ya,y);
        c = bb - aa;

        printf("Case #%I64d: %I64d\n",ii,c);
    }
    return 0;
}

 

 

Naive and Silly Muggles

这道题是最小包围圆,几何体,直接上模版

#include<stdio.h>
#include<math.h>
/*求三点的圆心和半径的函数*/
void sdi(double x1,double y1,double x2,double y2,double x3,double y3,double *x0,double *y0,double *r)
{
    *x0=((y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1)+(y2-y1)*(y1* y1-y3*y3+x1*x1-x3*x3))/(2*(x2-x1)*(y3-y1)-2*(x3-x1)*(y2-y1));
    *y0=((x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1)+(x2-x1)*(x1*x1-x3*x3+y1*y1-y3*y3))/(2*(y2-y1)*(x3-x1)-2*(y3-y1)*(x2-x1));
    *r=sqrt((x1-*x0)*(x1-*x0)+(y1-*y0)*(y1-*y0));
}
/*求两点间的距离*/
void ldi(double x1,double y1,double x2,double y2,double *r)
{
    *r=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
/*判断三点构成的圆是否包含其他的任意点*/
int bji(int n,double *x,double *y,double r)
{
    int i;
    for(i=1; i<=n; i++)
    {
        if(r<sqrt((x[0]-x[i])*(x[0]-x[i])+(y[0]-y[i])*(y[0]-y[i])))
            return 0;
    }
    return 1;
}

int main()
{
    int n,i,j,k,t;
    double xx,yy;
    double x[120],y[120],x0,y0,r,s;
    scanf("%d",&t);
    for(int ti = 1;ti<=t;ti++)
    {
        n=3;
        /*输入所有点*/
        for(i=1; i<=n; i++)
        {
            scanf("%lf %lf",&x[i],&y[i]);
        }

        r=0;
        s=0;
        x[0]=x[1];
        y[0]=y[1];
        /*先求出两点间的最长距离。以这两点的距离为直径画一个圆。*/
        for(i=1; i<n; i++)
        {
            for(j=i+1; j<=n; j++)
            {
                ldi(x[i],y[i],x[j],y[j],&s);
                if(s>r)
                {
                    r=s;
                    x[0]=(x[i]+x[j])/2;
                    y[0]=(y[i]+y[j])/2;
                }
            }
        }
        /*如果包含了所有的点那么 就是所求的解*/
        if(bji(n,x,y,r/2))
        {
            scanf("%lf %lf",&xx,&yy);
            printf("Case #%d: ",ti);
            double disss;
            ldi(x[0],y[0],xx,yy,&disss);
            if(disss <= r/2)
                puts("Danger");
            else
                puts("Safe");
        }
        /*如果不包含所有的点那么 就是三点所确定的圆是我们所求的解*/
        else
        {
            s=1000;
            r=0;
            for(i=1; i<=n-2; i++)
            {
                for(j=i+1; j<=n-1; j++)
                {
                    for(k=j+1; k<=n; k++)
                    {
                        sdi(x[i],y[i],x[j],y[j],x[k],y[k],&x[0],&y[0],&r);
                        if(bji(n,x,y,r)&&r<s)
                        {
                            s=r;
                            x0=x[0];
                            y0=y[0];
                        }
                    }
                }
            }
            scanf("%lf %lf",&xx,&yy);
            printf("Case #%d: ",ti);
            double disss;
            ldi(x0,y0,xx,yy,&disss);
            if(disss <= s)
                puts("Danger");
            else
                puts("Safe");

        }
    }
    return 0;
}

 现场就做出来了4个题目,给上交的AK大神们跪了

 
posted @ 2013-09-12 01:57  围剿大叔  阅读(164)  评论(0编辑  收藏  举报