September 10th 模拟赛C T3 雕塑 Solution
来源:互联网 发布:暴风影音怎么关闭网络 编辑:程序博客网 时间:2024/05/17 23:49
空降题目处(外网)
点我点我点我
空降题目处(内网)
点我点我点我
Description
Wcyz为了迎接百年校庆,美化校园,请了校友笨笨将n座雕塑,准备安置在校园内,整个校园可以抽象成一个n*n的大网格,每个1*1网格最多只能安置一座雕塑,但是某些1*1的网格上恰好是一个食堂或湖泊,这些网格是不能安置雕塑的,每个雕塑的造型相同,这样同一种安置方案中交换排列都算一种。任意雕塑在同一行或同一列是不合法的方案。
学校想知道有多少种安置方案,笨笨想从中选择最好的一种方案,笨笨想请你告诉他方
Input
第一行,两个整数n,m(n<=20,m<=10),用空格隔开,n表示n*n的大网格,m表示不能安置雕塑的位置
第二行至m+1行,每行两个数x,y,用空格分开,表示坐标(x,y)的1*1 的网格上不能安置雕塑。
Output
一个数,方案种数(方案种数<=2^63-1)
Solution
看到数据范围
再来进行进一步的分析:用
即:
Code
C++
#include<cstdio>#include<cmath>#include<cstring>using namespace std;long long ans,n,m,t[30],r[30],x[30],y[30],ni[30];bool map[30][30],p[30],q[30];void Queen(int t,int l);int main(){ scanf("%lld%lld",&n,&m); for (int i=1;i<=m;i++) { scanf("%lld%lld",&x[i],&y[i]); map[x[i]][y[i]]=true; } Queen(1,0); t[0]=t[1]=1; for (int i=2;i<=n;i++) t[i]=t[i-1]*i; for (int i=0;i<=n;i++) { if (i%2==0) ans+=r[i]*t[n-i]; else ans-=r[i]*t[n-i]; } printf("%lld",ans);}void Queen(int t,int l){ r[t-1]++; bool j,k; if (t>n) return; for (int i=l+1;i<=m;i++) if ((!p[x[i]])&&(!q[y[i]])) { j=p[x[i]]; k=q[y[i]]; p[x[i]]=q[y[i]]=true; Queen(t+1,i); p[x[i]]=j; q[y[i]]=k; }}
Pascal
var n,m,i:longint; s,ans:int64; pd:array[1..20,1..2] of boolean; x,y:array[1..20] of longint; f:array[0..20] of int64;procedure dg(t,sum,h:longint);var i:longint;begin if t>sum then begin inc(s); exit; end; for i:=h to m do if (pd[x[i],1]=false) and (pd[y[i],2]=false) then begin pd[x[i],1]:=true; pd[y[i],2]:=true; dg(t+1,sum,i+1); pd[x[i],1]:=false; pd[y[i],2]:=false; end;end;begin read(n,m); for i:=1 to m do begin read(x[i],y[i]); end; ans:=1; f[0]:=1; f[1]:=1; for i:=2 to n do begin ans:=ans*i; f[i]:=ans; end; for i:=1 to m do begin s:=0; dg(1,i,1); if i mod 2=1 then ans:=ans-s*f[n-i] else ans:=ans+s*f[n-i]; end; write(ans);end.
- September 10th 模拟赛C T3 雕塑 Solution
- September 17th 模拟赛C T3 石子游戏 Solution
- September 10th 模拟赛C T1 电影票 Solution
- September 10th 模拟赛C T2 火炬手 Solution
- September 3rd 模拟赛C T3 数字 Solution
- September 17th 模拟赛C T1 铁轨 Solution
- September 17th 模拟赛C T2 独立集 Solution
- September 24th 模拟赛C T1 电费结算 Solution
- September 24th 模拟赛C T2 序列和 Solution
- June 11th 模拟赛C T3 Cowski Solution
- July 14th 模拟赛C T3 灌水 Solution
- July 16th 模拟赛C T3 圆周舞蹈 Solution
- July 17th 模拟赛C T3 Circle Solution
- December 10th 模拟赛C T3 X-因子链 Solution
- July 15th 模拟赛C T3 最小最大和 Solution
- September 3rd 模拟赛C T1 祖孙询问 Solution
- September 3rd 模拟赛C T2 比赛 Solution
- December 10th 模拟赛C T1 分发糖果 Solution
- S3C2440 LCD驱动(FrameBuffer)实例开发
- 初学移动开发技术_实验二_任务一_打招呼
- Java对XML文档进行解析---实例
- Java NIO概述
- 3-2 构造函数的调用
- September 10th 模拟赛C T3 雕塑 Solution
- Codeforces 710C
- Java实战equals()与hashCode()
- 第三周项目四 顺序表应用2
- 系统启动运行级别
- hdu2550百步穿杨 解报告
- 配置扫描@Controller注解的细节
- Android APK size压缩(瘦身)
- JS中Array方法中常用方法六:Array.prototype.reverse()