Bzoj1479: [Nerrc1997]Puncher打孔机
1479: [Nerrc1997]Puncher打孔机
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 22 Solved: 14
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
HINT
题解:
G0uv 表示每条边上都至少有一个格子被染色的u行v列的矩阵,总的染色方案数。
G1uv 表示每条边上都至少有一个格子被染色的u行v列的矩阵,其通过旋转180度保持不变的染色方案数。
G2uv 表示每条边上都至少有一个格子被染色的u行u列的矩阵,其通过旋转90度或270度保持不变的染色方案数。
G3uv 表示每条边上都至少有一个格子被染色的u行v列的矩阵,其通过上下翻转保持不变的染色方案数。
G4uv 表示每条边上都至少有一个格子被染色的u行v列的矩阵,其通过左右翻转保持不变的染色方案数。
G5uv 表示每条边上都至少有一个格子被染色的u行u列的矩阵,其通过沿某条对角线翻转保持不变的染色方案数。
求得所有的G值,F值就只需套用引理即可。而的求法也都大同小异。
• 求法:容斥原理!!!
就是应用容斥原理,将所有格子任意染色,减去第一行或者第u行或者第一列或者第v列没染色,再加上第1行和第u行均未染色……即:

旋转180度不变,实际上就是前个格子任意染色,然后剩下的格子染色情况则由这些格子旋转得到,同样需要应用容斥原理:

旋转90度或者270度,则是由左上角的个格子任意染色,然后剩下的格子染色情况则由这些格子旋转得到,同样需要应用容斥原理:

上下翻转,则是由上半部分的个格子任意染色,然后剩下的格子染色情况则由这些格子旋转得到,同样需要应用容斥原理:

左右翻转,则是由半边部分的个格子任意染色,然后剩下的格子染色情况则由这些格子旋转得到,同样需要应用容斥原理:

沿对角线翻转,则是由对角线上面部分的个格子任意染色,然后剩下的格子染色情况则由这些格子旋转得到,同样需要应用容斥原理:



完美解决!!!
参考文献: 《Puncher》解题报告
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#define ll long long
using namespace std;
ll ans;
int n,m;
int read()
{
int x=,f=; char ch;
while (ch=getchar(),ch<''||ch>'') if (ch=='-') f=-;
while (x=x*+ch-'',ch=getchar(),ch>=''&&ch<='');
return x*f;
}
ll ksm(ll x,int k)
{
ll res=;
for (int i=k; i; i>>=,x*=x) if (i&) res*=x;
return res;
}
ll get0(int u,int v)
{
ll res=;
res=ksm(,u*v)
-ksm(,(u-)*v)*-ksm(,u*(v-))*
+ksm(,(u-)*(v-))*+ksm(,(u-)*v)+ksm(,u*(v-))
-ksm(,(u-)*(v-))*-ksm(,(u-)*(v-))*
+ksm(,(u-)*(v-));
return res;
}
ll get1(int u,int v)
{
ll res=;
res=ksm(,ceil(u*v/2.0))
-ksm(,ceil(u*v/2.0)-u)-ksm(,ceil(u*v/2.0)-v)
+ksm(,ceil(u*v/2.0)-u-v+);
return res;
}
ll get2(int u,int v)
{
ll res=;
res=ksm(,ceil(u*v/4.0))-ksm(,(ceil(u*v/4.0)-u+));
return res;
}
ll get3(int u,int v)
{
ll res=;
res=ksm(,ceil(u/2.0)*v)
-ksm(,ceil(u/2.0)*(v-))*-ksm(,(ceil(u/2.0)-)*v)
+ksm(,ceil(u/2.0)*(v-))+ksm(,(ceil(u/2.0)-)*(v-))*
-ksm(,(ceil(u/2.0)-)*(v-));
return res;
}
ll get4(int u,int v)
{
ll res=;
res=ksm(,u*ceil(v/2.0))
-ksm(,(u-)*ceil(v/2.0))*-ksm(,u*(ceil(v/2.0)-))
+ksm(,(u-)*ceil(v/2.0))+ksm(,(u-)*(ceil(v/2.0)-))*
-ksm(,(u-)*(ceil(v/2.0)-));
return res;
}
ll get5(int u,int v)
{
ll res=;
res=ksm(,u*(u+)/2.0)-ksm(,(u-)*u/2.0)*+ksm(,(u-)*(u-)/2.0);
return res;
}
ll get(int u,int v)
{
ll res=;
if (v==)
{
if (u==) return ;
return (ksm(,u-)+ksm(,(u+)/2.0-))/2.0;
}
else
{
if (u==v)
{
res=(get0(u,v)+get1(u,v)+*get2(u,v)+get3(u,v)+get4(u,v)+*get5(u,v));
return res/;
}
else if (u>v)
{
res=(get0(u,v)+get1(u,v)+get3(u,v)+get4(u,v));
return res/;
}
}
}
int main()
{
n=read(); m=read();
for (int u=; u<=max(n,m); u++)
for (int v=; v<=min(u,min(n,m)); v++)
ans+=get(u,v);
printf("%lld\n",ans);
return ;
}
Bzoj1479: [Nerrc1997]Puncher打孔机的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【bzoj1479】[NOI2006]最大获利
1497: [NOI2006]最大获利 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 4335 Solved: 2123[Submit][Status] ...
- C#的前世今生,学会C#还能找到高薪工作吗?
其实C#,.net正在逐步淡出程序员的视野是正在发生的现实,量子及量子的小伙伴们,还在坚持写C#代码的人几乎没有了,回忆起过去那些写C#时候的美好时光,真是不胜唏嘘,最近园子里的一篇<C#程序员 ...
- MQL4程序:一个号称成功率100%的EA程序 .mq4
用mt4平台所提供的mql4语言编写.风险与利润同在,高风险可博得高利润.自己把握.已经测试通过,下 ...
- Java语言概述
1.1 基础知识 ·第一代语言 打孔机--纯机器语言 ·第二代语言 汇编 ·第三代语言 C.Pascal.Fortran面向过程的语言 C++面向过程/面向对象 Java跨平台的纯面向对象的语言 .N ...
- <老友记>学习笔记
这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...
- 当C++学到第20天的时候我崩溃了(找回刚开始的激情)
首先声明,我是个使用多语言(ASM/C/C++/Java/Perl)的人,主要使用C++和Java所以我认为我的意见还算中肯.那些否定C++的人,你们是否了解————Borland鼓吹Delphi如何 ...
- 【C++探索之旅】开宗明义+第一部分第一课:什么是C++?
内容简介 1.课程大纲 2.第一部分第一课:什么是C++? 3.第一部分第二课预告:C++编程的必要软件 开宗明义 亲爱的读者,您是否对C++感兴趣,但是C++看起来很难,或者别人对你说C++挺难的, ...
- Machine Learning/Random Projection
这次突然打算写点dimension reduction的东西, 虽然可以从PCA, manifold learning之类的东西开始, 但很难用那些东西说出好玩的东西. 这次选择的是一个不太出名但很有 ...
随机推荐
- HDU - 2802 F(N) (周期)
题目链接:HDU 2009-4 Programming Contest 分析:具有一定的周期性——4018处理下就可以A了 Sample Input Sample Output AC代码: #incl ...
- jsonp的简单实现
jsonp: function(url, data, callback){ if( wfQuery.isFunction(data) ){ callback = data; data = {}; } ...
- java OPENCV 连通域, Imgproc.findContours 例子,参数说明
http://stackoverflow.com/questions/29491669/real-time-paper-sheet-detection-using-opencv-in-android/ ...
- 免费vpn:SoftEther VPN
Google it. 注意下载2.0版的,不要下载最新版的.
- mysql date range
http://stackoverflow.com/questions/9935690/mysql-datetime-range-query-issue " ";
- Linux批量替换文本,文件夹内所有文本内容
1.替换文件夹内所有文件匹配的字符串 sed -i "s/旧内容/新内容/g" `grep 旧内容 -rl 文件夹路径` 例如将/var/www/test文件夹下的所有文件内容中的 ...
- SD卡的SPI模式的初始化顺序(转)
为了使SD卡初始化进入SPI模式,我们需要使用的命令有3个:CMD0,ACMD41,CMD55(使用ACMD类的指令前应先发CMD55,CMD55起到一个切换到ACMD类命令的作用). 为什么在使用C ...
- CASpringAnimation
iOS9新出现的 /** Subclass for mass-spring animations. */ @interface CASpringAnimation : CABasicAnimation ...
- IE6里面子集尺寸大的会把父亲撑大
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Android之EditText控件
<EditText android:layout_width="fill_parent" android:layout_height="wrap_content&q ...