codeforce 906 SOL (B)

题目大意:老师要排座位,要求每个人的四周的邻居不是原来的,求方案

题目链接

SOL :min(n,m)<4 就暴搜,否则就构造。

#include<bits/stdc++.h>
using namespace std;
#define N 500017
int n,m,p[N],dx[4] = {0,1,0,-1},dy[4]={1,0,-1,0};
bool check(int i, int j){
    int x=(i-1)/m+1,y=(i-1)%m+1,x2=(j-1)/m+1,y2=(j-1)%m+1;
    for (int k=0;k<4;k++) if (x+dx[k]==x2&&y+dy[k]==y2)  return 1;
    return 0;
}
void write(int x){if (x<10) {putchar(‘0‘+x); return;} write(x/10); putchar(‘0‘+x%10);}
inline void writel(int x){ if (x<0) putchar(‘-‘),x*=-1; write(x); putchar(‘ ‘); }
bool dfs(int i) {
    if (i>=n*m+1) return 1;
    int x=(i-1)/m+1,y=(i-1)%m+1;
    for (int j=i;j<=n*m;j++)  {
      swap(p[i],p[j]);
      if (x^1&&check(p[i],p[(x-2)*m+y])) continue;
      if (y^1&&check(p[i],p[(x-1)*m+y-1])) continue;
      if (dfs(i+1))return 1;  swap(p[i], p[j]);
    }
    return 0;
}
int main(){
    freopen("b.in","r",stdin);
    scanf("%d%d", &n, &m);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            p[(i-1)*m+j]=(i-1)*m+j;
    if (!dfs(1))  return puts("NO"), 0;
    puts("YES");
    for (int i=1;i<=n;i++,putchar(‘\n‘))
        for (int j=1;j<=m;j++)
          writel(p[(i-1)*m+j]);
    return 0;
}  

原文地址:https://www.cnblogs.com/rrsb/p/8298337.html

时间: 2024-10-21 01:14:18

codeforce 906 SOL (B)的相关文章

codeforce 906 SOL (A)

一道英语阅读理解,满满的都是套路,欺负我英文不好(自己去翻译吧,我就不写中文了) 原题链接 我们模拟一遍就好了,如果"!"把句子中没出现的字母排除,"."就排除句子里出现的. 注意答案是从已知那个字母开始统计的. #include<bits/stdc++.h> using namespace std; int n,len,p[28],ot[28],ed,ans,top; char ch[37],s[100007]; int main () { freop

Codeforce 230A - Dragons (sort)

Kirito is stuck on a level of the MMORPG he is playing now. To move on in the game, he's got to defeat all n dragons that live on this level. Kirito and the dragons have strength, which is represented by an integer. In the duel between two opponents

codeforce No to Palindromes!(枚举)

1 /* 2 题意:给定一个字符串中没有任何长度>1的回文子串!求按照字典序的该串的下一个字符串 3 也不包含长度>1的任何回文子串! 4 5 思路:从最低位进行枚举,保证第i位 不与 第 i-1位和第 i-2位相同就好了!那么因为前边i-1 6 位没有长度>1的回文子串,那么前i位也不会出现!最后将最后边的字符按照相同的原则补齐就好了! 7 */ 8 #include<iostream> 9 #include<cstdio> 10 #include<cst

Backbone笔记(续)

Backbone Bockbone 总览 Backbone 与 MVC 模式:解决某一类问题的通用方案 - 套路 MVC:一种架构模式,解耦代码,分离关注点 M(Model) - 数据模型 V(View) - 表现视图 C(Controller) - 控制器 Backbone 与 SPA 传统web应用与 SPA 的区别: 状态概念代替了页面概念 http://www.example.com/page1 http://www.example.com/page2 http://www.exampl

基于汉字字频特征实现99.99%准确率的新闻文本分类器(四)

基于汉字字频特征实现99.99%准确率的新闻文本分类器(一) 基于汉字字频特征实现99.99%准确率的新闻文本分类器(二) 基于汉字字频特征实现99.99%准确率的新闻文本分类器(三) 基于汉字字频特征实现99.99%准确率的新闻文本分类器(四) 回顾 上一节中,使用五层神经网络,对抽取出的汉字字频特征向量进行分类,得到了超过99%的准确率,在高准确率的前提下,没有陷入局部最优解,对一些在训练中,被指定了上千次不是军事类的新闻,只要内容是军事类的,就能被正确的找出,同样,混在军事类新闻里的[慈善

C++11多线程教学(二)

转载自:http://www.cnblogs.com/lidabo/p/3908713.html C++11多线程教学II 从我最近 发布的C++11线程教学文章里,我们已经知道C++11线程写法与POSIX的pthreads写法相比,更为简洁.只需很少几个简单概念,我们就能搭 建相当复杂的处理图片程序,但是我们回避了线程同步的议题.在接下来的部分,我们将进入C++11多线程编程的同步领域,看看如何来同步一组并行的线程. 我们快速回顾一下如何利用c++11创建线程组.上次教学当中,我们用传统c数

C++11多线程教学(一)

转载自:http://www.cnblogs.com/lidabo/p/3908705.html 本篇教学代码可在GitHub获得:https://github.com/sol-prog/threads. 在之前的教学中,我展示了一些最新进的C++11语言内容: 1. 正则表达式(http://solarianprogrammer.com/2011/10/12/cpp-11-regex-tutorial/) 2. raw string(http://solarianprogrammer.com/

JavaScript高级程序设计-读书笔记(6)

第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l        简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串.数值.布尔值和null.但JSON不支持JavaScript中的特殊数值undefined. “Hello world!” l        对象(属性的值可以是简单值,也可以是复杂类型值,如下这样在对象嵌入对象) { “name” : ”Nicholas”, “age” : 29

窗体皮肤实现 - 在标题栏上增加快速工具条(四)

前面做的工作就是想在标题区域增加快速工具条.前续的基础工作完成,想要在标题区域增加特殊区域都非常方便.只要在绘制时控制自定义区域需要占用标题区域多少空间,然后直接在所占位置绘制.做这个事情前,稍微把代码规整了下.所以界面皮肤处理放到一个单元中. 主要处理步骤 1.划出一个新区域(整个工具条作为一个区域) 2.处理区域检测(HitTest) 3.如果是新区域,把相应消息传给这个区域处理. 4.响应鼠标点击,执行Action 通过上述步骤就能扩展出所想要的标题区快速工具条的. 标题按钮区域是作为一个