Codeforces Round #454 D. Seating of Students

来源:互联网 发布:淘宝美工将来有前途么 编辑:程序博客网 时间:2024/06/16 18:16

题意

就是给你nm的矩阵
一开始矩阵每个点的坐标就是(i1)m+j
然后你需要构造一个新的矩阵
使得新的矩阵没有任何两个坐标在原矩阵中相邻

前言

昨晚看完A就去做D了。。
感觉很浓的构造气息。。
如果n和m大的话,还是很好做的。。
但是小的就不是很好做了。。
在加上很困,于是就没做出来

题解

感觉大体上有两个做法

1.n和m5的手玩,大的构造
构造方法还是比较简单的就是奇数大概就是1,3,5,7,9…..2,4,6,8,10…
偶数就反过来

2.随机化
考虑到大的话成功的可能性很大
但是小的话情况不多
于是我们可以考虑随机化。。
大概就是随机填数,然后多次尝试,就可以过了
CODE:

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<vector>using namespace std;const int N=100005;int n,m;vector<int> lalal[N];vector<int> a[N],b[N];int fx[4]={-1,0,0,1};int fy[4]={0,-1,1,0};bool ok[N];bool check (int o,int x,int y){    if (x<=0||y<=0) return false;    int size=lalal[o].size();    for (int u=0;u<size;u++)        if (lalal[o][u]==b[x][y])            return true;    return false;}int myrand (){    return rand()*rand()%(n*m)+1;}void solve (){    int num;    for (int u=1;u<=n;u++)        for (int i=1;i<=m;i++)        {            num=0;            int x=myrand();            while ((num<=(n*m)*2)&&(ok[x]==false||check(x,u-1,i)||check(x,u,i-1)))            {                x=myrand();                num++;            }            if (num>(n*m)*2)    return ;            ok[x]=false;            b[u][i]=x;        }    printf("YES\n");    for (int u=1;u<=n;u++)    {        for (int i=1;i<=m;i++)            printf("%d ",b[u][i]);        printf("\n");    }    exit(0);}int main(){    srand(87);    scanf("%d%d",&n,&m);    for (int u=1;u<=n;u++)    {        a[u].resize(m+5);        b[u].resize(m+5);        for (int i=1;i<=m;i++)            a[u][i]=(u-1)*m+i;    }    for (int u=1;u<=n;u++)        for (int i=1;i<=m;i++)            for (int j=0;j<4;j++)            {                int nx=u+fx[j],ny=i+fy[j];                if (nx>=1&&nx<=n&&ny>=1&&ny<=m)                    lalal[a[u][i]].push_back(a[nx][ny]);            }    for (int u=1;u<=100;u++)    {        memset(ok,true,sizeof(ok));        solve();    }    printf("NO\n");    return 0;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 市政一建真题 一建有什么用 建工一建 每年一建考试时间 一建报考网站 一建市政考点 一建证好考吗 一建怎么样 一建建筑专业 哈一建 陕一建 蒙电一建 建一栋楼要多少钱 陕建一建 陕建一小 于建 创建网址 创建skype账户 建工六建 水利水电工程一建 建业小镇 建业 河南建业 戴建业 河南建业吧 建业公棚 建业集团 建业吧 河南建业队 季建业 智慧建业 建业大食堂 郑州建业 建业春天里 建业地产 建业城 建业足球 建业桂园 建业天筑 王建业 建业新筑