zoukankan      html  css  js  c++  java
  • 2021 年百度之星·程序设计大赛

    Problem Description

    有一个环,环上有 nn 个位置,它们的编号为 1...n1...n

    位置 i(1<i<n)i(1<i<n) 左右两边分别是位置 i−1i−1 和位置 i+1i+1,位置 1 左右两边分别是位置 nn 和位置 2,位置 nn 左右两边分别是位置 n−1n−1 和位置 1。

    现在,我们要玩一个游戏。初始我们在位置 1,游戏共 n−1n−1 轮,对于第 i(1≤i<n)i(1≤i<n) 轮,我们可以选择从当前位置往左或往右连续走 ii 个位置。

    现在我们想知道,对于给定的 nn,有多少种方案,使得我们停留的 nn 个位置(初始的位置 1 和 n−1n−1 轮中每一轮结束时候的位置)没有重复。

    赛时看到数据范围傻逼,直接打了个表交上去就过了...

    正解待补

    #include <bits/stdc++.h>
    using namespace std;
    int cnt = 0;
    bool v[88];
    int n;
    void dfs(int x, int pos) {
    	if(x == n) {
    		cnt++;
    		return;
    	}
    	int p1 = (pos + x) % n;
    	if(!p1) p1 = n;
    	if(!v[p1]) {
    		v[p1] = 1;
    		dfs(x + 1, p1);
    		v[p1] = 0;
    	}
    	int p2 = (pos + n - x) % n;
    	if(!p2) p2 = n;
     	if(!v[p2]) {
    		v[p2] = 1;
    		dfs(x + 1, p2);
    		v[p2] = 0;
    	}
    }
    int main() {
    	for(int i = 1; i <= 80; i++) {
    		n = i;
    		memset(v, 0, sizeof(v));
    		cnt = 0;
    		v[1] = 1;
    		dfs(1, 1);
    		cout << cnt << ", ";
    	}
    	return 0;
    }
    
  • 相关阅读:
    接水果(fruit)——整体二分+扫描线
    大融合——LCT维护子树信息
    魔卡少女(cardcaptor)——线段树
    而立之年的一些人生感悟
    PHP 输出缓冲控制(Output Control) 学习
    我所了解的cgi
    c语言指针学习
    ubuntu 安装 zend studio
    Zend_Controller_Front 研究
    php autoload 笔记
  • 原文地址:https://www.cnblogs.com/lipoicyclic/p/15112491.html
Copyright © 2011-2022 走看看