搜索
有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
楼主: foodszhu
收起左侧

编程之美2013全国挑战赛------资格赛

[复制链接]

该用户从未签到

1

主题

9

好友

1214

积分

Continue

积分
1214
发表于 2013-4-6 15:22:00 | 显示全部楼层
第二步就是算出可以组成的长方形数。第一个算法是M*N的矩形可以组成(M+....1)*(N+.....1)个长方形数。
剩下的Q就用(边长+1)(Q-1+Q-2+...1)算出剩下的棋子能形成的长方形数。。。。。。这数字怎么成了表情。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

16

好友

5383

积分

序章

积分
5383
发表于 2013-4-6 15:26:33 | 显示全部楼层
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

5

好友

467

积分

New Game

积分
467
发表于 2013-4-6 15:31:24 | 显示全部楼层
本帖最后由 computingbear 于 2013-4-6 15:36 编辑

这数字……哦,我大概明白了,应该是12 * 11 * 6 * 7 / 4 + 12 = 1398, 多谢
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

9

好友

1214

积分

Continue

积分
1214
发表于 2013-4-6 15:41:51 | 显示全部楼层
computingbear 发表于 2013-4-6 15:31
这数字……话说我知道第一步,比如14x6的方格,那么可以形成 14 * 13 * 5 * 6 / 4 = 1365, 然后……我就不 ...

在组成完7X12的方格后,还剩下2个棋子没摆。再摆上去就会多出很多的长方形。
我自己编的算法是: 多出的长方形数=(长边+1)((多出的棋子数Q-1)递减后的总和)。
举例 。现在是已摆出7X12方格后,剩2棋子。 多出的长方形数=(11+1)(2-1)=12.
总的是1386+12=1398.
另外。如前面所说。7X12的方格就是边长为6和11的矩形
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
 楼主| 发表于 2013-4-6 15:42:10 | 显示全部楼层
m13890 发表于 2013-4-6 15:10
求大神帮我分析下我这个哪有问题。。
#include
using namespace std;

汗一个。、。。我也不会做、、、
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

9

好友

1214

积分

Continue

积分
1214
发表于 2013-4-6 15:44:36 | 显示全部楼层
foodszhu 发表于 2013-4-6 15:42
汗一个。、。。我也不会做、、、

- -大家都说是边界什么的,我着实找不到哪有问题。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
 楼主| 发表于 2013-4-6 15:45:21 | 显示全部楼层
computingbear 发表于 2013-4-6 15:10
能稍微解释一下第二题的第三个样例的1398是怎么得出来的吗?

这你已经会了就不说了吧。。。在这个题目下一个N X M 的网格中最多有N * M *(N - 1) * (M - 1)/4个长方形。。,剩下的组到最长的那个边上就好了。。。
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

16

好友

5383

积分

序章

积分
5383
发表于 2013-4-6 16:47:19 | 显示全部楼层
虽然很挫,我还是想问问这段代码如何OLE了

[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int n=0,m=0;
typedef struct
{
             char str[50];   
           
}Dstring ;
Dstring Chu[50];
Dstring BE[50];


int Int()
{
        int i=0,t;
        char c;
        scanf("%d%d",&n,&m);
        fflush(stdin);
        i=0;
        t=m;
        while(t--)
        {
                        scanf("%s",BE.str);
                        c=getchar();
                        scanf("%s",BE[i+1].str);
                        c=getchar();

                i+=2;
        }
        i=0;
        c='1';
        while(c!='\n')
        {
                scanf("%s",Chu.str);
                c=getchar();
                i++;
        }
        return i;
}


void bijiao(int l)
{

        int i,j,t,flag1=1;
        for(flag1;flag1<n;flag1++)
                {for(i=0;i<2*m;i+=2)
                        for(j=0;j<l;j++)
                                if(strcmp(BE.str,Chu[j].str)==0)
                                {strcpy(Chu[j].str,BE[i+1].str);break;}
                        
        }
}
               
        
        void main()
{        int T,i,flag,j;
        scanf("%d",&T);
  while(T)
        {
        flag=Int();
        bijiao(flag);
        for(j=0;j<T-1;j++)
        {        printf("Case #%d: ",j+1);
                for(i=0;i<flag;i++)
                        printf("%s ",Chu.str);
                printf("\n");
        }
        T--;
    }


}
[/mw_shl_code]
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
 楼主| 发表于 2013-4-6 16:49:01 | 显示全部楼层
m13890 发表于 2013-4-6 15:41
在组成完7X12的方格后,还剩下2个棋子没摆。再摆上去就会多出很多的长方形。
我自己编的算法是: 多出的长 ...

打完游戏神清气爽,小数据也算是水过了,直接穷举。。。反正小数据就那么点。。。。
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
 楼主| 发表于 2013-4-6 17:02:45 | 显示全部楼层
绯色基 发表于 2013-4-6 16:47
虽然很挫,我还是想问问这段代码如何OLE了

[mw_shl_code=c,true]#include

while(T)
        {
        flag=Int();
        bijiao(flag);
        for(j=0;j<T-1;j++)
        {        printf("Case #%d: ",j+1);
                for(i=0;i<flag;i++)
                        printf("%s ",Chu.str);
                printf("\n");
        }
        T--;
    }

你不觉得你循环套的有点多么。。。。不但case没有对应上,而且还多了n多。。。
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
 楼主| 发表于 2013-4-6 17:08:46 | 显示全部楼层
m13890 发表于 2013-4-6 15:16
总体分两步:1.算出给出的棋子能在M,N中形成的最大矩阵。(分两种情况。一是矩阵的扩大受M或N的边界限制 ...

算法整体大概没错。。。但是这个最大矩阵找法可能并没有你想法那么简单,或许有其他情况。。或者是我想复杂了。。。反正我穷举举出最大矩阵。。。。剩下可能错的地方是你剩余棋子在排的时候忽略了限制,比如其实只有2 * 2的格子,你却有十几个石子,多的也不能再下了。。。解决了这两个问题, 应该就可以过了
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

16

好友

5383

积分

序章

积分
5383
发表于 2013-4-6 17:19:45 | 显示全部楼层
foodszhu 发表于 2013-4-6 17:02
while(T)
        {
        flag=Int();

好吧,我也觉得,谢谢指出。我再改改
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

9

好友

1214

积分

Continue

积分
1214
发表于 2013-4-6 17:26:11 | 显示全部楼层
foodszhu 发表于 2013-4-6 17:08
算法整体大概没错。。。但是这个最大矩阵找法可能并没有你想法那么简单,或许有其他情况。。或者是我想复 ...

前面这个我是想正方形优先,后面的这个问题我考虑到了的,代码上有限制。我只是没表述出来。
样例中的3 3 8就是这样。   4 4 8  的输出是6。   3 3 8的输出是5.
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
 楼主| 发表于 2013-4-6 17:40:40 | 显示全部楼层
m13890 发表于 2013-4-6 17:26
前面这个我是想正方形优先,后面的这个问题我考虑到了的,代码上有限制。我只是没表述出来。
样例中的3 3 ...

正方形优先肯定是错的。。。这个毫无疑问内。。。在这个问题上,正方形所带来的优势并不比非常接近与正方形的长方形多多少那。。。只能说如果恰好够一个正方形,那么正方形的最大。。。
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

11

好友

1715

积分

Continue

积分
1715
发表于 2013-4-6 19:24:38 | 显示全部楼层
居然都不讨论第3题……伤心
第3题不会啊……先LCA,然后……
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(Z站|基宅) ( 粤ICP备18082987号-1 )

GMT+8, 2025-5-1 23:32 , Processed in 0.107279 second(s), 20 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表