
51nod基础题
YYyyCCCcccBb
觉得为时已晚的时候,恰恰是最早的时候。
展开
-
51nod1005 大数加法
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1005好菜了。。编了改,改了编,鼓捣一个多小时。恶心。不过真心值得一做。。发现自己基础还不是很好#include #include #include #include using namespace std;char a[10005];char b[1原创 2016-09-09 15:29:10 · 1028 阅读 · 0 评论 -
51nod-1008 N的阶乘 mod P
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1008#include #include using namespace std;long long sum=1;int main(){ int n,p; cin>>n>>p; for(int i=1;i<=n;i++)原创 2016-09-09 18:48:56 · 556 阅读 · 0 评论 -
51nod1027 大数乘法
https://www.51nod.com/onlineJudge/submitList.html#!userId=17562&problemId=1027#include #include #include using namespace std;char a[1005];char b[1005];int c[3000];void muli(){ int lena原创 2016-09-09 20:20:21 · 303 阅读 · 0 评论 -
51nod 1046 A^B Mod C
快速幂a^b %c = ( a%c * b%c)%c#include #include using namespace std;long long sum=0;void quicksort(int a,int b,int c){ long long z=a; long long ans=1; while(b!=0) { if(b&1原创 2016-09-09 20:29:08 · 226 阅读 · 0 评论 -
51nod1057 N的阶乘
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1057这题里压位要压的狠一点。最少压四位,少了不行压位: 每个数组元素存多位数字#include #include #include using namespace std;long long a[1000005];int main(){原创 2016-09-10 12:09:44 · 709 阅读 · 0 评论 -
51nod1058 N的阶乘的长度
数据不大的时候可以这么做#include#include#include#include#includeusing namespace std;int main(){int i,j,n;double sum;int m; cin>>n;sum=1;for(i=1;isum+=log10(double(i));}原创 2016-09-10 13:38:48 · 337 阅读 · 0 评论 -
51nod1066Bash游戏
如果想要胜利,那必定将此时的石子数尽力卡到能拿到最大的石子数+1;这样对手下一次必定不能拿完,那么无论对手拿1~k哪一个,下一次自己都会胜利#include #include using namespace std;int main(){ int n,k; int T; cin>>T; while(T--) { cin>>n>>k;原创 2016-09-10 13:49:17 · 258 阅读 · 0 评论 -
51NOD1069 Nim游戏
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1069思路:拿两堆石子举例,如果石子不等,那么第一个人必定能构造 n n的情况, 那么无论第二个人拿多少,第一个人下一次仍然保持n n 就一定能胜利。如果石子相等, 那么第一个人必定破坏n n 的情况 ,第二个人只要反过来重新构造N N 第二个人就会胜利原创 2016-09-10 14:58:39 · 621 阅读 · 0 评论 -
51NOD-归并-逆序数
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1019思想:所谓的归并排序,是使连个数组分别有序,再将这两个有序的数组存入另外一个数组中,实现最后的有序。在归并的同时,我们可以记录下此时左侧比右侧大的位置即可#include #include using namespace std;int原创 2016-09-10 21:30:48 · 268 阅读 · 0 评论 -
51nod-1106质数检测
正常判断检测。#include #include using namespace std;int judge(int n){ for(int i=2;i*i<=n;i++) { if(n%i==0) { return 0; } } return 1;}int main(){原创 2016-09-12 11:20:23 · 286 阅读 · 0 评论 -
模拟stack--51nod1289 大鱼吃小鱼
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1289思路:如果当前这只鱼往左走,且他的左边没有鱼,那么这只鱼一定存活他的左边有鱼,那么比较他与左边的鱼的大小,判断生死如果当前这只鱼往右走,那么他的存活状态当前无法判断,需要判断在下面的值中往左走的鱼同他的大小关系。因此用stack操作,如果向右原创 2016-09-09 10:56:07 · 418 阅读 · 0 评论 -
51nod--1183 编辑距离
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183思路:之前做个这道题,当时就感觉此题很像最长公共子序列,今天重新做51nod里想了一次,思路是相同的,一开始初始数组,最长公共子序列是0到N有多少个相同这个是0到N需要转化多少步 那自然也就是N步了按着这个思路 a - > b 的a数组前i个与原创 2016-09-08 19:33:19 · 540 阅读 · 0 评论 -
51nod1006 最长公共子序列Lcs--打表+输出
题目http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006思路LCS打表,再从右下角开始依据表格输出#include #include #include #include #include #include using namespace std;int table[1005][1005];c原创 2016-09-07 20:36:31 · 552 阅读 · 0 评论 -
51nod-1134最长上升子序列
1134 最长递增子序列基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。Input第1行:1原创 2016-09-06 19:36:23 · 269 阅读 · 0 评论 -
51nod-1083 矩阵取数问题
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1083思路:和数字三角形思想类似,每个格子+=上或者左的最大值#include #include using namespace std;int a[505][505];int main(){ int n; cin>>n; f原创 2016-09-08 19:42:27 · 326 阅读 · 0 评论 -
51nod1002 数塔取数问题
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1002超级水的dp。做过n次。不记录了。贴代码#include #include int a[505][505];using namespace std;int main(){ int n; cin>>n; for(int原创 2016-09-08 19:37:28 · 352 阅读 · 0 评论 -
51nod-1072威佐夫游戏
http://blog.youkuaiyun.com/h1021456873/article/details/49748659这篇博客讲的很好关于这个博弈#include #include #include using namespace std;int main(){ int a,b; int n; cin>>n; while(n--)原创 2016-09-15 14:42:19 · 297 阅读 · 0 评论 -
51nod-1073约瑟夫环
思路:将人编号0 --------n-1对于人数对于2的情况下。f[这次去掉]=(f[上次去掉的]+步数)%这次做的总人数公式推导:http://blog.youkuaiyun.com/qaz135135135/article/details/52217320写得真心不错。#include #include using namespace std;int main(原创 2016-09-15 14:42:52 · 342 阅读 · 0 评论 -
51nod-1081子段求和
思路:记得当初暑期训练的时候,以为这题要拿线段树做。天真了。。最好的方法是记录前n个数字和,非常方便#include #include using namespace std;long long a[50005];long long sum[50005];int main(){ int n; cin>>n; for(int i=1;i<=n;i++原创 2016-09-15 15:10:25 · 302 阅读 · 0 评论 -
51nod-1240莫比乌斯函数
思路:从2开始到sqrt(n)查询可以整除他的素数,并且判断这个素数的平方是否可以整除n,如果可以输出0,否则判断可以整除他的素数个数,奇数个输出-1,偶数个输出1#include #include #include using namespace std;int main(){ int n ; cin>>n ; int prime=1; int原创 2016-09-16 14:18:58 · 669 阅读 · 0 评论 -
1181 质数中的质数(质数筛法)
筛!#include #include using namespace std;int Prime[1000605];int N=1000605;int main(){ int n,cnt=0; cin>>n; for(long long i=2;i <= N ; i++ ) { if(Prime[i]==0) {原创 2016-09-16 21:10:40 · 320 阅读 · 0 评论 -
51nod1264 线段相交
数学渣渣看了一下午各种找公式才明白:下面写一下理解:判断两个线段相交与否。可以看成直线是否与线段相交根据高数所学,向量的叉乘积,可以利用右手法则来判断结果的方向。那么如果两种情况的方向一个上,一个下,那么自然也就是不在直线的同侧,那么就满足条件了。代码是有需要注意x,y用double类型,否则乘法会有问题#include #include using namespa原创 2016-09-18 15:08:58 · 627 阅读 · 0 评论 -
马拉车算法(易理解版)
注:学长的代码,自己学manacher没学明白,看了看学长的代码,发现简单易懂,但是因为没理解原版manacher,所以看不出区别。如果有哪位大神看出来了。麻烦解释解释 #include<stdio.h> char qdu[100050]; int manacher() { int i; ...原创 2016-09-18 18:17:44 · 3529 阅读 · 5 评论 -
1212 无向图最小生成树
prime算法裸题。思路:每次找到从已经连通的节点中找到一个权值最小的边走出去,注意要走到没有连通的节点,因此需要vis数组标记已走的节点。同时在每次走出去后,要更新这个刚走出去的节点到其他节点的最小值。#include#include#include#include#include#include#include#include#include#include原创 2016-09-18 20:31:35 · 302 阅读 · 0 评论 -
51nod-1344 走格子
思路: 从后往前扫,大于0取0.#include #include using namespace std;int a[500010];int main(){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; long long sum=0; long long own=0;原创 2016-10-09 18:41:44 · 277 阅读 · 0 评论 -
规律-51nod-1305 Pairwise Sum and Divide
数学渣渣,头一次推出数学规律。。记下来庆祝下。有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整:fun(A) sum = 0 for i = 1 to A.length for j = i+1 to A.length sum = sum + Floor((A[i]原创 2016-10-09 19:15:54 · 344 阅读 · 0 评论 -
坑.51nod-1347 旋转字符串
任你如何旋转。。这题也不改变最初的对称性质。判断原始就行..#include #include #include using namespace std;char s[10000100];int main(){ gets(s); int flag=0; for(int i=0,j=strlen(s)/2;j<strlen(s);i++,j++)原创 2016-10-09 20:29:42 · 404 阅读 · 0 评论 -
51nod-1381 硬币游戏
思路:对于当前圆的上边界和下边界。只有相切的那固定的一个点,可以交 R*2+1条线。而其余无穷种情况均为2*R条。#include #include using namespace std;int main(){ int T; cin>>T; while(T--) { long long R; cin>>R;原创 2016-10-09 21:16:53 · 385 阅读 · 0 评论 -
51NOD-1265四点共面
思路:对于a,b,c三个点构成的两条向量求出叉乘积,再求第四个点与之前公共点向量的点乘积,如果等于0就共面#include #include using namespace std;struct node{ double x,y,z;}a[5];double xp,yp,zp;void solve(node t1,node t2,node t3){原创 2016-09-22 18:58:28 · 450 阅读 · 0 评论 -
51nod-1079中国剩余定理
思路:这题如果直接找公式,不如看代码更容易理解,代码里有注释思路: 这题如果直接找公式,不如看代码更容易理解,代码里有注释#include #include typedef long long int ll;using namespace std;int num[20];int mod[20];int main(){ int n; cin>>n;原创 2016-09-15 15:08:56 · 299 阅读 · 0 评论 -
51nod-1010 只包含因子2 3 5的数
思路:打表。二分查找。网上都这么说。然而我想说。这打表的思路并不好想有没有。给出自己的一个打表方式虽然炸了。。不过也是种思路。(来自UVA 540)int pos2=1,pos3=1,pos5=1; ans[1]=1; for(int i=2;i<=1500;i++) { int v2=ans[pos2]*2; int v3=an原创 2016-10-10 21:49:35 · 420 阅读 · 0 评论 -
矩阵快速幂1242斐波那契数列的第N项
#include #include #include #include #include using namespace std;struct matrix{ long long arr[2][2];};matrix base,ans;matrix matrix_multip(matrix a,matrix b){ matrix tmp; for(int i=0;原创 2016-09-25 16:12:30 · 377 阅读 · 0 评论 -
51nod-1007 正整数分组
思路:01背包基础题。把sum/2当作体积。#include #include #include using namespace std;int dp[105][10010];int a[105];int main(){ int n,sum=0; cin>>n; for(int i=1;i<=n;i++) {cin>>a[i];原创 2016-10-11 12:46:14 · 450 阅读 · 0 评论 -
1130 N的阶乘的长度 V2(斯特林近似)
公式记住就好了。百度百科有解释e可以用exp(1)表示,省着记了#include #include #include typedef long long ll;double PI=acos(-1);using namespace std;int main(){ int t; cin >> t; while (t--) { l原创 2016-09-10 13:36:12 · 528 阅读 · 0 评论 -
51nod-1024 矩阵中不重复的元素
1024 矩阵中不重复的元素题目来源: Project Euler基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注一个m*n的矩阵。该矩阵的第一列是a^b,(a+1)^b,.....(a + n - 1)^b第二列是a^(b+1),(a+1)^(b+1),.....(a原创 2016-10-11 16:29:36 · 511 阅读 · 0 评论 -
51nod-1031 骨牌覆盖
思路:没看出来是个斐波那契数列。。没看到运来是个2*N的 行不变列在变。对于当前第i个 如果想放竖 可能为f(n-1)如果想放横线 则是f(n-2)如果不想打表。想更快的话。那么请仿照斐波那契的 矩阵数列 0 11 1 进行矩阵快速幂吧。这里给出是打表的#include #include using namespace std;long long a[10原创 2016-10-11 18:21:05 · 349 阅读 · 0 评论 -
51nod-1014 X^2 Mod P(二次剩余。。求解决)
思路:数据不仅弱。。而且还挺小。暴力就过了。网上竟然写的都是暴力代码。不过查了下。是一个二次剩余定理的模板题(不过找到的都是有解。没找到求解)暴力#include #include using namespace std;int main(){ int flag=0; long long a,p; cin>>p>>a; for(long lo原创 2016-10-11 15:49:12 · 1127 阅读 · 0 评论 -
51-nod1009 数字1的数量
思路一:快速幂思路二:0~9 所有都是循环的,可以手动打表。(手动捂脸)。第一次我就是这么过的#include using namespace std;int quick(int n,int m){ int ans=1,z=n; while(m) { if(m&1) { ans=ans*原创 2016-09-27 21:12:16 · 281 阅读 · 0 评论 -
51nod-1315 合法整数集
1315 合法整数集题目来源: TopCoder基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注一个整数集合S是合法的,指S的任意子集subS有Fun(SubS)!=X,其中X是一个固定整数,Fun(A)的定义如下:A为一个整数集合,设A中有n个元素,分别为a0,a1,a2,...原创 2016-11-03 21:45:31 · 414 阅读 · 0 评论 -
51nod-1432 独木舟
1432 独木舟基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?Input第一行包含两个正原创 2016-11-03 22:01:03 · 552 阅读 · 0 评论