COJ 0020 30201象棋中的皇后

题解:其实是一道计数好题。。。

先得有个公式:多项平方和公式:1^2+2^2+3^2+…+n^2=n(n+1)(2n+1)/6

竖着的、横着的都还好。对于对角线,窝萌只要注意到长度的变化即可,别忘了有两条对角线!

然后算一下发现并不会溢出,所以就这样了。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<cstring>
 7 #define PAU putchar(‘ ‘)
 8 #define ENT putchar(‘\n‘)
 9 using namespace std;
10 inline unsigned long long read(){
11     unsigned long long x=0,sig=1;char ch=getchar();
12     while(!isdigit(ch)){if(ch==‘-‘) sig=-1;ch=getchar();}
13     while(isdigit(ch)) x=10*x+ch-‘0‘,ch=getchar();
14     return x*sig;
15 }
16 inline void write(unsigned long long x){
17     if(x==0){putchar(‘0‘);return;}if(x<0) putchar(‘-‘),x=-x;
18     int len=0;unsigned long long buf[15];while(x) buf[len++]=x%10,x/=10;
19     for(int i=len-1;i>=0;i--) putchar(buf[i]+‘0‘);return;
20 }
21 unsigned long long n,m;
22 void init(){
23     n=read();m=read();
24     if(n>m) swap(n,m);
25     write(n*m*(n+m-2)+2*n*(n-1)*(3*m-n-1)/3);
26     return;
27 }
28 void work(){
29     return;
30 }
31 void print(){
32     return;
33 }
34 int main(){
35     init();work();print();return 0;
36 }

  

时间: 2024-10-07 06:32:35

COJ 0020 30201象棋中的皇后的相关文章

UVA 11538【象棋中的皇后】Chess Queen

1.问题描述 本题主要是讲如何在一个给定的n*m棋盘中放置互相攻击的皇后(处于同一行,或者同一列,或者对角线上的任意两个位置(都不一定两者相邻)),求所能得到互相攻击的皇后的情况. 2.题意分析 本题主要考查加法原理和乘法原理的应用.根据题意可知,我们可以氛围以下方法进行分类求解(加法原理): (1)处于同一行的相互攻击的皇后种数: (2)处于同一列的相互攻击的皇后种数: (3)处于对角线的相互攻击的皇后种数(我们假设n<=m): 本公式很容易证明得出结果. 那么最后的结果我们可以归纳为: 3.

例题2.1 象棋中的皇后 UVa11538

1.题目描述:点击打开链接 2.解题思路:本题利用加法原理解决.本题要求统计有多少种放置方法,可以使两个皇后相互攻击.因为只有2个皇后,而能够相互攻击的情况只有3种:同一行,同一列,同一对角线.这3种情况都没有交集,因此可以使用加法原理.设三种情况对应的方案数分别为A(n,m),B(n,m),D(n,m).下面讨论如何计算这三个值. A(n,m)的计算可以利用乘法原理:首先选择一格,一共有nm种选法,接下来再选一行中的其他位置,一共只有m-1个位置,因此A(n,m)=nm(m-1). B(n,m

象棋中常用的最小值最大值算法及剪枝算法

1.象棋中通常需要推算当前局面下,每走一步之后的局面分,通常我们可以设定考虑几步棋,通常我们所说的算棋,而计算机的AI算法中最常用的就是最大值最小值算法,而剪枝算法是对最大值最小值算法的一种优化. 如上图所示: 1.如果在当前局面下,假设有三步可走的棋,走完之后得到的局面分分别为100,80,90,如果仅考虑一步的情况下,当然是选100所对应的棋走,这是最简单也是最短视的走法,这样的AI会让人认为太笨了.此时level=1 2.如果考虑两步棋的情况,走完第一步之后,轮到对方走了,对方走完之后,此

C#中八皇后问题的递归解法——N皇后

百度测试部2015年10月份的面试题之——八皇后. 八皇后问题的介绍在此.以下是用递归思想实现八皇后-N皇后. 代码如下: using System;using System.Collections.Generic; namespace QueensSolution { class Program { static int count = 0; static void Main(string[] args) { int n = Int32.Parse(Console.ReadLine()); L

【tool】运用因果图法设计象棋中马行走路线的测试用例

因果图法设计用例 需求规格: 1.如果落点在棋盘外,则不移动棋子; 2.如果落点与起点不构成日字型,则不移动棋子; 3.如果落点处有自己方棋子,则不移动棋子; 4.如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子; 5.如果不属于1-4条,且落点处无棋子,则移动棋子; 6.如果不属于1-4条,且落点处为对方棋子(非老将),则移动棋子并除去对方棋子; 7.如果不属于1-4条,且落点处为对方老将,则移动棋子,并提示战胜对方,游戏结束. 一.原因条件: 1. 落点在棋盘上; 2. 落点与起点构

基于VB中WINSOCK控件的网上象棋系统的实现

本文发表在<微型机与应用>杂志2001年第3期. 马根峰1   ,  孙艳2  , 王平1 (1.重庆邮电学院自动化学院,重庆,400065:2. 铁道部第十九工程局四处,内蒙 通辽,028000 )  摘要     本文首先介绍了Visual Basic中的WINSOCK控件的使用方法,然后深入探讨了网上象棋系统的设计思想及其实现过程. 关键词    WINSOCK控件:TCP:UDP 中图分类号: 文献标识码: 1      引言 MicrosoftVisual Basic 是可视化的.面

BZOJ 4806 - 4809 象棋四题

4806: 炮 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 103  Solved: 72[Submit][Status][Discuss] Description 众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子". 炮跟炮显然不能在一起打起来,于是rly一天借来了许多许多的炮在棋盘上摆了起来……他想知道,在N×M的矩形 方格中摆若干炮(可以不摆)使其互不吃到的情况下方案数有几种. 棋

团队-编程项目 中国象棋-需求分析

需求分析: 1.棋盘和棋子的绘制 2.按照象棋规则对棋子进行布局   3.鼠标响应 : 在对弈中,棋子是必须可以移动的,不然游戏无法进行.因此,鼠标左键点击是必不可少的一部分. 4.棋子的功能分析:  中国象棋中各色的象棋棋子的功能使象棋具有了真正的趣味性,中国象棋的棋子的类型大致分为:帅(将).士.象.马.车.炮.兵(卒)等几个类型.  帅(将):红方中的帅和黑方中的将的功能相同,都是只能在九宫格中进行横向和竖向的移动,每次移动一格,并且不能移动超出九宫格,帅和将不能见面.  士:士在整片棋盘

14-n皇后

/*题目内容: 国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧.该题要求N皇后的放置结果共有多少种 输入描述 输入一个正整数N(N小于16) 输出描述 输出结果输入样例8 输出样例92*/ #include <iostream>#include <algorithm>using namespac