头像

eric_fyq

$\href{https://cpp.sh/}{\color{red}{你这瓜瓤子金子做的还是瓜粒子是金子做的}}$




在线 


最近来访(162)
用户头像
求求了不要WA
用户头像
dawn_01
用户头像
jhhh
用户头像
王淼
用户头像
hiahia_6
用户头像
花生什么树辣
用户头像
violet_garden
用户头像
bline
用户头像
抿了抿嘴
用户头像
憨憨_40
用户头像
党梦竹
用户头像
仙贝
用户头像
空前
用户头像
sy
用户头像
Rywa
用户头像
梨绘小棠
用户头像
逍遥曹大仙
用户头像
Dark铭
用户头像
bwd
用户头像
今年拿省一

活动打卡代码 AcWing 4723. 队列

要放下一些东西,专心搞算法

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int s=0,len=5;
    while(s+len<n)
    {
        s+=len;
        len*=2;
    }

    n-=s;
    len/=5;
    int t=(n+len-1)/len;

    cout<<char(t-1+'a')<<endl;

    return 0;
}


活动打卡代码 AcWing 1015. 摘花生

#include <iostream>
using namespace std;
const int N = 110;

int n,w[N][N],f[N][N];
int x,y;
int main()
{
    cin>>n;
    while (n -- ){
        cin>>x>>y;
        for(int i=1;i<=x;i++)
        {
            for(int j=1;j<=y;j++)
            {
                cin>>w[i][j];
            }
        }
        for(int i=1;i<=x;i++)
        {
            for(int j=1;j<=y;j++)
            {
                f[i][j]=max(f[i-1][j],f[i][j-1])+w[i][j];
            }
        }

        cout<<f[x][y]<<endl;
    }

    return 0;
}



1.动态规划法

#include <iostream>
using namespace std;

const int N = 1010;

int n,f[N],a[N];

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];

    for(int i=1;i<=n;i++)
    {
        f[i]=1;
        for(int j=1;j<=i;j++)
        {
            if(a[j]<a[i])
            {
                f[i]=max(f[i],f[j]+1);
            }
        }
    }
    int res=0;
    for(int i=1;i<=n;i++) res=max(res,f[i]);

    cout<<res<<endl;

    return 0;
}


活动打卡代码 AcWing 2. 01背包问题

#include <iostream>
using namespace std;
const int N = 1010;

int w[N],v[N];
int n,m;
int f[N][N];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i]>>w[i];
    }

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            f[i][j]=f[i-1][j];
            if(j>=v[i]) f[i][j]=max(f[i-1][j-v[i]]+w[i],f[i][j]);
        }
    }

    cout<<f[n][m]<<endl;

    return 0;
}


活动打卡代码 AcWing 1211. 蚂蚁感冒

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n; 
int main()
{
    scanf("%d", &n);
    int pivot, left = 0, right = 0;
    scanf("%d", &pivot);

    for (int i = 1; i < n; i++)
    {
        int x;
        scanf("%d", &x);
        //找到感冒蚂蚁左边边且向右走的
        if (abs(x) < abs(pivot) && x > 0) right++;
        //找到感冒蚂蚁右边且向左走的
        if (abs(x) > abs(pivot) && x < 0) left++;
    }
    //特殊情况
    if ((pivot < 0 && right == 0) || pivot > 0 && left == 0) puts("1");
    else printf("%d\n", left + right + 1);

    return 0;
}


活动打卡代码 AcWing 1216. 饮料换购

#include <iostream>
using namespace std;
int main()
{
    int n,res;
    cin>>n;
    res=n;
    while(n>=3)
    {
        int x=n/3;
        res+=x;
        n-=x*3;
        n+=x;
    }
    cout<<res<<endl;

    return 0;
}


活动打卡代码 AcWing 1205. 买不到的数目

暴力打表找规律

#include <iostream>
#include <algorithm>

using namespace std;

bool dfs(int m,int p,int q)
{
    if(!m) return true;

    if(m>=p&&dfs(m-p,p,q)) return true;
    if(m>=q&&dfs(m-q,p,q)) return true;

    return false;
}
int main()
{
    int p,q;
    cin>>p>>q;
    int res=0;

    for(int i=1;i<=100;i++)
    {
        if(!dfs(i,p,q)) res=i;
    }
    cout<<res<<endl;

    return 0;
}

结论题代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <time.h>
using namespace std;
int main()
{
    int p,q;
    cin >> p >> q;
    cout << (p-1)*(q-1)-1<<endl;
    return 0;
}



#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <time.h>
using namespace std;
int main()
{
    clock_t start,finish;
    start=clock();
    //这里写测试代码


    finish=clock();
    cout<<double(finish-start)/CLOCKS_PER_SEC<<endl;

    return 0;
}



#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <climits>
using namespace std;

const int N = 1e5+10;

int n,m,x,y;
int w[N];

struct node{
    int l,r;
    int maxv;
}tr[N*4];

void pushup(int u)
{
    tr[u].maxv=max(tr[u<<1].maxv,tr[u<<1|1].maxv);
}

void built(int u,int l,int r)
{
    if(l==r) tr[u]={l,r,w[r]};
    else {
        tr[u]={l,r};
        int mid=l + r >> 1;
        built(u<<1,l,mid),built(u<<1|1,mid+1,r);
        pushup(u);
    }
}
int query(int u,int l,int r)
{
    if(tr[u].l>=l&&tr[u].r<=r) return tr[u].maxv;
    int mid=tr[u].l+tr[u].r>>1;
    int maxv=INT_MIN;
    if(l<=mid) maxv=max(query(u<<1,l,r),maxv);
    if(r>mid) maxv=max(query(u<<1|1,l,r),maxv);
    return maxv;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d",&w[i]);
    built(1,1,n);
    while(m--)
    {
        scanf("%d%d",&x,&y);
        printf("%d\n",query(1,x,y));
    }
    return 0;
}


活动打卡代码 AcWing 1265. 数星星

线段树上线段果,线段树下我放火

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 32010;

int n;
int tr[N], level[N];

int lowbit(int x)
{
    return x & -x;
}

void add(int x)
{
    for (int i = x; i < N; i += lowbit(i)) tr[i] ++ ;
}

int sum(int x)
{
    int res = 0;
    for (int i = x; i; i -= lowbit(i)) res += tr[i];
    return res;
}

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i ++ )
    {
        int x, y;
        scanf("%d%d", &x, &y);
        x ++ ;
        level[sum(x)] ++ ;//其实这个sum(x)返回的就是n的级别
        // cout<<sum(x)<<endl;
        add(x);
    }



    for (int i = 0; i < n; i ++ ) printf("%d\n", level[i]);

    return 0;
}