2012金华邀请赛解题报告

这次的没学过的算法多了起来。尽管我都猜对了是用什么算法(我仅仅知道大体上各算法的原理,但没写过。

。)。。还有翻译上的严重失误。这次太慘了。。。

差点挂零。。

这次比赛的pdf地址:http://poj.org/ProblemDescriptions/jinghua.pdf

A题:

题目地址:POJ 4044

因为上次我在低端题上的失误。。

已被队友嫌弃。。。已经被剥夺写签到题的权利。。。

可是这题竟然被他俩弄了2小时也没AC。

。于是我不得不把题目又一次翻译了遍,自己敲了代码。

然后AC。。这题刚開始翻译错了,那个units digit在这里是个位数的意思。。sad。。

。题目非常easy。。直接上代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

int main()
{
    int t, n1, n2, i, j, n, m, x, pos1, pos2, max1, s, k, n3;
    int hash1[110], a[100], b[100], hash2[110], c[100];
    scanf("%d",&t);
    while(t--)
    {
        max1=-1;
        scanf("%d%d",&n,&m);
        memset(hash1,0,sizeof(hash1));
        memset(hash2,0,sizeof(hash2));
        for(i=0; i<n; i++)
        {
            scanf("%d",&x);
            hash1[x]++;
        }
        for(i=0; i<m; i++)
        {
            scanf("%d",&x);
            hash2[x]++;
        }
        n1=0;
        n2=0;
        for(i=100; i>=0; i--)
        {
            if(hash1[i])
            {
                a[n1++]=i;
            }
            if(hash2[i])
            {
                b[n2++]=i;
            }
        }
        for(i=0; i<n1; i++)
        {
            for(j=0; j<n2; j++)
            {
                if(a[i]==b[j])
                {
                    s=1;
                    for(k=1; i+k<n1&&j+k<n2; k++)
                    {
                        if(a[i+k]==b[j+k])
                        {
                            s++;
                        }
                        else
                        {
                            break;
                        }
                    }
                    if(max1<s)
                    {
                        max1=s;
                        pos1=i;
                    }
                    break;
                }
            }
        }
        if(max1==-1)
        {
            printf("NONE\n");
            continue ;
        }
        n3=0;
        for(i=pos1;i<pos1+max1;i++)
        {
            c[n3++]=a[i];
        }
        for(i=0;i<n3;i++)
        {
            printf("%d ",c[i]);
        }
        printf("\n");
        for(i=0;i<10;i++)
        {
            for(j=n3-1;j>=0;j--)
            {
                if(c[j]%10==i)
                {
                    printf("%d ",c[j]);
                }
            }
        }
        printf("\n");
    }
    return 0;
}

E题:

题目地址:POJ 4048

这题是shijun翻译的,他把题目意思翻译给了我跟+才。可是我理解的意思竟然跟他的原本意思相反,。更奇妙的是我理解的意思就是题目本来的意思。

。shijun翻译错了。

。。当时我感觉我的想法全然可行。。可是当场被他俩反驳了。。我以为是我理解错了意思。

。结果赛后找题解才发现。。那正确思路跟我当时想的做法是一模一样的。。。简直sad。

。。。因为昨晚有CF,也就没敲,今早起来一敲,把线段相交的模板一套。

就AC了。。

题目的思路是枚举线段的端点,每次把端点与原点形成一条射线。再遍历线段,求交点数。最后最多的交点数就是答案。复杂度1500*3000,轻松无压力。

代码例如以下:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include<algorithm>

using namespace std;
#define eps 1e-9
struct point
{
    double x;
    double y;
}p[4000];
int inter(point a, point b, point c, point d)
{
    if(min(a.x, b.x) > max(c.x, d.x) ||
            min(a.y, b.y) > max(c.y, d.y) ||
            min(c.x, d.x) > max(a.x, b.x) ||
            min(c.y, d.y) > max(a.y, b.y) )
        return 0;
    double h, i, j, k;
    h = (b.x-a.x)*(c.y-a.y) - (b.y-a.y)*(c.x-a.x);
    i = (b.x-a.x)*(d.y-a.y) - (b.y-a.y)*(d.x-a.x);
    j = (d.x-c.x)*(a.y-c.y) - (d.y-c.y)*(a.x-c.x);
    k = (d.x-c.x)*(b.y-c.y) - (d.y-c.y)*(b.x-c.x);
    return h*i <= eps && j*k <= eps;
}
int main()
{
    int t, n, i, j, n0, ans, max1;
    double x, y;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        n0=0;
        max1=-1;
        for(i=0;i<2*n;i++)
        {
            scanf("%lf%lf",&p[i].x,&p[i].y);
        }
        scanf("%lf%lf",&x,&y);
        for(i=0;i<2*n;i++)
        {
            p[i].x-=x;
            p[i].y-=y;
        }
        point t1;
        t1.x=0;
        t1.y=0;
        for(i=0;i<2*n;i++)
        {
            point t2;
            t2.x=p[i].x*20000;
            t2.y=p[i].y*20000;
            ans=0;
            for(j=0;j<2*n;j+=2)
            {
                if(inter(t1,t2,p[j],p[j+1]))
                {
                    ans++;
                }
            }
            if(max1<ans)
                max1=ans;
        }
        printf("%d\n",max1);
    }
    return 0;
}
时间: 2024-10-13 02:26:36

2012金华邀请赛解题报告的相关文章

2012金华邀请赛

模拟赛链接 A 第一个水题 要知道units digit的意思  (个位数) 有一点点小繁琐. 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<cmath> 7 using namespace std; 8 #define N 35 9 int a[N],

2013年成都邀请赛解题报告

上海邀请赛前拿2013年的成都邀请赛热身,比赛结果大大出乎了我们的预期啊...没做出来的几道题可能还会更新的. A题: 题目地址:HDU 4716 水题..这题是我敲的..敲麻烦了...sad...你们就当没看见吧... 代码: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace

2014上海全国邀请赛 解题报告

Game with Pearls 贪心水题 http://blog.csdn.net/u012774187/article/details/40711559 Beam Cannon 线段树陈题 http://blog.csdn.net/u012774187/article/details/40712359 Seam Carving 简单DP http://blog.csdn.net/u012774187/article/details/40712899 Battle ships 二分图陈题 ht

NOIP2012普及组 (四年后的)解题报告 -SilverN

本章施工仍未完成 现在的时间是3.17 0:28,我困得要死 本来今天(昨天?)晚上的计划是把整个四道题的题解写出来,但是到现在还没写完T4的高效算法,简直悲伤. 尝试了用floyd写T4,终于大功告成AC后,看到别人的解题报告说fl能过只是因为测试数据范围小. 好像主要有三种解法,fl,dij,dfs dfs暂时弃,dij写到现在还没完成,先把fl的放上来. 等攻下T4,再施工前面三道题 T4-Floyd: 读完数据以后,只要把文化不兼容的城市的路都堵上,就可以用floyd了 可怜我之前堵路无

HDU 4303 Hourai Jeweled 解题报告

HDU 4303 Hourai Jeweled 解题报告 评测地址: http://acm.hdu.edu.cn/showproblem.php?pid=4303 评测地址: https://xoj.red/contests/view/1155/1 题目描述 Kaguya Houraisan was once a princess of the Lunarians, a race of people living on the Moon. She was exiled to Earth over

解题报告 之 POJ3057 Evacuation

解题报告 之 POJ3057 Evacuation Description Fires can be disastrous, especially when a fire breaks out in a room that is completely filled with people. Rooms usually have a couple of exits and emergency exits, but with everyone rushing out at the same time

hdu 1541 Stars 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541 题目意思:有 N 颗星星,每颗星星都有各自的等级.给出每颗星星的坐标(x, y),它的等级由所有比它低层(或者同层)的或者在它左手边的星星数决定.计算出每个等级(0 ~ n-1)的星星各有多少颗. 我只能说,题目换了一下就不会变通了,泪~~~~ 星星的分布是不是很像树状数组呢~~~没错,就是树状数组题来滴! 按照题目输入,当前星星与后面的星星没有关系.所以只要把 x 之前的横坐标加起来就可以了

【百度之星2014~初赛(第二轮)解题报告】Chess

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]Chess>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=667 前言 最近要毕业了,有半年没做

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh童鞋的提醒. 勘误2:第7题在推断连通的时候条件写错了,后两个if条件中是应该是<=12 落了一个等于号.正确答案应为116. 1.煤球数目 有一堆煤球.堆成三角棱锥形.详细: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形). -. 假设一共