问题标题: 1772 大佬快来!!! 2901!!!1247!!! 3254!!!

0
0
已解决
杨穹宇
杨穹宇
初级守护
初级守护

#include<iostream>
#include<iomanip>
#include<cmath>
#include<math.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<bits/stdc++.h>
using namespace std;
int find(int start,int end,int x){
    int left,mid,right;
    left=start;
    right=end;
    while(left<=right){
        mid=(left+right)/2;
        if(a[mid]==x){
            int count=1,i;
            i=mid-1;
            while(i>=start&&a[i]==x){
                count++,i--;
                i=mid+1;
                while(i<=end&&a[i]==x){
                    count++,i++;
                    return count;
                }//3 while
            }//2 while
        }else if(a[mid]<x){
            left=mid+1;
        }else{
            right=mid-1;
        }//1 else
    }//1 while
    return 0;
}//1 int
int main(){
    int n,c;
    cin>>n>>c;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    sort(a,a+n);
    int count=0;
    for(int i=0;i<n-1;i++){
        count+=find(i+1,n-1,a[i]+c);
    }
    cout<<count<<endl;
    return 0;
}

 

编译错误

杨穹宇在2022-10-27 13:19:45追加了内容

求大佬找错

#include<bits/stdc++.h>
using namespace std;
const int max=50005;
int n,i,size,l,r,mid,tot1,tot2;
int first[max],num[max],f[max][18],d[max][18],p[max],vis[max];
struct bian{int to,next,len;
};
bian edge[max<<1];
struct{int id,int len;
};
shu a[max],b[max];
inline int get_int(){
    int x=0,f=1;
    char c;
    for(c=getchar();(!isdigit(c))&&(c!='-')c=getchar());
    if(c=='-') f=-1,c=getchar();
    for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+c-'0';
    return x*f;    
}
inline void build(int x,int y,int z){
    edge(++size).next=first[x];
    first[x]=size;
    edge[size].to=y,edge[size].len=z;
}
inline void dfs(int point,int fa){
    for(int u=first[point];u;u=edge[u].next){
        int to=edge[u].to;
        if(to==fa)continue;
        f[to][0]=point,d[to][0]=edge[u].len;
        dfs(to,point);
    }
}
inline void pre(){
    for(int j=1;j<=16;j++)
        for(int i=1;i<=n;i++)
        if(f[i][j-1]) f[i][j]=f[f[i][j-1]][j-1],d[i][j]=d[i][j-1]+d[f[i][j-1]][j-1];
}
inline void search(int point,int fa){
    if(vis[point])return;
    vis[point]=1;int tag=0;
    for(int u=first(point);u;u=edge[u].next){
        int to=edge[u].to;
        if(to==fa)continue;
        tag=1;
        search(to,point);
        vis[point]&=vis[to];
    }
    if(!tag)vis[point]=0;
}
inline bool comp(const shu &a,const shu &b){
    return a.len<b.len;
}
inline bool check(int mid){
    tot1=tot2=0;
    for(int i=1;i<=n;i++)vis[i]=0;
    for(int i=1;i<=m;i++){
        int sum=0,p[i];
        for(int k=16;k>=0;k--)
        if(f[x][k]>1&&sum+d[x][k]<=mid) sum+=d[x][k],x=f[x][k];
        if(f[x][0]==1&&sum+=d[x][0]<=mid)a[++tot1].len=mid-sum=d[x][0],a[tot1].id=x;
        else vis[x]=1;
    }
    search(1,0);
    if(vis[1]) return 1;
    for(int u=first[1];u;u=edge[u].next)
    if(!vis[edge[u].to]) b[++tot2].len=edge[u].len,b[tot2].id=edge[u].to;
    sort(a+1,a+tot1+1,comp),sort(b+1,b+tot2+1,comp);
    if(tot1<tot2) return 0;
    int tag=1;
    for(int i=1;i<=tot1;i++){
        if(!vis[a[i].id]) vis[a[i].id]=1;
        else if(a[i].len>=b[tag].len) vis[b[tag].id]=1;
        while(tag<=tot2&&vis[b[tag].id]) tag++;
        if(tag>tot2) return 1;
    }
    return tag>tot2;
}
int main(){
    n=get_int();
    for(int i=1;i<=n;i++){
        int x=get_int(),y=get_int(),z=get_int();
        build(x,y,z),build(y,x,z);
    }
    m=get_int();
    for(int i=1;i<=m;i++) p[i]=get_int();
    dfs(1,0);
    pre();
    l=0,r=le9;int tag=0;
    while(1<r){
        mid=(1+r)>>1;
        if(check(mid)) tag=1,r=mid;
        else l=mid+1;
    }
    if(tag) cout<<r<<"\n";
    else cout<<"-1\n";
    return 0;
}

杨穹宇在2022-10-30 20:29:11追加了内容

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long a,b,c,max,n;
    cin>>n;
    for(int i=0;i<=n;i++){
        for(int j=0;j<=n;j++){
            for(int k=0;k<=n;k++){
                if((i+j)%2==0&&(k+j)%3==0&&(i+k)%5==0&&i+j+k>max){
                    max=i+j+k;
                    a=i;
                    b=j;
                    c=k;
                }
            }
        }
    }
    cout<<max<<" "<<a<<" "<<b<<" "<<c;
    return 0;
}
在控制台时没过!!!

杨穹宇在2022-10-31 13:26:38追加了内容

#include<bits/stdc++.h>
using namespace std;
int n;
struct P{
    int l,r;int t;
}a[200010];
int f[200010];
bool cmp(P u,P v){
    return u.r<v.r;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].l>>a[i].r;
        a[i].t=i;
    }
    sort(a+1,a+1+n,cmp);
    int cnt=1,r=a[1].r;
    f[cnt]=a[1].t;
    for(int i=2;i<=n;i++){
        if(a[i].l>r){
            r=a[i].r;
            cnt++;
            f[cnt]=a[i].t;
        }
    }
    sort(f+1,f+1+cnt);
    cout<<cnt<<endl;
    for(int i=1;i<=cnt;i++){
        cout<<f[i]<<" ";
    }
    return 0;
}


0
已采纳
熊潇然
熊潇然
初级启示者
初级启示者

没必要这么复杂

先用sort把a从小到大排序

遍历1~n

    遍历i+1~n

        如果a[j]-a[i]==m,计数

        如果a[j]-a[i]>=m,这时候无需继续遍历,直接break。如果不break会TLE 80分

 

输出cnt

 

很简单,如果这一题做对了,5422 A + B = C 也非常简单

0
被禁言 张恩昊
张恩昊
资深天翼
资深天翼
田所浩二在1145-1-4 19:19:810追加了内容

压力马斯内!板块错力罢!

0
0
0
0
0
曹博扬
曹博扬
初级天翼
初级天翼

e,我有亿点点怀疑前两个代码的真实**

0
0
0
0
0
我要回答