铁板铮铮♂+习题集

数论

  • 快速幂

当b为偶数:ab=ab/2 * ab/2

当b为奇数:ab=ab/2 * ab/2 * a

核心代码:

int quickpow(int a,int b)
{
   int ret=1;
   for(;b;b>>=1)//如果b不等于0 b除2
   {
           if(b&1)//b是奇数
           ret=ret*a%n;
           a=a*a%n;
   }
   return ret;
}

习题集
题目号 题目名 注释
洛谷P1965 【NOIP2013TG】转圈游戏 简单推导公式
洛谷P3197
【HNOI2008】越狱

与组合数学结合
  • 线性筛

#include<iostream>
using namespace std;
#define maxn 10000001
int prime[maxn],v[maxn],f[maxn];//prime为素数表
                                //v为每个数的最小质因子
                                //f数组判断是否是素数
int n,m,k;
void primes(int n)
{
    k=0;
    for(int i=2;i<=n;i++)//从2开始
    {
        if(v[i]==0)
        {
            v[i]=i;//i是质数,则i的最小质因子为本身
            prime[++k]=i;
            f[i]=1;
        }
        for(int j=1;j<=k;j++)
        {
            if(prime[j]>v[i]||prime[j]*i>n) break;
            //如果i有比prime[j]更小的质因子
            //或者超出n的范围
            v[i*prime[j]]=prime[j];//prime[j]是合数i*prime[j]的最小质因子
        }
    }
}
int main()
{
    cin>>n>>m;
    primes(n);
    for(int i=1;i<=m;i++)
    {
        int x;
        cin>>x;
        if(f[x]==1)
        cout<<"Yes"<<endl;
        else
        cout<<"No"<<endl;
    }
}

习题集
题目号 题目名 注释
洛谷P3383 线性筛素数 模板题
  • 质因数分解

void divide(int x)
{
    m=0;
    for(int i=2;i*i<=n;i++)//一个数至多只有一个大于根号n的质因子
                           //所以后面特判 前面只要到根号n
    {
        if(n%i==0)//i是质数
        {
            p[++m]=i;
            c[m]=0;
        }
        while(n%i==0)
        {
            n=n/i;//除掉所有的i
            c[m]++; //i的指数加1
        }
    }
    if(n>1)//特判大于根号n的那个
    {
        p[++m]=n;
        c[m]=1;
    }
}

习题集
题目号 题目名 注释
洛谷P1075 【NOIP2012PJ】质因数分解 模板题
洛谷P2926 【USACO08DEC】Patting Heads  
Codeforces 776B Sherlock and his girlfriend  
洛谷P1463 【HAOI2007】反素数  
  • gcd与lcm

辗转相除法求gcd

int gcd(int a,int b)
{
    if(b==0)
    return a;
    else return gcd(b,a%b);
}

求lcm:

a*b=gcd(a,b)*lcm(a,b)

习题集
题目号 题目名 注释
 洛谷P1072 【NOIP2009TG】Hankson的趣味题   
 POJ3421 X-factor Chains   
  • 扩展欧几里得exgcd

void exgcd(int a,int b,int &d,int &x,int &y)
{
    int t;
    if(b==0)//当b=0时 gcd(a,b)=a
            //因为1*a+0*0=a 所以ax+by=gcd(a,b)有一组解为
            //x=1 y=0
    {
        d=a;
        x=1;
        y=0;
    }
    else
    {
        exgcd(b,a%b,d,x,y);
        t=x;//推导得公式
        x=y;
        y=t-(a/b)*y;
    }
}

习题集
题目号 题目名 注释
洛谷P1516 青蛙的约会  
洛谷P1082 【NOIP2012TG】同余方程  
  • 乘法逆元

对于a

  • 中国剩余定理


动态规划

  • 区间DP

枚举所有在i与j之间的k

把一段区间分成两段为两个状态

如果是环形可以考虑断环成链 开数组2n

初始化 f[i][i]=1或者权值

答案要枚举所有的左端点到后n位

核心代码:

     f1[i][j]=max(f1[i][j],f1[i][k]+f1[k+1][j]+sum[j]-sum[i-1]);
        f2[i][j]=min(f2[i][j],f2[i][k]+f2[k+1][j]+sum[j]-sum[i-1]);

习题集
题目号 题目名 注释
洛谷P1880 【NOI1995】石子合并 断链成环
洛谷P1063 能量项链 中等难度
洛谷P2426 删数 从两边删除区间
洛谷P3146 【USACO160PEN】248 类似2048游戏
洛谷P1005 【NOIP2007TG】矩阵取数游戏  高精+翻倍
洛谷P3205 【HNOI2010】合唱队 用两个数组

图论

  • 并查集:

#include<iostream>
using namespace std;
int father[5001];
int n,m,p;
int find(int x)
{
    if(father[x]!=x)//路径压缩优化
    father[x]=find(father[x]);//把路上的所有点祖先全部改掉
    return father[x];
}
void unionn(int x,int y)
{
    father[y]=x;//y的祖先为x的祖先
                //相当于合并祖先
}
int main()
{
    cin>>n>>m>>p;
    for(int i=1;i<=n;i++)
    {
        father[i]=i;//所有数据初始祖先为自己
                    //独立的一个数为一个集合
    }
    for(int i=1;i<=m;i++)
    {
        int x,y;
        cin>>x>>y;
        int r1,r2;
        r1=find(x);
        r2=find(y);//寻找两个数的祖先
        if(r1!=r2)//如果不是同一个祖先
        {
            unionn(r1,r2);//合并
        }
    }
    for(int i=1;i<=p;i++)
    {
        int x,y;
        cin>>x>>y;
        if(find(x)==find(y))//如果是同一个祖先
        {
            cout<<"Yes"<<endl;//是
        }
        else
        cout<<"No"<<endl;//否
    }

}

习题集
题目号 题目名 注释
洛谷P3367 【模板】并查集 如题
洛谷P2024
【NOI2001】食物链


搞好三者关系

洛谷P1525
关押罪犯


排序+并查集

洛谷P1111
修复公路


eazy

洛谷P1197
【JSOI2008】星球大战


逆向思维

  • 最小生成树:

Kruskal

#include<iostream>
#include<algorithm>
using namespace std;
struct edge
{
    int l,r,w;//左端点 右端点 权值
}e[200001];
int father[5001];
int n,m,k=0,tot;
bool cmp(const edge &a,const edge &b)//用权值排序
{
    if (a.w<b.w) return 1;
    else return 0;
}
int find(int x)
{
    if(father[x]!=x)
    father[x]=find(father[x]);
    return father[x];
}
void unionn(int x,int y)
{
    int fa=find(x);
    int fb=find(y);
    if(fa!=fb)
    father[fa]=fb;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    father[i]=i;
    for(int i=1;i<=m;i++)
    {
        cin>>e[i].l>>e[i].r>>e[i].w;
    }
    sort(e+1,e+1+m,cmp);
    for(int i=1;i<=m;i++)
    {
        if(find(e[i].l)!=find(e[i].r))
        {
            unionn(e[i].l,e[i].r);
            tot+=e[i].w;
            k++;
        }
        if(k==n-1) break;//到n-1条时退出
    }
    cout<<tot;
}

习题集
题目号  题目名 注释
洛谷P3366 【模板】最小生成树 如题
洛谷P1195 口袋的天空 处理边的关系
洛谷P2330 【SCOI2005】繁忙的都市 记下最大值

原文地址:https://www.cnblogs.com/BrokenString/p/9462209.html

时间: 2024-10-11 01:38:33

铁板铮铮♂+习题集的相关文章

《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

先附上文档归类目录: 课本源码合辑  链接??? <数据结构>课本源码合辑 习题集全解析  链接??? <数据结构题集>习题解析合辑 博主有话说: 01.自学编程,难免思路阻塞,所以从今天起,我(StrayedKing)决定在本博客陆续更新严蔚敏,吴伟民版<数据结构-C语言版>各章节的课本源码和配套习题集答案解析,目的是为了整理数据结构中的知识点,并与网友交流意见,集思广益,共同进步.        ★注★ 左侧随笔分类下用两个栏目:<课本源码>.<习

中国大学MOOC-陈越、何钦铭-数据结构基础习题集 03-1. 二分法求多项式单根

03-1. 二分法求多项式单根(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 杨起帆(浙江大学城市学院) 二分法求函数根的原理为:如果连续函数f(x)在区间[a, b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0. 二分法的步骤为: 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2:否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2): 如

计算几何习题集

poj 1269 (直线交点): 这道题是给两条直线(输入直线上的两个点),然后问你两条直线是相交.重合还是平行. 很简单一道题.不过用g++测试的话double要用%f输出.不知道为什么. (求交点的模板感觉很科学) 1 #include <cstdio> 2 #include <iostream> 3 #define FOR(i,l,r) for(int i=(l);i<=(r);i++) 4 #define FE(it,v) for(__typeof((v).begin

[家里蹲大学数学杂志]第039期高等数学习题集

同济大学数学系主编, 高等数学 . 第二版, 下册. 2009年, 同济大学出版社. 7 空间解析几何与向量代数 7.5 空间直线及其方程 1(3). 求过点 P(2,-3,3) 且与平面 \pi: x+2y-3z-2=0 垂直的直线 l 的方程. 解答: 直线 l 过点 P(2,-3,3) , 且方向向量与平面法向量 {\bf n}=\sed{1,2,-3} 平行, 为 {\bf s}=\sed{1,2,-3} . 故其方程为 \bex \cfrac{x-2}{1}=\cfrac{y+8}{2

中国大学MOOC-翁恺-C语言程序设计习题集

Technorati 标签: 中国大学MOOC-翁恺-C语言程序设计习题集,C 今年网易出了"中国大学MOOC",于是选了浙大翁恺老师的"C语言程序设计"学习,近期打算把自己在该课程中的PAT习题解答做一个记录,等自己编程能力提高后再来看现在写的代码哪里还有写的不好,可以改进的地方,达到反思的目的.   中国大学MOOC-翁恺-C语言程序设计习题集,布布扣,bubuko.com

《高级语言程序设计》习题集

<高级语言程序设计>习题集 (本资料仅供学生学习使用) ? ? 求最大数 借书方案知多少 杨辉三角形 数制转换 打鱼还是晒网 该存多少钱 怎样存钱利最大 出售金鱼 平分七筐鱼 有限5位数 8 除不尽的数 一个奇异的三位数 4位反序数 求车速 阿姆斯特朗数 完全数 亲密数 回文数 求素数 求具有abcd=(ab+cd)2性质的四位数 歌德巴赫猜想 百钱百鸡问题 爱因斯坦的数学题 换分币 年龄几何 三色球问题 马克思手稿中的数学题 最大公约数和最小公倍数 分数比较 分数之和 将真分数分解为埃及分数

铁板烧, 板烧滋味是聚会聚餐最佳选择

铁板烧, 板烧滋味是聚会聚餐最佳选择 带领你的家人去板烧滋味去吃铁板烧吗?那里会有你想不到的,超出意外的美食!小型铁板烧餐厅赚钱么,为了能让顾客可以尝到新鲜和美味的佳肴,我们从世界各地搜集最绿色.最新鲜的食物.铁板烧的食材有哪些,挑选食材,制作的过程,认真的搭配合理的搭配每一道步骤都很精细.最新鲜的食物. 快年了,孩子们都想吃点好吃的,现在的社会平时想吃好吃的家长都给孩子们买了.家庭铁板烧的做法,可是我家的调皮小孩在电视上看见铁板烧的广告嚷着想吃自己做的铁板烧肉肉,我哪里会做啊?路边铁板烧视频,

铁板烧,看月全食畅想板烧滋味铁板烧

铁板烧,看月全食畅想板烧滋味铁板烧昨天晚上你是否吃着别有风味的美食--板烧滋味铁板烧呢?赏着等待已久的美景-月全食呢?铁板烧的食材有哪些,月全食是一种自然景观,是一直很难遇见的天文气象,可以说月全食是一种可遇不可求的环境景象,那么什么是月全食呢?相信很多人都可能只知其景,不知起义,一起来看看... 152年来首次''首次超级蓝血月全食''看自然景观,想着美食而不合乐为呢!铁板烧的做法,,加入板烧滋味铁板烧加盟又是你人生的另一道美景!家庭铁板烧的做法,板烧滋味铁板烧加盟在全国各地已拓展连锁机构,每

铁板烧,过年最爱的红包,去那里找?板烧滋味铁板烧有享不尽的礼物!

铁板烧,过年最爱的红包,去那里找?板烧滋味铁板烧有享不尽的礼物!过年了我最爱最爱的红包你在哪里啊?铁板烧的食材有哪些,我想带你去板烧滋味去吃我们最美味的铁板烧.铁板烧,那里的食材老么丰盛,老么有特色啦啦啦--. 板烧滋味铁板烧就等你的红包你的红包-..红包红包你听到了吗?板烧滋味铁板烧加盟在等你哦!板烧滋味铁板烧加盟是一家具有专业餐饮策划.品牌经营.连锁加盟以及物流配送为一体的大型餐饮品牌管理餐厅.家庭铁板烧的做法,板烧滋味铁板烧加盟会对加盟者的食材有专业运输,加盟者投资方也不用担心策划,板烧滋