技巧
the_conquer_zzy
计算机科学与技术专业
展开
-
较快的字符串反转算法
public static String mystery(String s){ int N=s.length(); if (N <= 1) { return s; } String a=s.substring(0,N/2); String b=s.substring(N/2,N);原创 2016-12-13 22:46:35 · 493 阅读 · 0 评论 -
hdu 1264 counting the squares
主题思想: 这题本来应该是用线段树,求矩形的并面积的题。但是由于这道题,数据量小,就采用,标记遍历的思想做了。首先,把给出矩形包括的小方格标记为true,最后统计有多少个true的小方格。AC代码:#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const原创 2017-09-20 11:17:45 · 335 阅读 · 0 评论 -
ACM 小结1
做了这么多题有一些想不到的不能AC的情况需要总结下: 遇见的比较偏的不能AC的情况 有: 错误使用memset 函数的。错误使用cin,cout的 输入方式 while(scanf(“%d”,&n)!=EOF) 没有写!=EOF 判断的 memset方法只能初始单字节数组,如果是多字节数组比如int型数组,则只能初始化值为 0,-1, 因为memset是按字节初始化的。所以养成一个做题的原创 2017-08-10 22:02:35 · 242 阅读 · 0 评论 -
hdu 1250 大数
主题思想: 一看知道属于大数问题, 然后就写了字符串模拟大数加法,超时,后来又发现可以节省几个步骤,写了大数减法,又超时。 以后只要是大数问题,不再尝试 c++ ,直接用java写。这次又遇到一个用int模拟大数的新思路。用一个int位,来代替4位的字符串位,来模拟大数加法。#include<iostream>#include<cstdio>#include<cstring>#inclu原创 2017-09-14 22:02:26 · 301 阅读 · 0 评论 -
hdu 1142
求N! 中0 的个数 参考别人的。 因子分解 分析如下: 只有2*5 才会有10,也就是0出现。 也就是求N中有多少个被5整除的数。 然后更新N=N/5;接着求。最后的总数就是0的个数,代码:#include <iostream>#include<cstdio>#include<cstring>using namespace std;int main(){ int t;原创 2017-08-06 17:20:25 · 189 阅读 · 0 评论 -
hdu 1178
此題有纪念意义:如果两个int数很大,结果需要放到double型里面, 那么第一步请先乘以 1.0,转化成double型否则可能中间结果溢出,导致得不到正确答案 比如 int n;// n可能很大,double sum=0;sum=n*(n+1)*(n+2)/6.0;如果我们不在第一步乘以1.0,那么n*(n+1) 可能就已经溢出,结果自然是错误的,所以正确的写法是。sum=1.0*n*原创 2017-08-17 21:56:30 · 269 阅读 · 0 评论 -
hdu 1143 技巧
n 为奇数 0 n为偶数, dp[2]=3; 令dp[0]=1; dp[1]=0; dp[3]=0;递推发现:其实我并没有发现,都是人家发现的 汗…… 如果最后两列拼满 则为dp[n-2]*dp[2]=dp[n-2]*3; 如果最后两列拼不满一定是最后四列拼满的,两列拼不满有2中拼法我看不懂啊, 不说了,反正最后就是得到一个通项公式 dp[i]=4*dp[i-2]-dp[i-4原创 2017-08-08 20:21:51 · 254 阅读 · 0 评论 -
hdu 1046 技巧题
gridland ,当长宽都是奇数时,结果为n*m-1+sqrt(2) 否则为n*m,因为,可以看作是一个环,所以共有n*m个节点,n*m个节点构成的环自然长度为n*m#include <iostream>#include<cstdio>#include<cmath>using namespace std;double handle(int r,int c){ if(r%2&&c%原创 2017-07-07 20:33:48 · 303 阅读 · 0 评论 -
分数化小数的解题思路
当求两个大数的和的时候,很容易想到模拟算术的基本过程:对齐相加。当分数化成小数的时候,需要指定保留的小数位数的时候,也可以模拟手工的除法过程,计算每一位商与余数实现准确的输出指定位小数。除法的过程:先上商,然后余数进行借位(本质是乘以10),核心代码: int n=a/b; int a=(a-n/b)*10;原创 2017-06-05 20:56:56 · 396 阅读 · 0 评论 -
vim 查找统计一个字符串出现次数
统计一个文档(document) 中某个字符串出现多少次的命令 :%s/string/&/gn just replace string with what you want to encount原创 2017-05-28 19:58:38 · 15036 阅读 · 0 评论 -
顺利的使用vi/vim 到底需要知道都少个命令?
vim的命令讲道理很多,但是根据每个人日常需要的不同,真的需要全部学会吗? 想全部学会? 参考此文,130 vim命令我觉得20个就可以愉快的完成日常任务了,实在不行,notepad++,毕竟效率第一,工具第二,情怀是为生活服务的原创 2017-03-30 11:50:23 · 432 阅读 · 0 评论 -
有趣的数学(一)
如何计算n个m相加,或n个m相乘? 这是一个非常简单的问题,一个循环就可以实现,或者利用某些语言自带的数学类函数也可以完成。 这里介绍一个有趣的算法: 利用递归,可以完成n个m相乘,并且如果把 return 1改为return 0,且把*改为+,既可以完成n个m相加的计算。那么这个方法的原理是什么呢? 我思考的是这样的,这个算法的本质是求出n个二进制表示,把二进制为1的位代表的整数,进行原创 2016-12-13 16:00:03 · 875 阅读 · 0 评论 -
let 136. Single Number
找出数组中只出现一次的数,其余的数都出现两次。主题思想: 异或的定义,相同为0, 不同为1, 数组里每个数都异或操作,最后肯定是0和只出现一次的那个数异或,任何数和0异或等于数本身。AC代码:class Solution { public int singleNumber(int[] nums) { if(nums.length==1) return nums...原创 2018-03-22 20:41:33 · 129 阅读 · 0 评论