
-----------ACM-------------
文章平均质量分 78
在ACM中的刷题记录
阿聊
愿我千帆过尽,归来仍是少年
展开
-
hdu 4515 小Q系列故事——世界上最遥远的距离
题目一次就过的日期问题得纪念一下,感谢几组测试数据加法的测试数据: 38 39 282 283 7 8 减法测试数据: 52 87345 24 23 100000答案在Excel中测试吧,主要是很多细节性的问题要考虑到。#include<iostream>#include <algorithm>#include <set>#inc...原创 2019-03-19 13:19:19 · 288 阅读 · 0 评论 -
日期计算
虽然已知日期2011年11月11日是星期五,但是为了方便我还是把2011年1月1日当做基础日期。至于2011年1月1日是星期几,电脑上面有的。。。思路:文字不如图来得形象。如下//已知2011年11月11日是星期五#include<iostream>using namespace std;int leap(int n)//判断闰年{ if((n%4=...原创 2019-03-15 13:33:25 · 10816 阅读 · 0 评论 -
二维map遍历
#include <iostream>#include <cstdio>#include <map>using namespace std;map<int,map<int,int> > mp;int main(){ mp[0][0]=1; mp[0][1]=2; mp[1][0]=3; for(m...原创 2019-04-10 22:32:39 · 926 阅读 · 0 评论 -
矩阵快速幂
矩阵乘法+快速幂用数组来实现:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N=2;int tmp[N][N];void multi(int a[][N],int b[][N],int n){ memset(t...原创 2019-03-13 14:33:32 · 130 阅读 · 0 评论 -
约瑟夫环
约瑟夫问题约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。 例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。首先A开始报数,他报1。侥幸逃过一劫。 然后轮到B报数,他报2。非常惨,他被杀了 C接着从1开始报数 接着轮到A报数,他报2。也被杀死了。 ...转载 2019-02-25 13:21:51 · 37936 阅读 · 7 评论 -
求N!的位数
#include<iostream>#include <cstdio>#include <cmath>using namespace std;const double PI =acos(-1.0);const double e = 2.71828182;int main(){ double ans,res; int n; ...原创 2018-11-30 14:02:50 · 369 阅读 · 0 评论 -
n皇后问题
#include<stdio.h>#include<iostream>using namespace std;int n,ans;int vis[10];//vis[i]:第i行有一个皇后在vis[i]列int check(int r,int c){ for(int i=1;i<=r;i++) { if(vis[i]==c...原创 2018-11-25 12:23:09 · 167 阅读 · 0 评论 -
离散化
思路是:先排序,再删除重复元素,最后就是索引元素离散化后对应的值。假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为:sort(sub_a,sub_a+n);int size=unique(sub_a,sub_a+n)-sub_a;//size为离散化后元素个数for(i=0; i<n; i++) a[i]=lower_bound(s...原创 2018-11-24 13:21:15 · 229 阅读 · 0 评论 -
hdu 1443 Joseph【约瑟夫环】
题目题意:一共有2k个人,分别为k个好人和k个坏人,现在我们需要每隔m个人把坏人挑出来,但是条件是最后一个坏人挑出来前不能有好人被挑出来。。问最小的m是多少约瑟夫环问题,通常解决这类问题时我们把编号设为从0~n-1。求出每一轮出列的人:start = (start + m - 1) % n模拟过程如下(以六个人,第五为例):1 2 3 4 5 6 易发现start1 = (0 ...原创 2018-09-17 15:03:44 · 456 阅读 · 0 评论 -
The writing on the wall
题意:一个n*m的方格矩阵,有的格子被涂成了黑色,问该矩阵中有多少个子矩阵,子矩阵不包含黑色格子;思路:对于一个长为L, 高为H的无黑点矩阵中包含的高为H的子矩阵个数为L+(L-1)+(L-2)+...+1个;这是直接算的一种方法;如何程序表示该计算呢?for(int i=1; i<=L; i++){ for(int j=i; j>0; j--)...转载 2018-09-03 13:38:46 · 194 阅读 · 0 评论 -
hdu 4704 Sum 【费马小定理】
题目题意:将N拆分成1-n个数,问有多少种组成方法。例如:N=4,将N拆分成1个数,结果就是4;将N拆分成2个数,结果就是3(即:1+3,2+2,3+1)……1+3和3+1这个算两个,则这个就是组合数问题。根据隔板定理,把N分成一份的分法数为C(1,n-1), 把N分成两份的分法数为C(2,n-1),把N分成三份的分法数为C(3,n-1),.... ,把N分成N份的分法...原创 2018-08-04 11:03:56 · 244 阅读 · 1 评论 -
mod与%的区别
mod与%的区别 %与mod的区别:%出来的数有正有负,符号取决于左操作数,而mod只能是正;所以要用%来计算mod的话就要用这样的公式:a mod b = (a % b + b) % b;括号中的式子可以把左操作数转变为正数。...翻译 2018-07-26 20:55:45 · 14190 阅读 · 6 评论 -
重载
优先级队列区别于普通队列的一点是:优先级队列如果插入的节点是结构体类型,则要在结构体中重载比较操作符函数。优先队列默认的que插入是从大到小,所以在结构体中要重载<,struct P{ int pos;//position int dis;//distance friend bool operator <(P a,P b) { ...原创 2018-07-21 11:13:32 · 215 阅读 · 0 评论 -
“123”——> 123
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){ char num[110]; scanf("%s",num); int len = strlen(num); int t=1,tmp=0; ...原创 2018-07-17 13:14:53 · 626 阅读 · 0 评论 -
基本模运算
1.概念:模运算是指取模运算,即求m/n的余数。模运算有许多基本规则,熟练掌握可以更好的编程。2.交换律: (a + b) % m = (b + a) % m (a * b) % m = (b * a) % m3.结合律: [(a+b)%m+...转载 2018-07-16 19:42:23 · 1667 阅读 · 0 评论 -
java 格式化输出 printf 总结
doubled=345.678; Strings="hello!"; inti=1234; //"%"表示进行格式化输出,"%"之后的内容为格式的定义。 System.out.printf("%f",d);//"f"表示格式化输出浮点数。 System.out.printf("%9.2f",d);//"9.2"中的9表示原创 2018-03-23 14:14:50 · 2482 阅读 · 0 评论 -
vim 配置半透明
转载两个博客 链接一链接二原创 2017-11-03 17:52:50 · 3068 阅读 · 0 评论 -
Math
重心 三边上中线的交点 垂心 三条高的交点 内心 内接圆圆心 三个角角平分线交点 外心 外接圆圆心 三条边的垂直平分线交点 重心是三角形三边中线的交点,重心的几条性质:(记住可以灵活运用)1、重心到顶点的距离与重心到对边中点的距离之比为2:1.2、重心和三角形3个顶点组成的3个三角形面积相等.3、重心到三角形3个顶点距离的平方和最小.4、在平面直角坐标系中,重心的坐标是顶点坐标...原创 2017-09-30 17:49:37 · 175 阅读 · 0 评论 -
错误提示
Time Limit Exceeded一般是由于程序运行时间过长导致超过限定时间,可以通过调整算法,优化代码等措施解决Output Limit Exceeded,虽然名字上是output的问题,但绝大多数都是因为在输入的时候导致的问题,建议参考合适的输入方式OJ网站上常见错误提示 Q: 我提交了程序,OJ回复的那些评判结果是什么意思? A: 下面是常见的OJ评判结果以及它们表示的意思:...原创 2017-04-14 10:30:37 · 1170 阅读 · 1 评论 -
hdu 1716 排列
题目这道题是全排列问题,主要注意的是格式问题。觉得下面这种写法最为巧妙#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int main(){ int a[5],flag=0; while(~scanf("%d%d%d%d...原创 2018-07-16 17:05:47 · 347 阅读 · 0 评论 -
百练:2694:波兰表达式
题目波兰表达式:在这里就是指运算符前缀。例如2+3可以写成+ 2 3 。逆波兰表达式:运算符后缀就是逆波兰表达式。例如2+3可以写成2 3 + 。求值过程有两种:一种是使用堆栈,另外一种是使用递归函数。#include<stdio.h>#include<math.h>#include <stdlib.h>char str[100];double exp...原创 2018-04-28 14:36:38 · 216 阅读 · 0 评论 -
百练 2880:句中最长的单词
题目以为要送到单词统计的方法来做,因为题中提示不要用while(),#include "stdio.h"main(){ char s[81],c; int i,num=0,word=0; printf("请输入一行英文:\n"); gets(s); for(i=0; (c=s[i])!='\0'; i++) if(c==' ') word...原创 2018-04-26 18:05:04 · 330 阅读 · 0 评论 -
百练 19:字符串移位包含问题
题目第一反应就是字符串匹配,当时头都大了。其实可以用循环,尽管经常把自己绕晕。#include<stdio.h>#include<string.h>int solve(char str1[],int len1,char str2[],int len2){ int i,j; for( i=0;i<len1;i++) { fo...原创 2018-04-26 17:29:42 · 989 阅读 · 2 评论 -
博弈——sg函数
Nim游戏: 1. 一个状态是必败状态当且仅当它的所有后继都是必胜状态。 2. 一个状态是必胜状态当且仅当它至少有一个后继是必败状态。对于Nim游戏来说,早有科学家给出了一个定理(Bouton定理):状态(x1,x2.....xn)为必败状态当且仅当x1^x2^......^xn= 0,即把所有数进行异或和操作,也称Nim sum。【能够证明,当Nim sum为0 时为必败状态,...原创 2019-03-05 10:48:29 · 269 阅读 · 0 评论 -
hdu 1850 Being a Good Boy in Spring Festival [尼姆博弈]
题目:题意: 有n堆牌,两个人先后取某堆中的任意(不少于 一)张牌,最后取完者胜;问先手取胜第一次取牌有多少种取法?思路:1)如若给出 的是必败状态:a1^a2^......^an=0,则先手不会有任何可能获得胜利;2)若给出的是必胜状态:a1^a2^.......^an=k,(其中k不为零),那么我们的目的是要把必胜状态转化为必败状态, 从而使得先手胜利。...原创 2019-02-28 13:29:27 · 174 阅读 · 0 评论 -
博弈
一、巴什博弈(Bash Game)只有一堆n个物品,两个人从轮流中取出(1~m)个;最后取光者胜。 思路:考虑到 若n=m+1 那么 第一个人不论如何取都不能取胜。进一步我们发现 若 n=k*(m+1)+r; 先取者拿走 r 个,那么后者再拿(1~m)个n=(k-1)*(m+1)+s; 先取者再拿走s 个 最后总能造成 剩下n=m+1 的局面...原创 2019-02-28 13:11:56 · 427 阅读 · 0 评论 -
hdu 4371 Alice and Bob [博弈]
题目题意:给一个数n和m个数d[m],现在A和B轮流进行操作,不能进行操作的人为输,规则如下:1.第一步A写一个0,设s[1]=0,第二步B令s[2]=s[1]+d[i]2.两人轮流从d数组中任选一个数d[k],令s[i]=s[i-1]+d[k]或者s[i]=s[i-1]-d[k];3.s[i]>s[i-2]并且s[i]<=n思路;从最终状态开始看,假设mi...翻译 2019-02-27 11:22:17 · 176 阅读 · 0 评论 -
poj 2505 A multiplication game
题目题意:两个人轮流玩游戏,Stan先手,数字 p从1开始,Stan乘以一个2-9的数,然后Ollie再乘以一个2-9的数,直到谁先将p乘到p>=n时那个人就赢了,而且轮到某人时,某人必须乘以2-9的一个数。1 < n < 4294967295如果,n∈[2,9],那么stan必胜。【9】如果,n∈[10,18],stan先手,只能给到[2,9]之间的数字。Stan不...原创 2018-10-29 15:48:05 · 142 阅读 · 0 评论 -
hdu 1395 2^x mod n = 1
题目题目中给出输入一个整数n,要求一个最小整数的x,使得2^x mod n=1;根据模P乘法逆元:对于整数a、p如果存在整数b,满足a*b mod p=1则称b是a的模P乘法逆元。a存在模P的乘法逆元的充要条件是gcd(a,p)=1,令a=2^x,b=1,p=n则若存在x使用2^x mod n=1则gcd(2^x,n)=1(1)因为要求x的值大于0。则2^x的因子中一定有一个2,所以当n为偶数时,...原创 2018-05-01 14:22:13 · 194 阅读 · 0 评论 -
逆元
什么是逆元?每个数a均有唯一的与之对应的乘法逆元x,使得ax≡1(mod n) , 一个数有逆元的充分必要条件是gcd(a,n)=1,此时逆元唯一存在 。逆元的含义:模n意义下,1个数a如果有逆元x,那么除以a相当于乘以x。逆元的定义:定义:正整数 a, n,如果有 ax ≡ 1(mod n),则称 x 的最小正整数解为 a 模 n的逆元。为什么要有乘法逆元呢?当我们要求(a/b)...原创 2017-11-18 21:25:42 · 18325 阅读 · 2 评论 -
hdu 5685 Problem A (逆元)
题目题意:H(s)=∏i≤len(s)i=1(Si−28) (mod 9973),求一个字符串 子串(a 位到 b 位的)的哈希值。这个公式便是求字符串哈希值的公式,(字符的哈希值 = 字符的ASCII码 - 28),字符串的哈希值等于字符的哈希值的乘积( ∏ 这个就是累乘符号 )。化简过后的题意就是求一段序列中的区间乘,由于询问次数比较多,直接求乘会超时。就比如如下代码:#i原创 2017-11-18 21:35:37 · 276 阅读 · 0 评论 -
矩阵乘法
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int Max = 100;int A[Max][Max],B[Max][Max],C[Max][Max];int main(){...原创 2019-03-13 13:09:49 · 526 阅读 · 0 评论 -
hdu 1086 You can Solve a Geometry Problem too [线段相交]
题目:给出一些线段,判断有几个交点。问题:如何判断两条线段是否相交?向量叉乘(行列式计算):向量a(x1,y1),向量b(x2,y2): 首先我们要明白一个定理:向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向;若结果大于0,表示向量b在向量a的逆时针方向;若等于0,表示向量a与向量b平行。(顺逆时针是指两向量平移至起点相连,从某个方向旋转到另一个向...原创 2018-12-17 13:23:42 · 233 阅读 · 0 评论 -
hdu 1079 Calendar Game
题目题意:Adam and Eve 两个人进行日期移动,开始日期为y-m-d,每次可以移动到下月的同一天(m+1)+d 或者 这一天的下一天m+(d+1),最后移动到2001-11-4的胜利。找规律,因为动作的始终是month+1或者day+1,影响的结果大部分都是(month+day+1),即如果(month+day)为偶数,+1后变为奇数,(month+day)为奇数,+1后...原创 2018-11-10 19:02:14 · 198 阅读 · 0 评论 -
hdu 1071 The area
题目题意:已知p1,p2,p3三点求抛物线和直线围成的面积。核心代码就一行,结果够推两个小时了。#include <iostream>#include <cstdio>#include <math.h>using namespace std;int main(){ double x1,x2,x3,y1,y2,y3; ...原创 2018-11-01 16:38:27 · 158 阅读 · 0 评论 -
poj 2109 Power of Cryptography
题目题意:给你两个整数 n 和 p ,让你求一个 k 满足 k^n=p,1<=n<= 200, 1<=p<10^101,1<=k<=10^9类型 长度 (bit) 有效数字 绝对值范围float 32 6~7 ...原创 2018-10-14 14:12:38 · 102 阅读 · 0 评论 -
组合数
long long factorial(int n){ long long m = 1; for(int i=1;i<=n;i++) m*=i; return m;}long long C(int n,int m){ return factorial(n)/(factorial(m)*factorial(n-m)); ...原创 2018-09-18 10:58:28 · 143 阅读 · 0 评论 -
hdu 2178 猜数字
题目由二分思想,尽量往右靠(每次取中间值加1为新的左边界 且 右边界不变),以n=3为例:(((((1+m)/2)+1+m)/2)+1+m)/2=m 解得,m=7. 当n=n时,归纳易得, m=(2^n)-1....原创 2018-09-14 11:09:31 · 272 阅读 · 0 评论 -
hud 3123 GCC
题目输入:n 和 mod输出:Output the answer of (0! + 1! + 2! + 3! + 4! + ... + n!)%m.Constrains0 < T <= 200 <= n < 10^100 (without leading zero)0 < m < 1000000一道模运算的题,其实是一道数学题。因为n太大...原创 2018-07-17 13:37:21 · 145 阅读 · 0 评论 -
hdu 2060 Snooker
题目这道题主要难在读题上(考英语)讲的是斯诺克桌球游戏:斯诺克规则是总共有15个红球和6个彩球,打球顺序为打一个红球,进球得1分,再打一个彩球*如一红球被击进袋,该运动员可继续进行下一击球,且下一个活球应是该运动员所选的一个彩球。如该彩球被击进袋,可得分。然后再将彩球放回置球点。*红球全部离台前,轮流交替地将红球与彩球击进袋,才能一杆继续下去。直到台面上最后一只红球被击落后,随之一个彩球也被击进袋...原创 2018-06-15 13:29:55 · 162 阅读 · 0 评论