算法
webnoob
会点算法的前端程序猿~
展开
-
HDU 5015 矩阵优化 (2014西安网络赛)
把所求的矩阵的第一行左移,由题意的运算规律可以退出一个 递推矩阵A,使得B[i]*(A)=B[i+1];其中 B[0]如下:B[0]=10;B[1]=a1;B[2]=a2;......B[n+1]=3;矩阵加多前后两行 为了构造233.。。原创 2014-09-15 23:47:58 · 572 阅读 · 0 评论 -
NYOJ-94 cigarettes
source link1.tips 由于是求能得到的最大香烟数,所以每次换完剩下的香烟头记得累加,以便下次换。接下来循环模拟这个过程就可以了。2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int ma原创 2016-10-21 20:00:20 · 715 阅读 · 0 评论 -
NYOJ-96 n-1位数
source link1.tips 结果就是n对10的n-1次方求余数,比如3位数对100求余。2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>#include <stack>using namespace std;int digit(in原创 2016-10-23 12:40:08 · 350 阅读 · 0 评论 -
NYOJ-97 兄弟郊游问题
source link1.tips 数学推公式。另S为兄弟相遇时间,有Mx+Sx=Sy,结果为S*z;2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>#include <stack>#include <cstdio>using names原创 2016-10-24 13:23:17 · 494 阅读 · 0 评论 -
NYOJ-15 括号匹配(二)
原题目链接1.思路区间Dp经典问题。最优子结构的表述如下:①若S为 [S’] 或 (S’),则我们只需要把 S’ 串变成规则的就可以了。②若S为[S’ 或 (S’ ,则我们只需要把 S‘ 串变成规则的,最后再加一个] 或)就可以了。③若S为 S’] 或 S’),则我们只需要把 S’ 串变成规则的,最后再在前面加一个[或(就可以了。④若找S[i……j]变成规则的最小数目,就是S[i……k] 和 S[k原创 2016-10-24 14:47:17 · 626 阅读 · 0 评论 -
NYOJ 60谁获得了最高奖学金
原题目链接判断每种情况的获得奖金就行,水一下~#include #include using namespace std;struct student{ string name; int argEnd; int argCls; char isLeader; char isWester; int num; int getAw原创 2016-10-17 23:40:39 · 598 阅读 · 0 评论 -
NYOJ-62 笨小熊
source linktips: 由于数据量很小,不用打印素数表,直接判断就行!!code:#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>using namespace std;bool isPrime(int n){ if(n<2)原创 2016-10-20 15:47:38 · 630 阅读 · 0 评论 -
NYOJ-64 鸡兔同笼
source link1.tips 解方程,判断下解是不是正整数2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int main(){ int t; int n,m; cin>>原创 2016-10-20 16:00:19 · 540 阅读 · 0 评论 -
NYOJ-65 另一种阶乘问题
source link1.tips 预处理下数组就ok2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int fac[21],res[21];void init(){ fac[1]=res[原创 2016-10-20 16:09:24 · 480 阅读 · 0 评论 -
NYOJ-74 小学生算术
source link1.tips 分解3为整数,判断每位相加和进位之和是否大于9,进位数+1;记得进位标记;2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int* divi(int n){原创 2016-10-20 16:34:18 · 569 阅读 · 0 评论 -
NYOJ-77 开灯问题
source link1.tips 暴力循环即可2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int main(){ int light[1010]; int k,n; mem原创 2016-10-21 19:26:51 · 541 阅读 · 0 评论 -
n&(n-1)的应用
首先,n&(n-1)可以把n的二进制表示的最低位的1置为0,假如n=6:n&(n-1)=6&5=110&101=100所以,根据这点,该表示式有如下几个应用1.计算n的二进制表示有多少个1:int one_num(int n){ int num=0; while(n){ n=n&(n-1); num++; } re原创 2016-09-04 14:47:09 · 720 阅读 · 0 评论 -
c++中字符串反转的3种方法
第一种:使用string.h中的strrev函数#include #include using namespace std;int main(){ char s[]="hello"; strrev(s); cout<<s<<endl; return 0;}第二种:使用algorithm中的reverse函数#include #includ原创 2016-09-03 11:35:02 · 115529 阅读 · 7 评论 -
NYOJ-57
日常水题:将一个四位整数按位排序重组,用大到小排序后的四位数减去从小到大的四位数替代老的数,如果该数在之前出现过,就停止变换,输出变换的次数。#include <iostream>#include <algorithm>#include <cstring>using namespace std;bool cmp(int a,int b){ return b-a;}int tranf原创 2016-07-22 23:15:26 · 476 阅读 · 0 评论 -
【后缀数组】 求字符串的最长回文串
求一个串的最长回文子串把原串的反串加个原串后面,中间加个没有出现过的字符然后,原串中,下标i在反串中对应的位置为2*l-i如果求以i为对称轴的回文串,我们求suffix(i)和suffix(2*l-i)的LCP如果求以i和i+1为对称轴的回文串,我们求suffix(i+1)和suffix(2*l-i)的LCP代码原创 2014-10-07 22:47:54 · 785 阅读 · 0 评论 -
poj 1328 贪心 水题
这道题目让我明白到:原创 2014-10-20 20:25:19 · 635 阅读 · 0 评论 -
NYOJ33--蛇形填数
题意:输入n,输出对应格式的n*n方阵思路:水题。填数的顺序方向为下->左->上->右,填数之前判断累加数是否等于n*n,填的位置是否超过了方阵的范围和该位置是否已经有数,进行循环判断就行ok了。#include <iostream>#include <cstring>using namespace std;int num[110][110];int main(){ int n;原创 2016-07-18 23:38:19 · 448 阅读 · 0 评论 -
NYOJ41-排序
日常水题#include <iostream>#include <algorithm>using namespace std;int a[3];int main(){ cin>>a[0]>>a[1]>>a[2]; sort(a,a+3); cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl; return 0;}原创 2016-07-19 22:56:59 · 435 阅读 · 0 评论 -
NYOJ-56
日常水题:暴力循环求出n阶乘中每个数能分解出几个m因子,累加即可,因为n最大为10000,最小因子为2,而且2^14>10000,可想而知,暴力不会超时。#include <iostream>using namespace std;int main(){ int i,j,n,m,t,k; cin>>t; while(t--){ cin>>n>>m;原创 2016-07-20 20:15:26 · 284 阅读 · 0 评论 -
用异或运算交换两个数
平常交换两个数一般是利用一个中间变量,其实可以利用异或^也可以实现交换,而且效率更快哦!代码如下:void Swap(int& a,int& b){ if(a!=b){ a^=b; b^=a; a^=b; }}原理:利用相同的数异或必为0,异或满足交换率和任何数和0异或都等于本身。比如:1.a=a^b;2.b原创 2016-09-11 14:47:57 · 1581 阅读 · 0 评论 -
腾讯笔试编程题--构造回文
题目 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数输入描述 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述 对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子 abcda google输出例子 2 2思路回文串就是正着原创 2016-09-11 15:47:41 · 890 阅读 · 0 评论 -
递归生成n位的格雷码
格雷码的具体定义自行百度,简单的说就是有0和1序列组成,而且相邻的码只有以为不相同;输入:格雷码位数n输出:n位格雷码的所遇情况思路:利用递归搞搞代码:#include #include int n;char s[17];void dfs(int i){ if(i==n) printf("%s\n",s); //到达底部就输出 else {原创 2016-09-01 00:20:33 · 1157 阅读 · 0 评论 -
NYOJ-75 日期计算
source link1.tips 主要判断下年份是不是闰年,对2月份进行处理就ok了2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int month[13]={0,31,28,31,30,31,3原创 2016-10-20 18:48:14 · 554 阅读 · 0 评论