随笔分类 -  HDU

摘要:#include #include #include using namespace std; struct node { int x; int step; }; int n, k, vis[100010]; node s, e; int bfs() { queue q; node t, p; s.x = n; s.step = 0; vis[s.x] = 1... 阅读全文
posted @ 2019-10-07 16:37 青衫客36 阅读(151) 评论(0) 推荐(0) 编辑
摘要:参考博客:https://blog.csdn.net/flytowns/article/details/86552772 阅读全文
posted @ 2019-10-07 16:36 青衫客36 阅读(170) 评论(0) 推荐(0) 编辑
摘要:本题要求在指定时间点到达目的地, 一开始用的广搜, 但是搜出的是最短路径, 理解错题意了... 使用深搜, 只要搜索到一个能在指定时间点到达目的地的路径就返回(由于深搜可能会爆栈, 所以要用到奇偶剪枝) 奇偶剪枝结论:若 t-[abs(ex-sx)+abs(ey-sy)] 结果为非偶数(奇数),则无 阅读全文
posted @ 2019-09-23 16:40 青衫客36 阅读(265) 评论(0) 推荐(0) 编辑
摘要:创建一个结构体, 该结构体存储 当前所在楼层 和 当前已走的步数 使用广搜, 将初始节点入队, 并做上已访问的标记, 判断当前节点是否为终点, 若是终点则返回到当前为止走过的步数, 若不是终点, 则将该节点可以访问到的孩子结点入队(同时将孩子结点做上已经访问过的标记)(当前节点出队), 依次判断, 阅读全文
posted @ 2019-09-20 19:08 青衫客36 阅读(112) 评论(0) 推荐(0) 编辑
摘要:先确定一段和sum=m的最长的长度,要最长则起点从1开始,根据等差求和,len*(len+1)/2=m;放缩法则len^2<2*m,所以len=pow(2.0*m,0.5);现在根据长度确定起点L,根据等差求和公式,((len+L-1)+L)*len/2=m; => L=(2*m/len+1-len 阅读全文
posted @ 2019-08-09 17:43 青衫客36 阅读(307) 评论(0) 推荐(1) 编辑
摘要:参考链接: https://www.cnblogs.com/NYNU-ACM/p/4236795.html 题上说的A 和B 的长度不超过15,因为A和B 是十六进制数,如果长度不考虑正负号的话,一个数字表示4位二进制数,所以A 、B的位数是60位,所以定义A、B时,要定义为64位。当然如果考虑正负 阅读全文
posted @ 2019-08-09 17:09 青衫客36 阅读(371) 评论(0) 推荐(0) 编辑
摘要:坐标排序是关键 阅读全文
posted @ 2019-08-04 18:07 青衫客36 阅读(404) 评论(0) 推荐(0) 编辑
摘要:#include #include using namespace std; int f[30], F[30]; int main() { char c; int n, m, p; cin >> n; for(int i = 1; i > c >> m; if(c >= 'a' && c = 'A' && c <= 'Z') p = F[c - 'A' + 1];... 阅读全文
posted @ 2019-08-04 17:27 青衫客36 阅读(156) 评论(0) 推荐(0) 编辑
摘要:#include #include using namespace std; void deal(string &s) { int len = s.length(); if(s.find('.') != string::npos) { for(int i = len - 1; s[i] == '0'; -- i) { len --; } s = s.... 阅读全文
posted @ 2019-08-04 13:13 青衫客36 阅读(133) 评论(0) 推荐(0) 编辑
摘要:#include int main() { int n; while(scanf("%d", &n) != EOF) { int k = 0; for(int i = 1; i <= n; ++ i) if(n % i == 0) k ++; if(k % 2 == 0) printf("0\n"); else printf("1\n"); } ... 阅读全文
posted @ 2019-08-03 21:41 青衫客36 阅读(155) 评论(0) 推荐(0) 编辑
摘要:#include int main() { int n, m; while(scanf("%d %d", &n, &m) != EOF) { printf("+"); for(int j = 0; j < n; ++ j) { printf("-"); } printf("+\n"); for(int i = 0; i < m; ++ i) {... 阅读全文
posted @ 2019-08-03 17:33 青衫客36 阅读(212) 评论(0) 推荐(0) 编辑
摘要:#include #include using namespace std; int main() { stack s; int n; while(cin >> n) { while(n) { s.push(n % 2); n /= 2; } while(!s.empty()) { cout << s.top(); s.pop(); ... 阅读全文
posted @ 2019-08-03 12:30 青衫客36 阅读(178) 评论(0) 推荐(0) 编辑
摘要:解题思路:1递推递推,先分析下直线分割平面的情况,增加第n条直线的时候,跟之前的直线最多有n-1个交点,此时分出的部分多出了(n-1)+1; 2折线也是同理,f(1)=2,f(2)=7,先画好前面n-1条折线,当增加第n条拆线时,此时与图形新的交点最多有2*2(n-1)个,所以分出的部分多出了2*2 阅读全文
posted @ 2019-08-03 12:22 青衫客36 阅读(258) 评论(0) 推荐(0) 编辑
摘要:这个道题就是求N中有多少中M个数的错排。 因此先找到N个新郎中M个错一共有几种,显然是CMN=N!/(M!*(N-M)!)。即CMN=N!/M!/(N-M)!。 然后在求出M个数的错排个数,递推关系:f[n]=(n-1)*(f[n-1]+f[n-2]) 阅读全文
posted @ 2019-08-02 19:28 青衫客36 阅读(200) 评论(0) 推荐(0) 编辑
摘要:全错概率 = 错误的情况 / 全部的情况 1. 全部的情况为 n!2. 对错误的情况进行讨论: (1) 要保证全错,第一个必然不能拿到自己的名字,所以第一个人有(n-1)中选择。(2) 第二个人如果拿的是第一个人的名字,就变成了求 (n-2) 人全错的概率,如果拿的不是第一个人的名字,就变成了求 ( 阅读全文
posted @ 2019-08-02 18:59 青衫客36 阅读(235) 评论(0) 推荐(0) 编辑
摘要:#include long long int memo[50]; long long int f(long long int n) { memo[1] = 3; memo[2] = 8; for(long long int i = 3; i <= n; ++ i) { memo[i] = 2 * memo[i - 1] + 2 * memo[i - 2]; } ... 阅读全文
posted @ 2019-08-02 17:12 青衫客36 阅读(142) 评论(0) 推荐(0) 编辑
摘要:2*n方格,铺1*2骨牌。我们可以"自左向右"进行此过程。设f[i]表示用1*2骨牌铺2*i方格的不同方案总数,由于1*2骨牌既可以横着放,又可以竖着放,因此: (1)当前面2*(i-1)方格区域已经铺满时:可以竖着放一块1*2骨牌将整个区域铺满,故此时方案总数为f[i-1]; (2)当前面2*(i 阅读全文
posted @ 2019-08-02 16:30 青衫客36 阅读(459) 评论(0) 推荐(0) 编辑
摘要:#include long long int memo[55]; long long int f(int n) { memo[1] = 3; memo[2] = memo[3] = 6; for(int i = 4; i <= n; ++ i) { memo[i] = memo[i - 1] + 2 * memo[i - 2]; } retu... 阅读全文
posted @ 2019-08-02 14:42 青衫客36 阅读(205) 评论(0) 推荐(0) 编辑
摘要:本题跟超级楼梯类似, 当前一步的情况由n-1与n-2决定, 此时f()函数中传入的参数是两点之间的间隔+1(也就是转换成从点1开始到达其他点的路线数) 还需注意本题的数据类型(long long int) 输入输出的占位符为%lld 阅读全文
posted @ 2019-08-02 13:56 青衫客36 阅读(164) 评论(0) 推荐(0) 编辑
摘要:#include #include #include using namespace std; int main() { string s; char p[7] = {'~','!','@','#','$','%','^'}; int n, a, b, c, d; cin >> n; set t; for(int i = 0; i > s; if(s.length(... 阅读全文
posted @ 2019-08-02 12:52 青衫客36 阅读(138) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示