头像

啊哈哈1




离线:13天前


最近来访(22)
用户头像
君莫多情
用户头像
000_2
用户头像
代码菜鸟
用户头像
1234abcd
用户头像
qgmcc
用户头像
来来来
用户头像
snvxv
用户头像
顺其自然_0
用户头像
su尔
用户头像
诚_7
用户头像
._782
用户头像
ZarroBoog
用户头像
听雨-情殇
用户头像
October003
用户头像
上下求索
用户头像
curl.

活动打卡代码 AcWing 868. 筛质数

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,cnt;
int p[N];
bool st[N];
void get(){
    for(int i=2;i<=n;i++){
        if(!st[i])p[cnt++]=i;
        for(int j=0;p[j]*i<=n;j++){
            st[p[j]*i]=true;
            if(i%p[j]==0)break;
        }
    }
}
int main(){
    cin>>n;
    get();
    cout<<cnt;
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~



#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int w[N];
struct node{
    int l,r;
    int tmux;
    int lmax;
    int rmax;
    int sum;
}tr[N];
void pushupx(node &u,node &l,node &r){
    u.sum = l.sum + r.sum;
    u.lmax = max(l.lmax, l.sum + r.lmax);
    u.rmax = max(r.rmax, r.sum + l.rmax);
    u.tmux = max(max(l.tmux, r.tmux), l.rmax + r.lmax);
}
void pushup(int u){
    pushupx(tr[u],tr[2*u],tr[2*u+1]);
}
void build(int u,int l,int r){
    if(l==r)tr[u]={l,r,w[l],w[l],w[l],w[l]};
    else{
        tr[u].l=l,tr[u].r=r;
        int mid=(l+r)/2;
        build(u*2,l,mid),build(u*2+1,mid+1,r);
        pushup(u);
    }
}
void mod(int u,int x,int v){
    if(tr[u].l == x && tr[u].r == x)tr[u]={x,x,v,v,v,v};
    else{
        int mid=(tr[u].l+tr[u].r)/2;
        if(x<=mid)mod(u*2,x,v);
        else mod(u*2+1,x,v);
        pushup(u);
    }
}
node query(int u,int l,int r){
    if(tr[u].l>=l&&tr[u].r<=r)return tr[u];
    else{
        int mid=(tr[u].l+tr[u].r)/2;
        if(r<=mid)return query(2*u,l,r);
        else if(l>mid)return query(2*u+1,l,r);
        else{
            node left=query(2*u,l,r);
            node right=query(2*u+1,l,r);
            node res;
            pushupx(res,left,right);
            return res;
        }
    }
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>w[i];
    build(1,1,n);
    while(m--){
        int k,x,y;
        cin>>k>>x>>y;
        if(k==1){
            if(x>y)swap(x,y);
            cout<<query(1,x,y).tmux<<endl;
        }else{
            mod(1,x,y);
        }
    }
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~


活动打卡代码 AcWing 1275. 最大数

include[HTML_REMOVED]

using namespace std;
const int N=8e5+10;
struct node{
int l,r;
int mx;
}tr[N];
int n;//实际长度
int maxx;
void pushup(int u){
tr[u].mx=max(tr[2u].mx,tr[2u+1].mx);
}
void mod(int u,int x,int v){
if(tr[u].l==tr[u].r)tr[u].mx=v;
else{
int mid=(tr[u].r+tr[u].l)/2;
if(x<=mid)mod(u2,x,v);
else mod(u
2+1,x,v);
pushup(u);
}
}
void build(int u,int l,int r){//初始化
tr[u]={l,r};
if(l==r)return;
int mid=(l+r)/2;
build(u2,l,mid),build(u2+1,mid+1,r);
}
int query(int u,int l,int r){
if(tr[u].l>=l&&tr[u].r<=r)return tr[u].mx;
int v=0;
int mid=(tr[u].l+tr[u].r)/2;
if(l<=mid)v=max(query(u2,l,r),v);
if(r>mid)v=max(query(u
2+1,l,r),v);
return v;
}
int main(){
int m,p;
cin>>m>>p;
build(1,1,m);
while(m–){
char e;
int x;
cin>>e>>x;
if(e==’Q’){
maxx=query(1,n-x+1,n);
cout<<maxx<<endl;
}else{
mod(1,n+1,(x+maxx)%p);
n++;
}
}
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
```



活动打卡代码 AcWing 239. 奇偶游戏

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int p[N],d[N],n;
unordered_map<int,int>s;
int get(int x){
    if(s.count(x)==0)s[x]=++n;
    return s[x];
}
int find(int x){
    if(p[x]!=x){
    int root=find(p[x]);
    d[x]^=d[p[x]];
    p[x]=root;  
    }
    return p[x];
}
int main(){
    int T;
    cin>>n>>T;
    n=0;
    for(int i=1;i<N;i++)p[i]=i;
    int res=T;
    for(int i=1;i<=T;i++){
        int l,r;
        string e;
        cin>>l>>r>>e;
        l=get(l-1),r=get(r);
        int pl=find(l),pr=find(r);
        if(e=="even"){//l-1和r是同类
            if(pl==pr){
                if(d[l]^d[r]==1){
                    res=i-1;
                    break;
                }
            }else {
                d[pl]=d[l]^d[r]^0;
                p[pl]=pr;
            }
        }else{//l-1和r是不同类
            if(pl==pr){
                if(d[l]^d[r]==0){
                    res=i-1;
                    break;
                }
            }else {
                d[pl]=d[l]^d[r]^1;
                p[pl]=pr;
            }
        }
    }
    cout<<res;
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~


活动打卡代码 AcWing 238. 银河英雄传说

#include<bits/stdc++.h>
using namespace std;
const int N=30010;
int p[N],d[N],s[N];
int n;
int find(int x){
    if(p[x]!=x){
        int root=find(p[x]);
        d[x]+=d[p[x]];
        p[x]=root;
    }
    return p[x];
}
int main(){
    cin>>n;
    for(int i=1;i<N;i++){
        p[i]=i;
        s[i]=1;
    }
    while(n--){
        int a,b;
        char e;
        cin>>e>>a>>b;
        int pa=find(a),pb=find(b);
        if(e=='M'){
            if(pa!=pb){
               d[pa]=s[pb];
            s[pb]+=s[pa];
            p[pa]=p[pb]; 
            }
        }else{
            if(pa!=pb)cout<<-1<<endl;
            else cout<<max(0,abs(d[a]-d[b])-1)<<endl;
        }
    }
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~


活动打卡代码 AcWing 237. 程序自动分析

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
unordered_map<int,int>S;//离散化
int T,n,m;
int p[N];
int get(int x){
    if(S.count(x)==0)S[x]=++m;
    return S[x];
}
int find(int x){
    if(p[x]!=x)p[x]=find(p[x]);
    return p[x];
}
int main(){
    cin>>T;
    while(T--){
        vector<pair<int,int>>temp;//储存不等于
        S.clear();
        m=0;
        cin>>n;
        for(int i=1;i<=2*n;i++)p[i]=i;
        for(int i=0;i<n;i++){
            int x1,x2,e;
            cin>>x1>>x2>>e;
            int tx1=get(x1),tx2=get(x2);
            if(e==1)p[find(tx1)]=p[find(tx2)];
            else temp.push_back({tx1,tx2});
        }
        bool res=true;
        for(int i=0;i<temp.size();i++){
            int x1=temp[i].first,x2=temp[i].second;
            if(p[find(x1)]==p[find(x2)]){
                res=false;
                break;
            }
        }
        if(res)cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~


活动打卡代码 AcWing 1252. 搭配购买

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,V;
int p[N],v[N],w[N],f[N];
int find(int x){
    if(p[x]!=x)p[x]=find(p[x]);
    return p[x];
}
int main(){
    cin>>n>>m>>V;
    for(int i=1;i<=n;i++)p[i]=i;
    for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
    for(int i=1;i<=m;i++){
        int a,b;
        cin>>a>>b;
        int pa=find(a),pb=find(b);
        if(pa!=pb){
            p[pa]=p[pb];
            v[pb]+=v[pa];
            w[pb]+=w[pa];
        }
    }
    for(int i=1;i<=n;i++){
        if(p[i]==i){
            for(int j=V;j>=v[i];j--){
                f[j]=max(f[j],f[j-v[i]]+w[i]);
            }
        }
    }
    cout<<f[V];
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~


活动打卡代码 AcWing 1250. 格子游戏

#include<bits/stdc++.h>
using namespace std;
const int N=40001;
int n,m,p[N];
int get(int x,int y){
    return x*n+y;
}
int find(int x){
    if(p[x]!=x)p[x]=find(p[x]);
    return p[x];
}
int main(){
    cin>>n>>m;
    for(int i=0;i<n*n;i++)p[i]=i;
    int temp=0;
    for(int i=1;i<=m;i++){
        int x,y;
        char z;
        cin>>x>>y>>z;
        x--,y--;
        int a=get(x,y);
        int b;
        if(z=='D')b=get(x+1,y);
        else b=get(x,y+1);
        if(find(a)==find(b)){
            temp=i;
            break;
        }
        p[find(a)]=p[find(b)];
    }
    if(!temp)cout<<"draw";
    else cout<<temp;
    return 0;
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~


活动打卡代码 AcWing 240. 食物链

啊哈哈1
1个月前

#include<iostream>
using namespace std;
const int N=50010;
int p[N],d[N];
int find(int x){
    if(p[x]!=x){
        int temp=find(p[x]);
        d[x]+=d[p[x]];
        p[x]=temp;
    }
    return p[x];
}
int main(){
    int n,k;
    int sum=0;
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        p[i]=i;
    }
    while(k--){
        int temp,x,y;
        cin>>temp>>x>>y;
        if(x>n||y>n)sum++;
        else{
            int tx=find(x),ty=find(y);
            if(temp==1){
                if(tx==ty&&(d[x]-d[y])%3)sum++;
                else if(tx!=ty){
                    p[tx]=ty;
                    d[tx]=d[y]-d[x];
                }
            }else{
                if(tx==ty&&(d[x]-1-d[y])%3)sum++;
                else if(tx!=ty){
                    p[tx]=ty;
                    d[tx]=d[ty]+1-d[x];
                }
            }
        }
    }
    cout<<sum;
    return 0;
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~


活动打卡代码 AcWing 804. n的阶乘

啊哈哈1
1个月前
import java.util.Scanner;

public class Main{
    public static int fact(int n){
    int res=1;
    for(int i=1;i<=n;i++){
        res*=i;
    }
    return res;
}
    public static void main(String[] args){
        int n;
        Scanner sy=new Scanner(System.in);
        n=sy.nextInt();
        System.out.println(fact(n));
    }
}
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~