zoukankan      html  css  js  c++  java
  • Jzoj4764 Brothers

    在遥远的西方有一个古老的王国,国王将他的王国分成了网格状,每一块称之为一个城市。在国王临死前,他将这些城市分给了自己的N个儿子(编号为0到N-1)。然而这N个王子的关系不是很好,0讨厌1,1讨厌2,2讨厌3……N-1讨厌0。
    在国王死后,这种不好的关系使得王子之间爆发了战争。战斗只会在相邻的两个城市之间爆发(共有一条边称之为相邻),并且只有当A讨厌B时,A才会对B发起战斗,结果必定是A获得这次战斗的胜利。当一方胜利后,他所进攻的城市就会变成进攻方的。许多战斗是同时发生的,我们称之为一场战役。当多场战役发生之后,剩下的王子将不再发生战争。
    例如,如果有3个王子,那么战斗过程如下所示:

    我们发现数据足够小所以可以暴力,O(R^C^K)

    #include<stdio.h>
    #include<string.h>
    const int w[2][4]={{0,0,-1,1},{-1,1,0,0}};
    int n,r,c,k,s[110][110],t[110][110];
    inline int cal(int x){ return x>1?x-1:n; }
    int main(){
    	scanf("%d%d%d%d",&n,&r,&c,&k);
    	for(int i=1;i<=r;++i)
    		for(int j=1;j<=c;++j)
    			scanf("%d",s[i]+j),s[i][j]++;
    	memcpy(t,s,sizeof s);
    	for(;k--;){
    		for(int i=1;i<=r;++i)
    			for(int j=1;j<=c;++j){
    				for(int x=0;x<4;++x)
    					if(s[i+w[0][x]][j+w[1][x]]==cal(s[i][j])) t[i][j]=cal(s[i][j]);
    			}
    		memcpy(s,t,sizeof s);
    	}
    	for(int i=1;i<=r;++i,puts(""))
    		for(int j=1;j<=c;++j)
    			printf("%d ",s[i][j]-1);
    }

  • 相关阅读:
    LeetCode——二叉树中的最大路径和
    LeetCode——验证回文串
    LeetCode——word-ladder*
    LeetCode——最长连续序列
    3G? 2G? 2.5G? 4G? 与 WIFI, GPRS,CDMA 3G无线上网
    GSM、GPRS、EDGE、2G、3G与WAP的关系
    3G 2G GPRS 1G的概念
    那些精华博客
    单片机系统与标准PC键盘的接口模块设计
    以多个实例方式打开Notepad++
  • 原文地址:https://www.cnblogs.com/Extended-Ash/p/9477284.html
Copyright © 2011-2022 走看看