acgo题库
  • 首页
  • 题库
  • 题单
  • 竞赛
  • 讨论
  • 排行
  • 团队
  • 备赛专区

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
登录
注册
题目详情题解(5)讨论(1)提交记录(0)
  • 题解

    广搜

    userId_undefined

    复仇者_帅童

    小有名气CSP-J一等奖出题人
    116阅读
    3回复
    1点赞
  • 题解

    userId_undefined

    李睿尧

    秩序白银
    60阅读
    5回复
    0点赞
  • 打表好

    注意到数据范围十分甚至九分的小,所以可以打表。 首先写一个很朴素的生成程序: n≤10n\leq 10n≤10 的时候,程序跑得飞快。n=11n=11n=11 时,有点慢了。n=12,13n=12,13n=12,13时,前三个解都可以正确跑出,但是解的数量迟迟跑不出。我们OEIS一下,n=12,13n=12,13n=12,13 时的解数也知道了。 然后就直接打表啦~

    userId_undefined

    暑 假 神(开学祭

    81阅读
    0回复
    0点赞
  • 题解

    #include <bits/stdc++.h> using namespace std; const int N = 1e3 + 10; int visx[15], visy[15], vis1[30], vis2[30], n; vector<int> a; // 判断 x,y 能不能放 bool check(int x, int y) { if(visx[x] == 1)return false; if(visy[y] == 1)return false; if(vis1[y - x + n] == 1)return false; if(vis2[x + y] == 1)return false; return true; } int cnt; void dfs(int deep) { if(deep == n + 1){ cnt++; if(cnt <= 3){ for(int i = 0; i < n; i++)cout << a[i] << " "; cout << '\n'; } return; } for(int i = 1; i <= n; i++) { if(!check(deep, i))continue; visx[deep] = 1; visy[i] = 1; vis1[i - deep + n] = 1; vis2[i + deep] = 1; a.push_back(i); dfs(deep + 1); a.pop_back(); visx[deep] = 0; visy[i] = 0; vis1[i - deep + n] = 0; vis2[i + deep] = 0; } } int main() { cin >> n; dfs(1); cout<<cnt<<'\n'; }

    userId_undefined

    john

    52阅读
    0回复
    0点赞
  • 偏分

    userId_undefined

    Q

    6阅读
    1回复
    1点赞
首页