n*n的棋盘,放n个皇后,互不攻击
一、当n%6 != 2 且 n%6 != 3时,有一个解为:
2,4,6,8,...,n, 1,3,5,7,...,n-1 (n为偶数)
2,4,6,8,...,n-1, 1,3,5,7,...,n (n为奇数)
(上面序列第i个数为ai,表示在第i行ai列放一个皇后;... 省略的序列中,相邻两数以2递增。下同)二、当n%6 == 2 或 n%6 == 3时,
(当n为偶数,k=n/2;当n为奇数,k=(n-1)/2)
k,k+2,k+4,...,n,-2,4,...,k-2,-k+3,k+5,...,n-1,-1,3,5...
就是求各种进制下求mod;
m没有超给过long int 的界限,所以可以直接装换成long int 行
但是p很大。
我的方法是把每一位提出来求mod,
比如输入为2 11001 1000
变成(1*2^4modm+1*2^3modm+1modm)mod m
代码:
#include <iostream>#include <math.h>using namespace std;__int64 mod(__int64 a,__int64 b){return (a%b+b)%b;}__int64 ctoi(char *a,int bb){ __int64 ans...
这题的数量过大,我能想到的就只有离散化。
然后我试着从左到右的直接算出来,很不幸超时。
最后在万般无赖的情况下,只好使用线段树来构造。
开始的时候我还想本着优化程序的原则,没有把线段树当作树状数组来使用,但是很不幸的是错了很久我都不知道为什么。
后来发现了以后,直接把每个都下到最底层(本来还是有优化的,但是废去了一个晚上,我也就不想什么有化不优化的了)
哎~~~~~~
代码写得非常的有问题,没有严格测试过,慎用!!!
#include<cstdio>#include<cstring>#include<algorithm>#include<iostre...
这道题是典型的凸包题
关于凸包的算法可以去http://baike.baidu.com/view/707209.htm这里看到。
题目的意思就是求凸包周长再加上一个圆的面积.
这到题让我知道了,原来排序是sort()和qsort()都是不稳定的,为此我wa了很多次。
最后还是做出来,不容易啊。
代码:
#include <iostream>#include <algorithm>#include <vector>#include <math.h>#define pi 3.141592653589using namespace std;typ...
2352 Stars xiedi.rar(204 KB)
这道题我是用的线段树的特例,点数来完成的,算法可以看附件中,谢迪大牛的PPT。
源代码:
#include <iostream>using namespace std;typedef struct Node{ int l,r; int count;}node;class PointTree //点数类{ private: node p[1<<18]; public: void init_tree(int l,int r...
线段树用于实现动态删除和插入某一线段的操作,进行扩张后可以求一个点在多少个线段上,线段一共有多长,求出线段的覆盖,等操作。
以下是来自http://hi.baidu.com/alpc62/blog/item/469edeca0043e382c8176875.html的blog,
要查看原文可以到他那里去看。
举例说明:已知线段[2,5] [4,6] [0,7];求点2,4,7分别出现了多少次
在[0,7]区间上建立一棵满二叉树:(为了和已知线段区别,用【】表示线段树中的线段)
【...
这几天放假耍了几天,没有ACM题可贴,就只有贴作业了,很水的作品请指教
源代码:
/*************************************** c++编程题 定义一个三角形类求三角形面积和周长 keloy 2008.4.7****************************************/#include <iostream>#include <math.h>using namespace std;class Ctriangle ...
广度搜素,用链表写的,代码很差,时间也很慢。不知道还有什么好方法,貌似是有的,有人用0ms过了。
#include <iostream>int chess[301][301]={0};using namespace std;typedef struct bound{ int x; int y; int count; struct bound *next; }Set;int main(){ int n; cin >>n; while(n--) { int l...
这是一道不错的数学题,开始的时候就只想到于三进制有关系,由于还有一个最优化的问题……开始还以为需要用到深搜的策略。
但是正确的解法却也是因为三进制才没有使用深搜的策略。
以三进制表示一个数:
1.如果数位上为1,则应该在右侧放上一个权值。
2.如果数位上为2,则该在左侧放上一个权值。
3.如果位数上为0,则什么都不需要做。
源代码:
#include <iostream>#include <vector>#include <math.h>using namespace std;int main(){ int n; cin ...