头像

爱哭鬼小飞龙




离线:5个月前


最近来访(8)
用户头像
辣鸡号航母
用户头像
Coinisi.
用户头像
xjc008
用户头像
lijiale
用户头像
zjyyc15
用户头像
_OvO_

活动打卡代码 AcWing 4417. 选区间

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2e5+10;
int l1[N],r1[N],l2[N],r2[N];
int main()
{
    int n,m;
    cin>>n;
    for(int i=0;i<n;i++) scanf("%d%d",&l1[i],&r1[i]);
    cin>>m;
    for(int i=0;i<m;i++) scanf("%d%d",&l2[i],&r2[i]);
    sort(l1,l1+n);
    sort(r1,r1+n);
    sort(l2,l2+m);
    sort(r2,r2+m);
    int r1min=r1[0],r2min=r2[0],l1max=l1[n-1],l2max=l2[m-1];
    int ans=max(max(0,l2max-r1min),max(0,l1max-r2min));
    printf("%d\n",ans);
    return 0;
}


活动打卡代码 AcWing 4418. 选元素

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 210;
LL f[N][N];
int main()
{
    int n,k,x;
    cin>>n>>k>>x;
    memset(f,-0x3f,sizeof(f));
    f[0][0]=0;
    for(int i=1;i<=n;i++)
    {
        int v;
        scanf("%d",&v);
        for(int j=1;j<=x;j++)
            for(int u=max(0,i-k);u<i;u++)
                f[i][j]=max(f[i][j],f[u][j-1]+v);
    }
    LL ans=-1;
    for(int i=n-k+1;i<=n;i++)
    ans=max(f[i][x],ans);
    printf("%lld\n",ans);
    return 0;
}


活动打卡代码 AcWing 143. 最大异或对

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
const int N=1e5+10,M=4e6+10;
int a[N];
int son[M][2],idx;
void insert(int x)
{
    int p=0;
    for(int i=30;i>=0;i--)
    {
        int &s=son[p][x>>i&1];
        if(!s) s=++idx;
        p=s;
    }
}
int query(int x)
{
    int p=0,res=0;
    for(int i=30;i>=0;i--)
    {
        int u=x>>i&1;
        if(son[p][!u])
        {
            p=son[p][!u];
            res+=1<<i;
        }
        else
            p=son[p][u];
    }
    return res;
}
/*int priority()
{
    int res;
    for(int i=0;i<n;i++)
        for(int j=0;j<i;j++)
        res=max(res,a[i]^a[j]);
    return res;
}*/
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        insert(a[i]);
    }
    int res=0;
    for(int i=0;i<n;i++)
        res=max(res,query(a[i]));
    cout<<res<<endl;
    return 0;
}


活动打卡代码 AcWing 835. Trie字符串统计

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
const int N=2e4+10;
int son[N][26],cnt[N],idx;
char str[N];
void insert(char *str)
{
    int p=0;
    for(int i=0;str[i];i++)
    {
        int u=str[i]-'a';
        if(!son[p][u]) son[p][u] =++idx;
        p=son[p][u];
    }
    cnt[p]++;
}
int query(char *str)
{
    int p=0;
    for(int i=0;str[i];i++)
    {
        int u=str[i]-'a';
        if(!son[p][u])return 0;
        p=son[p][u];
    }
    return cnt[p];
}
int main()
{
    cin>>n;
    while (n -- )
    {
        char op[2];
        scanf("%s%s",op,str);
        if(op[0]=='I') insert(str);
        else cout<<query(str)<<endl;
    }
    return 0;
}


活动打卡代码 AcWing 831. KMP字符串

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m;
const int N = 1e5+10 , M=1e6+10;
char p[N],s[M];
int ne[N];
int main()
{
    cin>>n>>p+1>>m>>s+1;
    for(int i=2,j=0;i<=n;i++)
    {
        while(j&&p[i]!=p[j+1])j=ne[j];
        if(p[i]==p[j+1]) j++;
        ne[i]=j;
    }
    for(int i=1,j=0;i<=m;i++)
    {
        while(j&&s[i]!=p[j+1])j=ne[j];
        if(s[i]==p[j+1]) j++;
        if(j==n)
        {
            j=ne[j];
            printf("%d ",i-n);
        }
    }
    return 0;
}


活动打卡代码 AcWing 838. 堆排序

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int n,m;
priority_queue<int,vector<int>,greater<int>> q;
int main()
{
    scanf("%d%d", &n, &m);
    while (n -- )
    {
        int a;
        scanf("%d",&a);
        q.push(a);
    }
    while (m -- )
    {
        printf("%d ",q.top());
        q.pop();
    }
    return 0;
}



#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int main()
{
    cin>>n;
    while (n -- )
    {
        int a;
        cin>>a;
        int res=0;
        for(int i=0;i<32;i++)
        if(a>>i&1)
        res++;
        cout<<res<<' ';
    }
    return 0;
}


活动打卡代码 AcWing 890. 能被整除的数

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
int n,m;
const int N = 20;
int q[N];
int main()
{
    cin>>n>>m;
    for(int i=0;i<m;i++)cin>>q[i];
    int res=0;
    for(int i=1;i<1<<m;i++)
    {
        int cnt=0,s=1;
        for(int j=0;j<m;j++)
        {
            if(i>>j&1)
            {
                if((LL)s*q[j]>n)
                {
                    cnt=-1;
                    break;
                }
                cnt++;
                s*=q[j];
            }
        }
        if(cnt!=-1)
        {
            if(cnt%2) res+=n/s;
            else res-=n/s;
        }
    }
    cout<<res<<endl;
    return 0;
}



#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
LL exgcd(LL a,LL b,LL &k1,LL &k2)
{
    if(!b)
    {
        k1=1,k2=0;
        return a;
    }
    else
    {
        LL d=exgcd(b,a%b,k2,k1);
        k2-=a/b*k1;
        return d;
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    LL a1,m1;
    scanf("%lld%lld",&a1,&m1);
    for(int i=0;i<n-1;i++)
    {
        LL a2,m2,k1,k2;
        cin>>a2>>m2;
        LL d=exgcd(a1,a2,k1,k2);
        if((m2-m1)%d)
        {
            puts("-1");
            return 0;
        }
        else
        {
            k1=(m2-m1)/d*k1;
            int t=a2/d;
            k1=((k1%t)+t)%t;
            m1+=k1*a1;
            a1=abs(a1/d*a2);
        }
    }
    cout<<m1<<endl;
    return 0;
}


活动打卡代码 AcWing 901. 滑雪

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 310;
int n,m;
int g[N][N];
int f[N][N];
int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};
int dp(int a,int b)
{
    int &c=f[a][b];
    if(c!=-1) return c;
    c=1;
    for(int i=0;i<4;i++)
    {
        int x=a+dx[i],y=b+dy[i];
        if(x>=1&&x<=n&&y>=1&&y<=m&&g[x][y]<g[a][b])
            c=max(c,dp(x,y)+1);
    }
    return c;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>g[i][j];
    int res=0;
    memset(f,-1,sizeof f);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            res=max(res,dp(i,j));
    cout<<res<<endl;
    return 0;
}