构造问题(special judge)

构造问题的关键在于找出通用解决方案并编程实现。2015年ICPC北京站I题'snake carpet'要求按特定规则排列蛇的转折点。对于小规模数据,使用递归是有效方法。题目中,奇数编号的蛇需有奇数转折点(除1外),偶数编号的蛇需有偶数转折点(除2外)。通过等差数列公式确定蛇的位置,如n为偶数时,长边加2,短边为n/2,可以添加转折点为2的蛇;对于奇数n,通过特定方式填充满足递推规律。
摘要由CSDN通过智能技术生成

构造问题的核心就是推出通式解决问题,找到一个手填的一般方案,这才能编程表达出来。。

在数据规模较小的时候优先考虑递归 

 

2015 icpc 北京站 I 题  snake carpet

题目大意:有n条蛇,第i条蛇长度为i,要求第奇数个蛇有奇数个转折点(除了1)第偶数个蛇有偶数个转折点(除了2)

密铺矩形,输出矩形的长宽 并顺序输出蛇的坐标

思路:

先固定矩形,根据等差数列公式:偶数:n+1 , n/2   奇数: n , (n+1)/2

例如:7->(4,7)  8->(4,9)

考虑n比较小,可以用递推来写。

n为偶数时:注意到从奇数n-1到偶数n的矩形变化是长边+2,而此时的短边正好是n/2,正好可以添加一个转折点为2的蛇

n为奇数时:比较复杂。。我没有发现往前推两个到上一个奇数的合法填法,所以我再往前推了一个推到 (n-3)这个偶数

按照如图的方式填蛇可以满足递推规律,先打前三个的表,然后递推完事

#include <iostream>
using namespace std;
void solve(int n)
{
    if(n==1)
    {
        cout<<"1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值