黄衣哥

文章 分类 评论
40 4 19

站点介绍

分享各种thing~

洛谷中有三道题不太会

黄衣哥 2021-12-19 42 0条评论 知识 代码c++求助

首页 / 正文
本站换新域名啦 目前老域名:huangyige.cf 新域名:blog.huangyige.xyz 都可以访问啦!

发布于2022-01-01

洛谷中有三道题不太会:

P5629 【AFOI-19】区间与除法

这是提交记录:

真可怜!

这是代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline int read_int()
{
    register int a=0;
    register char k;
    register bool x=0;
    k=getchar();
    while(k<'0'||k>'9')
    {
        if(k=='-')
            x=1;
        k=getchar();
    }
    while(k>='0'&&k<='9')
    {
        a=(a<<1)+(a<<3)+k-'0';
        k=getchar();
    }
    return x==1?0-a:a;
}
inline void write_int(int a)//递归
{
    if(a<0)
    {
        a=-a;
        putchar('-');
    }
    if(a>9)
        write_int(a/10);
    putchar(a%10+'0');
}
inline ll read_ll()
{
    register ll a=0;
    register char k;
    register bool x=0;
    k=getchar();
    while(k<'0'||k>'9')
    {
        if(k=='-')
            x=1;
        k=getchar();
    }
    while(k>='0'&&k<='9')
    {
        a=(a<<1)+(a<<3)+k-'0';
        k=getchar();
    }
    return x==1?0-a:a;
}
const int N=500005,M=65;
ll a[N],st[N][20],b[M];
map<ll,int>mp;
int lg[N];
int f(ll y)
{
    int s=0;
    ll x=y;
    while(x)
    {
        x&=x-1;
        s++;
    }
    return s;
}
int main()
{
    int n=read_int(),m=read_int(),d=read_int(),t=read_int();
    ll j,i;
    for(i=1;i<=n;i++)
    {
        a[i]=read_ll();
    }
    for(i=1;i<=m;i++)
    {
        b[i]=read_ll();
        mp[b[i]]=i;
    }
    sort(b+1,b+1+m);
    for(i=1;i<=n;i++)
    {
        if(!b[1])
        {
            st[i][0]=1ll;
            continue;
        }
        j=a[i];
        while(j)
        {
            if(mp[j])
            {
                st[i][0]=1ll<<(mp[j]-1);
            }
            j/=d;
        }
    }
    for(i=2;i<=n;i++)
    {
        lg[i]=lg[i>>1]+1;
    }
    for(j=1;j<=lg[n];j++)
    {
        for(i=1;i+(1<<j)-1<=n;i++)
        {
            st[i][j]=st[i][j-1]|st[i+(1<<(j-1))][j-1];
        }
    }
    while(t--)
    {
        n=read_int();
        m=read_int();
        i=lg[m-n+1];
        j=st[n][i]|st[m-(1<<i)+1][i];
        write_int(f(j));
        putchar('\n'); 
    }
    return 0;
}

P1381 单词背诵

这是代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1005,M=100005;
map<string,int>mp;
int b[N];
string c[N],x;
deque<int>d;
int main()
{
    int i,n,j,s=0,ans=1e9,m;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        cin>>x;
        mp[x]=i;
    }
    n=0;
    scanf("%d",&m);
    for(i=1;i<=m;i++)
    {
        cin>>c[i];
        j=mp[c[i]];
        if(!b[j]&&j!=0)
        {
            b[j]=1;
            n++;
        }
    }
    if(n==0)
    {
        printf("0\n0");
        return 0;
    }
    memset(b,0,sizeof(b));
    for(i=1;i<=m;i++)
    {
        j=0;
        if(mp.find(c[i])!=mp.end())
            j=mp[c[i]];
        d.push_back(i);
        b[j]++;
        if(b[j]==1)
        {
            s++;
        }
        while((!d.empty()))
        {
            if(mp.find(c[d.front()])!=mp.end())
                j=mp[c[d.front()]];
            else
                break;
            if(b[j]>1)
            {
                b[j]--;
                d.pop_front();
            }
            else
            {
                break;
            }
        }
        if(s>=n)
        {
            if(d.size()<ans)
            {
                ans=d.size();
            }
        }
    }
    printf("%d\n%d",n,ans);
    return 0;
}

P2318 [HNOI2005] 虚拟内存

这道题没有思路

这三道题希望各位老师帮忙看看,谢谢。

评论(0)

热门文章

最新评论

  • 黄衣哥

    @常瑞 谢谢,常来玩哦

  • 常瑞

    不错!

  • 黄衣哥

    @一直默默关注你 谢谢[[微笑]] 常来玩哦!

  • 黄衣哥

    @土拨许 可能是我写得太拉了[[猪头]][汗]

  • 黄衣哥

    @默默关注你的人 谢谢~[[微笑]] 常来玩哦

  • 默默关注你的人

    很有帮助哦

  • 土拨许

    学渣表示看不懂...

  • 一直默默关注你

    挺实用

  • 黄衣哥

    @芬达 收到,已更换![[呲牙]]

  • 芬达

    您好,芬达博客域名更换为 https://yu8.top 已为贵站添加博客,望更新一下链接

日历

2022年01月

      1
2345678
9101112131415
16171819202122
23242526272829
3031     

文章目录

推荐关键字: 洛谷 题解 c++ 代码 前端 JS CSS scratch 极域 HTML

站点公告
本站换新域名啦 目前老域名:huangyige.cf 新域名:blog.huangyige.xyz 都可以访问啦!
点击小铃铛关闭
配色方案