ACM-数学方法
文章平均质量分 75
但求-_-心安
充满鲜花的世界到底在那里,如果他真的存在那么我一定会去。
展开
-
poj 1265 Area
现在发现自己在数学就是一个战五渣,知道公式直接就出来了简要说明:对于格点多边形(即在一个网格中,所有的顶点均在格点上的多边形),其面积公式 A = b / 2 + i - 1; 其中b为在边上的格点数,i为在多边形内部的格点数格点多边形边上的格点数b的求法:每条边上的格点数相加假设给定边e,两端点为p1(x1,y1),(x2,y2);则原创 2017-02-07 16:48:25 · 261 阅读 · 0 评论 -
hdu 6058 Kanade's sum
首先有一个关系:当一个数是第k大的时候,前面有x个比它大的数,那么后面就有k-x-1个比它大的数。比赛的时候队友想出了用set来维护。一开始是一个空的set,先插入大的数,那么当之后插入数的时候,他们之间的pos距离就代表它有多少个小于它的,然后根据上面的关系,对于每个数最多使得迭代器跳k次,就可以快速维护了。其实想法和正解差不多,但是因为其迭代器使用不熟练,而且我还死磕自己错误的想法。原创 2017-08-05 10:30:34 · 234 阅读 · 0 评论 -
hdu 6063 RXD and math (规律题)
#include#include#include#includeusing namespace std;typedef long long LL;LL multi_mod(LL a,LL b,LL c){ a%=c;b%=c; LL ans=0; while(b) { if(b&1) { ans+原创 2017-08-05 10:36:09 · 274 阅读 · 0 评论 -
HDU 6048 Puzzle
#include "stdio.h"#include "string.h"#include #include #include #include using namespace std;int main(){int t;scanf("%d",&t);while(t--){ int n,m,p; scanf("%d%d%d",&n,&m,&p); n原创 2017-07-29 09:57:13 · 282 阅读 · 0 评论 -
hdu 6165 FFF at Valentine (数学思想 || 缩点)
数学思想做这个题,就有点套路了。这个题目要求的是什么的呢?一个点能到其他所有的点。如果这样的以下条件肯定会成立,假设点1 2 3 4 5;1是根节点,有一条路径1->2->3->4->5;所以1 2 3 4 5 . 1代表的是有路径,0代表没有路径,如果1->2有路径,把(1,2)(2,1)都标记了 1 1 1 1原创 2017-08-23 09:56:33 · 256 阅读 · 0 评论 -
Codeforces Round #431 (Div. 2) Tell Your World
不算很水的一个题找到和1,2不一条线的一个点。如果不能找到,就是他们一条线了,错误,然后3个不共线的点,如果有两条直线平行一共有三种可能。#includeusing namespace std;typedef long long ll;int a[1005];int main(){ int n; while(~scanf("%d",&n)) {for(i原创 2017-09-02 09:54:51 · 372 阅读 · 0 评论 -
Codeforces Round #431 (Div. 2) From Y to Y
贼水的一道题,其实应该先做这个题的,先做难点的掉的分少,我发现了这个规律哎,先做简单的掉的分多,先做难的可能做不出来,有风险,所以应该得到高分值,以后从c开始做,或者从b开始不能从a开始做了。上分之路漫漫,500+名次,好好把握以下应该能400+或者300+。好多人被弄下去了,开始都被弄到900+了,终测500+好开心。#includeusing namespace std;typed原创 2017-09-02 10:00:25 · 284 阅读 · 0 评论 -
hdu 6198 number number number
一个规律题,算了一个k=2 结果是8,然后看着打的斐波那契表。规律来了,答案就是 f(3+2*k),然后直接矩阵快速幂#include #include #include #include #include #include #include #include using namespace std;const long long inf=0x3f3f3f3f;const原创 2017-09-10 20:52:57 · 643 阅读 · 0 评论 -
hdu 5985 Lucky Coins (概率)
好有趣的一个题,真是让人进一步理解的概率问题,如果太小选择忽略,这个题目中很简单就能找到小的那个,0.5的30次方在double中已经为0了,为了保险起见可以选择100.令两个函数f[i][k]表示第i种硬币第K步死光的概率,所以f[i][k]=(1−pki)nirevf[i][k]表示第i种硬币第k步至少有一个活着所以revf[i][k]=1−f[i][k原创 2017-10-11 20:58:25 · 476 阅读 · 0 评论 -
51nod 1058 N的阶乘的长度
还有这个公式?1*2*3*4的位数为log10(1)+log10(2)+log10(3)+log10(4),转化为整形再加上 1#include using namespace std;int main(){double n;scanf("%lf",&n);double ans=0;for(int i=1;i<=n;i++) ans+=log10(i);int k=a原创 2017-10-12 19:24:25 · 226 阅读 · 0 评论 -
ZOJ 3993 Safest Buildings (数学题)
高中数学学得还凑合,但是开始就猜的心态必须要制止,开始就猜就过分了,以后还是必须有理论证明再去写。西安留下了阴影,是我功利心太强。想要数据的可以拿走下面的测试数据转化为线性的来做,-r1到r1是圆心的范围。R到R是全集#include #include #include #include #include using namespace std;struct node{原创 2017-11-01 21:56:16 · 344 阅读 · 0 评论 -
hdu 6070 Dirt Ratio
我们先二分答案得到k,那么我们需要在序列中找一段区间使得它的sum/len转换一下得到sum-len*k,最近有些失了志,不愿去自己动手敲代码。。。。#include using namespace std; #define MEM(a,b) memset(a,b,sizeof(a)) #define bug puts("bug"); inline int原创 2017-08-12 09:11:54 · 244 阅读 · 0 评论 -
2017 Multi-University Training Contest - Team 2 1001 Is Derek lying?
#include "stdio.h"#include "string.h"#include using namespace std;const int MAX=1000000;char s1[MAX],s2[MAX];int main(){int t;scanf("%d",&t);while(t--){ int n,a,b; scanf("%d%d%d%*c"原创 2017-07-27 16:41:53 · 243 阅读 · 0 评论 -
poj 1442 Black Box
题意:有一些ADD和GET操作。n次ADD操作,每次往序列中加入一个数,由ADD操作可知序列长度为1-n时序列的组成。GET操作输入一个序列长度,输出当前长度序列第i大的元素的值。i初始为0,每次GET操作i先加1。给出的GET操作输入非降。 思路:求长度为k的序列的第i大元素。优先队列维护最大堆和最小堆分别存放前i-1大的元素和第i-第k大的元素。将当前序列的元素压入最小堆,如果原创 2017-02-07 22:25:37 · 347 阅读 · 0 评论 -
poj 3440 Coin Toss (数学方法)
#include #include #include #include #define ll long long/*占一格或者多格求圆心占得面积除以总面积*/using namespace std;const double PI=acos(-1.0);int main(){ double m,n,c,t,ans[4]; int cnt=1; int k; cin>>原创 2017-04-18 16:01:16 · 974 阅读 · 0 评论 -
hdu 3694 Fermat Point in Quadrangle (数学)
题意:求一个点离给出的4个点最近,思路:这个点是给出的点或者是对角线的交点。求交点:a1x+b1y=c1 用两点式求出a1,b1,c1,然后用线性代数求解。克拉默法则都忘了,学妹实力一波教学。#include#include#include#include#include#include#include#include#include#incl原创 2017-08-01 09:14:24 · 342 阅读 · 0 评论 -
hdu 6090 Rikka with Graph
#include#includeusing namespace std;typedef long long ll;int main(){ int t; scanf("%d",&t); ll n,m; while(t--) { scanf("%lld%lld",&n,&m); ll a=n+n*(n-3)/2;原创 2017-08-08 19:44:12 · 396 阅读 · 0 评论 -
hdu 6124 Euler theorem
如果一个数为10 1010模上 11 10 9 8 7 6 5 4 3 2 1 结果 10 0 1 2 3 4 0 ……模5以下不可能超过4 所以一共有 6个#includeint main(){ int i,t,a; scanf("%d",&t); while(t--) {原创 2017-08-16 09:38:22 · 240 阅读 · 0 评论 -
hdu 5974 A Simple Math Problem
解方程#include #include #include int gcd (int m,int n){if(n==0) return m; return gcd(n,m%n);}int main (){ int a,b; while(scanf("%d%d",&a,&b)!=EOF){ int c=gcd(a,b);原创 2017-08-09 15:12:06 · 191 阅读 · 0 评论 -
hdu 6052 To my boyfriend
题意给出一个 N×MN×M 的数字矩阵,求其所有子矩阵不同数字个数的期望值。 思路直接枚举子矩阵的时间复杂度为 O(n4)O(n4) ,显然不能达到预期的效果。于是我们考虑每种数字对结果的贡献,计算至少包含某一数字的子矩阵有多少个,但因为如此一定会产生重复计数,所以我们要为其限定条件。假设相对的两点 (x1,y1),(x2,y2)(x1,y1),原创 2017-08-09 19:28:23 · 508 阅读 · 0 评论 -
POJ 1681 Painter's Problem(开关问题)
开关问题的解法:把第一行的数开或关有2^n次方种可能00000-11111.遍历这么多种可能,给第一行赋值,第二行考虑让自己能影响到的第一行的数成立,第三行考虑让自己能影响到的第二行的数成立……最后判断一下是否所有的数都能成立。复杂度为(n*n*2^n)所以n必须是一个小的值#include "cstdio"#include "iostream"#include "cstring"usi原创 2017-08-03 10:08:54 · 315 阅读 · 0 评论 -
hdu 6097 Mindis (高中数学)
高中数学学得贼烂,怎么说呢,如果高三做也许会做,现在就有点要GG的感觉反演点:二维上反演以一个特定的反演圆为基础:圆心O为反演中心,圆半径为常数k,把点P反演为点P'就是使得OP×OP'=r^2.题意:圆心 O 坐标(0, 0), 给定两点 P, Q(不在圆外),满足 PO = QO,要在圆上找一点 D,使得 PD + QD 取到最小值。官方题解原创 2017-08-11 09:24:30 · 444 阅读 · 0 评论 -
hdu 6069 Counting Divisors (素数)
根据约数个数定理:n=p1^a1×p2^a2×p3^a3*…*pk^ak,n的约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1).若i=p1^a1×p2^a2×p3^a3*…*pk^ak,则i^K=p1^(a1*K)×p2^(a2*K)×p3^(a3*K)*…*pk^(ak*K),i^K的约数的个数就是(a1*K+1)(a2*K+1)(a3*K+1)…(ak*K+1)原创 2017-08-04 10:29:00 · 243 阅读 · 0 评论 -
“浪潮杯”山东省第六届ACM大学生程序设计竞赛Cube Number
把1000以内的素数打表,然后用两个数分别表示当前数和他应该乘的数,ans+=他应该乘的数的个数, 当前数的个数加一#include using namespace std;int flag[1000006];int prime[1009],N=0;void init(){ prime[N++]=2; int j=2; for(int i=3;i<=1007;原创 2018-04-28 10:25:44 · 256 阅读 · 0 评论