Acm所学与总结

                                        Acm所学与总结

第一周: 1: 找素数:
int a[100000]={0};
for(i=2;i<=100000;i++)
if(a[i]==0)
for(j=ii;j<=100000;j+=j)
a[j]=1;
解释:代码其实是找2到100000的素数,可以用一个循环一个一个找但太麻烦,而用这个循环可以少跑许多。所以可以用这个代码找素数,只要a[i]==0;这个数
2:模数
就是让一个数控制在一个范围内;
乘法模a
b%c=(a%c*b%c)%c; 减法模(a%c-b%c+c)%c;
自学 前缀和;主要代码:ans[i]=ans[i-1]+a[i];
3:
输入未知组数据不知道如何停下来时用:while(scanf("%d",&a)!=EOF);
这样即可停止。
4:
hash哈希:找数。
如a[1,5,7,9,11,16]
在1——10000之间找;令b[a[i]]=1;
if(b[i]==1)
输出yes。
自学:
前缀和
代码网址
:[https://blog.csdn.net/weixin_41668995/article/details/80501338]

1:
快速幂的求法。
求快速幂其实可以用暴力乘法,然后一直乘N次就好了,但是它所耗的时间 太长,所以要用快速乘的方法,缩短他的时间。
代码
int fast_pow(int a,int b,int c)
{
int ans=1;
a%=c;
while(b)
{
if(b&1)
ans=aans%c;
a=a
a%c;
b>>=1;
}
return ans%c;
}

代码:首先代码是求a^b%c;所以范围要在c之内,所以每次都要模c,防止范围超。其实快速幂是用的二进制的方法,将b分为二进制形式;如果b=10;即为1010;当二进制位不为0时ans将乘a,a也要每次都变成平方。
2:快速乘。 用快速乘和用快速幂的原因一样,都是为了节约时间。
代码
int fast_mul(int a,int b,int c)
{
int ans=0;
a%=c;
while(b)
{
if(b&1)
ans=(a+ans)%c;
a=(a+a)%c;
b>>=1;
}
return ans%c;
}
解释:首先还是要在范围内,把b化为二进制的。然后乘二进制不是0的那一位;
3:GDC 求最大公约数,只限两个数。
代码
#include<stdio.h> int gcd(int a,int b)
{
while(b!=0)
{
int t=a;
a=b;
b=t%b;
}
return a;
}
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
int k=gcd(a,b);
printf("%d\n",k); //求最大公约数
}
return 0;
}
解释:首先a=bp+r,然后b=rp1+r1;然后以此类推,a和b的最大公约数与b与r的最大公约数相等,可以证明。所以当r为0就可找出最大公约数。
自学
尺取法:
顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以说尺取法是一种高效的枚举区间的方法,是一种技巧,一般用于求取有一定限制的区间个数或最短的区间等等。当然任何技巧都存在其不足的地方,有些情况下尺取法不可行,无法得出正确答案,所以要先判断是否可以使用尺取法再进行计算。
https://blog.csdn.net/consciousman/article/details/52348439
第三周:
1:二分法。
二分法顾名思义就是将一个问题不断分为两部分处理,将没有用的一部分舍去,这样会省去很多的时间。处理的一般是递增函数或者递减函数。
例子:链接:https://blog.csdn.net/jacob_007/article/details/52601847。
2:sort函数。
sort函数其实就是将一个数组进行从大到小的排序,它由两个参数或三个参数构成。
例如:将一个数组从小到大排序sort(a,a+n)。a为数组的初地址,a+n为数组的结束地址,所以你可以改变数组中任意一段区间的序列。这种只能排从小到大,要想排从大到小,要调函数例如:sort(a,a+n,com);要定义函数为 com(a,b)return a>b.这样就是从大到小排序。这个函数排序可以节省很多的时间。一般在贪心问题中可以用这个函数。
https://blog.csdn.net/qq_41943867/article/details/81569340
2019年:
栈:栈是一个先进后出的;
头文件#include
stack<int(就是往栈里存的类型)>stk(变量名);
栈的几个函数:
stk.empty();判断栈是否为空,空返回一,否则返回0;
stk.push();往栈里存东西;
stk.top;读栈里的数据但不取出;
stk.pop();取出栈里的数据但没有返回值;
stk.size();计算栈中还有多少数据
队列:后进后出;链接https://blog.csdn.net/lee371042/article/details/81135007

  Markdown       0 字数     2 行数     当前行 2, 当前列 0      HTML       0 字数     0 段落           Menu     Main workspace not synced.Sign in with GoogleSync your main workspace and unlock functionalities.WorkspacesSwitch to another workspace.SynchronizeSync your files in the Cloud.PublishExport your files to the web.HistoryTrack and restore file revisions.File propertiesAdd metadata and configure extensions.    Table of contents       Markdown cheat sheet       Import from disk       Export to disk       Print       More...   发布成功     文章摘要由系统生成写新文章管理博文查看文章







  Markdown       0 字数     2 行数     当前行 2, 当前列 0      HTML       0 字数     0 段落           Menu     Main workspace not synced.Sign in with GoogleSync your main workspace and unlock functionalities.WorkspacesSwitch to another workspace.SynchronizeSync your files in the Cloud.PublishExport your files to the web.HistoryTrack and restore file revisions.File propertiesAdd metadata and configure extensions.    Table of contents       Markdown cheat sheet       Import from disk       Export to disk       Print       More...   发布成功     文章摘要由系统生成写新文章管理博文查看文章

猜你喜欢

转载自blog.csdn.net/weixin_43731005/article/details/84289321