ACM study day3

Posted 橘里橘气

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM study day3相关的知识,希望对你有一定的参考价值。

今天练了二分和快速幂,题目挺难的,挑几个我做上的说一下吧。

先给出几个二分和快速幂的模板函数;

二分

void BS(int m)
{
    int x=0,y=a[m-1]-a[0];
    while(y-x>1)
    {
        int mid=(x+y)/2;
        if(judge(mid))
            x=mid;
        else
            y=mid;
    }
    cout<<x<<endl; 
}

快速幂

LL PowerMod(LL a, LL b)//a^b  
{  
    LL ans = 1;  
    while (b > 0)  
    {  
        if (b & 1)  
        {  
            ans = (ans*a) % MOD;  
        }  
        b >>= 1;  
        a = (a*a) % MOD;  
    }  
    return ans;  
}  

矩阵乘法加矩阵快速幂取模

struct mat  
{  
    ll a[2][2];  
};  
mat mat_mul(mat x,mat y)  
{  
    mat res;  
    memset(res.a,0,sizeof(res.a));  
    for(int i=0;i<2;i++)  
        for(int j=0;j<2;j++)  
        for(int k=0;k<2;k++)  
        res.a[i][j]=(res.a[i][j]+x.a[i][k]*y.a[k][j])%MOD;  
    return res;  
}  

void mat_pow(int n) 
{ 
mat c,res; 
c.a[0][0]=c.a[0][1]=c.a[1][0]=1; 
c.a[1][1]=0; 
memset(res.a,0,sizeof(res.a)); 
for(int i=0;i<2;i++) res.a[i][i]=1; 
while(n) 
{ 
if(n&1) res=mat_mul(res,c); 
c=mat_mul(c,c); 
n=n>>1; 
} 
printf("%I64d\n",res.a[0][1]); 
}

 

 

 

A  POJ 2456

这道题就是二分,但是二分检验的地方比较有趣,全部贴上来,那个judge函数我想了一阵子。。。(比较笨)。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <string>
#include <map>
#include <vector>
#include <set>
#include <queue>
using namespace std;
int a[100010];
int m,n;
bool judge(int d)
{
    int fir,last=0;
    for(int i=0;i<n-1;i++)
    {
    fir=last+1;
    while(fir<m&&a[fir]-a[last]<d)
        fir++;
    if(fir==m)
        return false;
    last=fir;
    } 
    return true;
}
void BS(int m)
{
    int x=0,y=a[m-1]-a[0];
    while(y-x>1)
    {
        int mid=(x+y)/2;
        if(judge(mid))
            x=mid;
        else
            y=mid;
    }
    cout<<x<<endl; 
}

int main()
{

cin>>m>>n;
for(int i=0;i<m;i++)
{
    scanf("%d",&a[i]);
}
sort(a,a+m);
BS(m);
return 0;
}

 

以上是关于ACM study day3的主要内容,如果未能解决你的问题,请参考以下文章

ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study

老男孩Day3作业:工资管理系统

ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study (线段树)

ACM-ICPC 2018徐州网络赛-H题 Ryuji doesn't want to study

ACM-ICPC 2018 徐州赛区网络预赛 H Ryuji doesn't want to study (树状数组差分)

[2017-7-25]Android Learning Day3