18/7/2012 ICPC培训 第三天

本文分享了博主解决四道算法题的经历,包括使用Floyd算法解决的复杂问题、二维数组操作及几何判断等,并反思了搜索与动态规划的理解。

今天看了五题,刷出来四题。各种无语呀!

首先看第一题吧。(HDU1217)

这题花了整整一上午,就快4个小时了。结果还是在百度的配合下搞定的大哭

本以为是简单的字符串操作,首先的想法也就是那样的。结果才发现根本的不对。然后用深搜,

结果TLE。当然,深搜也是错的。因为,一次搜索一个节点只能用一次!或许可以用多次。题目

没规定。最后,还是度娘帮着解决了。Floyd算法,三重for循环。当然,首先你的建图。

说到这就有的说了。这两天做题就发觉:我们得有能力把实际问题抽象出来,知道输入输出、利

用经典算法或者做些变形或者直接自己设计算法、把算法的逻辑用代码准确的表达出来。

 

再来看看我做的第二、三题吧。(HDU1218、1220)

这是两道水题。1218是对二维数组进行操作。1220是道简单数论题。

 

然后,再看下第四题。(HDU1221)

其实,这也是道简单题。是道几何体,判断两图形是否相交。可还是被卡了很长时间。先是没有

想出好的算法,然后想到了算法。可是坑爹的事发生了。WA数次,想到各种可能错误。耗了大量

时间,还是WA!差点就忍不住找度娘。突然,发觉,代码逻辑和我的算法有点点不一样,一点手

误,在判断语句if 前面多加了else!!!

 

最后呢,要感谢王飞飞同学关于搜索、DP的报告。看清了自己懂搜索的真实面目——还是不懂!!!

也和他小讨论了一下,觉得有收获啊。这两天好好刷搜索和DP,希望后天下午的比赛可以打的更好。

大笑

 

代码:

1217:

#include<iostream>
using namespace std;

const int maxSize=41;
const int maxLen=201;

double map[maxSize][maxSize];
int n,m,cas=1;
char name[maxSize][maxLen];

int findIndex(char ch[])
{
    for(int i=0;i<n;i++)
    {
        if(strcmp(ch,name[i])==0)
        {
            return i;
        }
    }
    
    return -1;
}

void init()
{
    for(int i=0;i<n;i++)
    {
        scanf("%s",name[i]);
    }
    
    scanf("%d",&m);
    
    char c1[maxLen],c2[maxLen];
    double d;
    int row,col;
    memset(map,0,sizeof(map));
    for(int j=0;j<m;j++)
    {
        scanf("%s%lf%s",&c1,&d,&c2);
        
        row=findIndex(c1);
        col=findIndex(c2);
        map[row][col]=d;    //建图 
    }
}

void Floyd()
{
    for(int k=0;k<n;k++)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(map[i][j]<map[i][k]*map[k][j])
                {
                    map[i][j]=map[i][k]*map[k][j];
                }
            }
        }
    }
    
    bool flag=false;
    for(int i=0;i<n;i++)
    {
        if(map[i][i]>1)
        {
            flag=true;
            break;
        }
    }
    
    printf("Case %d: ",cas++);
    if(flag) printf("Yes\n");
    else printf("No\n");
}
    
int main()
{
    while(cin>>n,n)
    {
        init();
        
        Floyd();
    }
    
    return 0;
}


 

1218:

#include<iostream>
using namespace std;

const int MAX=10;

int row,col;
char start[MAX+5],end[MAX-5];
int in[MAX][MAX],out[MAX][MAX];

void input()
{
    cin>>row>>col;
    
    char temp;
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        {
            cin>>temp;
            in[i][j]=temp-'0';
        }          
    }
    
    cin>>end;
}

void deal()
{  
    for(int i=0;i<row-1;i++)
    {
        for(int j=0;j<col-1;j++)
        {
            out[i][j]=in[i][j]+in[i][j+1]+in[i+1][j]+in[i+1][j+1];
            out[i][j]/=4;
        }
    }
}                

void output()
{
    for(int i=0;i<row-1;i++)
    {
        for(int j=0;j<col-1;j++)
        {
            cout<<out[i][j];
        }
        cout<<endl;
    }
}
    
int main()
{
    while(cin>>start)
    {
        if(strcmp(start,"ENDOFINPUT")==0) break;
        
        input();
        
        deal();
        
        output();
    }
    
    return 0;
}


 

1220:

#include<iostream>
using namespace std;

int main()
{
    int n;
    __int64 a,b;
    
    while(cin>>n)
    {
        if(n==1)
        {
            cout<<0<<endl;
            continue;
        }
        
        a=n*n*n;
        if(a%2==0)
        {
            a=a/2*(a-1);
        }
        else
        {
            a=(a-1)/2*a;
        }
        
        b=3*n*n*(n-1);
        
        cout<<a-b<<endl;
    }
    
    return 0;
}   


 

1221:

#include<iostream>
#include<cmath>
using namespace std;

int main()
{
    double cx,cy,r;
    double rx1,rx2,ry1,ry2;
    double x1,x2,y1,y2;
    int cas;
    bool flag1,flag2,flag3,flag4;
    
    cin>>cas;
    while(cas--)
    {
        cin>>cx>>cy>>r>>rx1>>ry1>>rx2>>ry2;
        
        x1=rx1>rx2?rx2:rx1;
        x2=rx1>rx2?rx1:rx2;
        y1=ry1>ry2?ry2:ry1;
        y2=ry1>ry2?ry1:ry2;
        
        flag1=flag2=flag3=flag4=false;
        
        double temp1,temp2;
        if((r*r-(rx1-cx)*(rx1-cx))>=0)
        {
            temp1=sqrt(r*r-(rx1-cx)*(rx1-cx))+cy;
            temp2=-sqrt(r*r-(rx1-cx)*(rx1-cx))+cy;
            
            if((temp1>=y1 && temp1<=y2) || (temp2>=y1 && temp2<=y2))
            {
                flag1=true;
            }
        }
        if((r*r-(rx2-cx)*(rx2-cx))>=0)  //if前多加了else 
        {
            temp1=sqrt(r*r-(rx2-cx)*(rx2-cx))+cy;
            temp2=-sqrt(r*r-(rx2-cx)*(rx2-cx))+cy;
            
            if((temp1>=y1 && temp1<=y2) || (temp2>=y1 && temp2<=y2))
            {
                flag2=true;
            }
        }
        if((r*r-(ry1-cy)*(ry1-cy))>=0)  //if前多加了else 
        {
            temp1=sqrt(r*r-(ry1-cy)*(ry1-cy))+cx;
            temp2=-sqrt(r*r-(ry1-cy)*(ry1-cy))+cx;
            
            if((temp1>=x1 && temp1<=x2) || (temp2>=x1 && temp2<=x2))
            {
                flag3=true;
            }
        }
        if((r*r-(ry2-cy)*(ry2-cy))>=0)  //if前多加了else 
        {
            temp1=sqrt(r*r-(ry2-cy)*(ry2-cy))+cx;
            temp2=-sqrt(r*r-(ry2-cy)*(ry2-cy))+cx;
            
            if((temp1>=x1 && temp1<=x2) || (temp2>=x1 && temp2<=x2))
            {
                flag4=true;
            }
        }
        
        if(flag1 || flag2 || flag3 || flag4)
        {
            cout<<"YES";
        }
        else
        {
            cout<<"NO";
        }
        cout<<endl;
    }
    
    return 0;
}

 

 

 

 

 

 

中文版,平时开发超实用工具。Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的各类事件的接口和类。 java.awt.font 提供与字体相关的类和接口。 java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口。 java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,即基于 JavaBeansTM 架构的组件。 java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 ......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值