木屋

mhlwsk的博客


  • 首页

  • 关于

  • 标签

  • 归档

  • 搜索

LightOJ1370 (Bi-shoe and Phi-shoe)[欧拉函数]

发表于 2018-01-27 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:https://vjudge.net/problem/27078/origin

Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a very popular coach for his success. He needs some bamboos for his students, so he asked his assistant Bi-Shoe to go to the market and buy them. Plenty of Bamboos of all possible integer lengths (yes!) are available in the market. According to Xzhila tradition,

Score of a bamboo = Φ (bamboo’s length)

(Xzhilans are really fond of number theory). For your information, Φ (n) = numbers less than n which are relatively prime (having no common divisor other than 1) to n. So, score of a bamboo of length 9 is 6 as 1, 2, 4, 5, 7, 8 are relatively prime to 9.

The assistant Bi-shoe has to buy one bamboo for each student. As a twist, each pole-vault student of Phi-shoe has a lucky number. Bi-shoe wants to buy bamboos such that each of them gets a bamboo with a score greater than or equal to his/her lucky number. Bi-shoe wants to minimize the total amount of money spent for buying the bamboos. One unit of bamboo costs 1 Xukha. Help him.

阅读全文 »

POJ1442 (Black Box)做题笔记

发表于 2018-01-27 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:http://poj.org/problem?id=1442

这题题意是给定两个序列,第一个序列是输入序列,第二个序列是询问序列,第二个序列的第i个数bi是询问输入第bi个数时黑盒的第i小

乍一看每次询问第i小好像需要用平衡树,但其实这题可以用priority_queue直接水过去,创建两个priority_queue,小根堆中存的数大于大根堆中存的数。严格保持大根堆有i个数,这样小根堆中的根就是整个黑盒的第i+1大了。

阅读全文 »

POJ1061 (青蛙的约会)做题笔记

发表于 2018-01-27 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:http://poj.org/problem?id=1061
这题是拓展欧几里得算法。

裴蜀等式

任何整数a、b和m,关于未知数x和y的线性丢番圆方程(称为裴蜀等式):
ax+by=m
有整数解时当且仅当m是a和b的最大公约数d的倍数。裴蜀等式有解时必然有无穷多个整数解,每组解x、y都称为裴蜀数
——引用自维基百科

若方程ax+by=m的一组整数解为(x0,y0),则它的任意整数解都可以写成(x0+kb’,y0-ka’),其中a’=a/gcd(a,b),b’=b/gcd(a,b),k取任意整数

模线线性方程组

ax≡b(mod n)
ax=b+ny
ax-ny=b 进而转化为裴蜀等式
补充:当b等于1时模线性方程组的解是a关于模n的逆,a关于模n的逆存在当且仅当a和n互质,此时方程有唯一解

题目思路

根据题意可以写出等式(x+km)%L=(y+kn)%L
而这样的式子有一个性质a%L=b%L ==> (a+c)%L=(b+c)%L
因而可以得出(k(m-n))%L=(y-x)%L
k(m-n)≡y-x(mod L) 接下来就可以用解模线性方程组的方法来做了
需要注意m-n必须是非负的

阅读全文 »

POJ1365 (Prime Land)做题笔记

发表于 2018-01-27 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:http://poj.org/problem?id=1365

这题是质因数分解,首先生成一个素数表,然后通过这个表来找出x-1的每个质因数以及质因数的次数。需要注意的一点是不同于一般的筛法,这个生成素数表的算法要枚举出范围内所有的素数,因而第一层循环不能只循环到sqrt(r),而必须需要循环到r。另外在对x-1做质因数分解的时候不要忽略x-1是大质数的情况。

阅读全文 »

POJ2531 (Network Saboteur)做题笔记

发表于 2018-01-24 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:http://poj.org/problem?id=2531
这题需要把所有序号分为两类,直接枚举每一个序号是哪一类就行了,因为N<=20,所以可以直接用一个int类型的每一位来表示每一个序号的类别(某一位是0或1代表其属于对应的类别)。这样直接枚举这个int类型就可以了。

阅读全文 »

POJ1088 (滑雪)做题笔记

发表于 2018-01-24 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·

这题是记忆化搜索。
因为高度的缘故所有走过的路一定不会再走一次,可以判断从每个点所能走的最远距离和已走路程是无关的,因而对于每一个点可以递归查询垓点可以走到的最远距离,在回溯前记录当前点能走到的最远距离即可。

阅读全文 »

HDU1894 (String Compare)做题笔记

发表于 2018-01-24 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1894
预处理把字符串排序一下,这样从前面往后面比的时候如果遇到不匹配的情况直接跳过就行了。
另外使用string的compare函数可以很方便的做出来(速度也不慢)。
据说使用字典树会超时。

阅读全文 »

C++ string学习笔记

发表于 2018-01-24 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·

合并

使用+运算符即可

取子串

substr(pos,n)返回pos后面n个字符组成的串
substr(pos)返回pos到结尾的子串

插入

insert(pos,str)在pos的位置插入str
insert(pos,str,pos2,n)在pos的位置插入str的pos2位置后面n个字符

删除

erase(pos,n)删除pos后面n个字符

替换

replace(pos,n,str)pos后面的n个字符被str替换
replace(pos,n,str,pos2,n2)pos后面的n个字符被str的n2位置后的n2个字符替换
replace(pos,n,str,n2)pos后面的n个字符被str的前n2个字符替换

查找

find(str)查找str在字符串中的位置,如果出现了则返回出现的位置,否则返回结尾(std::string::npos)

比较

compare(str)返回值和strcmp()类似
compare(pos,n,str,pos2,n2)pos位置后n个字符与str的pos2位置后n2个字符比较
compare(pos,n,str)pos位置后面n个字符与str比较

HDU1263 (水果)做题笔记

发表于 2018-01-24 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263

这题可以使用二维的map做出来,注意迭代器的使用。

阅读全文 »

C++ map学习笔记

发表于 2018-01-24 | 更新于 2020-07-30 |

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
C++的map可以建立关键字到值的关系,关键字不可以重复,其元素是pair容器,first为关键字,second为值。

迭代器

map的迭代器支持++、–操作

直接插入

成员函数insert(std::pair<T1,T2>(key,value))
insert不能插入已有的元素
使用重载的[]插入

查找元素

count(key)返回元素的个数(map仅能返回0或1)
find(key)返回指向key的元素的迭代器,如果找不到返回指向end的迭代器
lower_bound(key)返回第一个大于等于key的元素的迭代器
upper_bound(key)返回第一个大于key的元素的迭代器

取值

at(key)取出键值为key的元素,可以用来修改value,会检查key的范围
使用重载的[]取值,可以用来修改value

容量查询

empty()检查是否为空
size()返回元素数量

删除

erase(key)删除键值为key的元素

输出键值

对于某个具体元素,first输出键值,second输出值

1…111213
mhlwsk

mhlwsk

I will persist until I win.

130 日志
80 标签
RSS
GitHub E-Mail
Links
  • 离光
© 2017 – 2020 mhlwsk
由 Hexo 强力驱动
|
主题 – NexT.Pisces