2019牛客暑期多校训练营(第四场)

Problem A meeting

https://ac.nowcoder.com/acm/contest/884/A

题意:

题解:

C++版本一

#include
using namespace std;
const int N=1e5+7;
//树直径都是这么求的
int vis[N];
int len111,lll;///保留最长长度和距离最远的点
int a[N];
vector son[N];
void dfs(int len,int fa,int x)
{
    for(int i=0;i>n>>k;
    for(int i=1;i>a>>b;
        son[a].push_back(b);
        son[b].push_back(a);
    }
    for(int i=1;i<=k;i++)
        {cin>>a[i];vis[a[i]]=1;}
    dfs(1,a[1],a[1]);
    //cout<

Problem B xor

 

题意:

题解:

C++版本一

 

Problem C sequence

https://ac.nowcoder.com/acm/contest/884/C

题意:

题解:

C++版本一

#include
using namespace std;
typedef long long LL;
const int N=3e6+10;
const int INF=0x3f3f3f3f;
LL n,top,a[N],b[N],L[N],R[N],Sum[N],Lmin[N],Rmin[N];
struct dat{
    LL idx,val;
}S[N];
 
int main()
{
    cin>>n;
    for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
    for (int i=1;i<=n;i++) scanf("%lld",&b[i]);
    for (int i=1;i<=n;i++) Sum[i]=Sum[i-1]+b[i];
 
    a[n+1]=-INF;
    for (int i=1;i<=n+1;i++) {
        while (top && a[i]Max) Max=sum,id=i;
    }
    sum=0; Max=0; id=n+1;
    for (int i=n;i;i--) {
        sum+=b[i];
        Rmin[i]=id-1;
        if (sum>Max) Max=sum,id=i;
    }
 
    LL ans=-INF;
    for (int i=1;i<=n;i++)
        if (a[i]>=0) ans=max(ans,a[i]*(Sum[R[i]]-Sum[L[i]-1]));
        else {
            LL lm=max(L[i],Lmin[i]),rm=min(R[i],Rmin[i]);
            ans=max(ans,a[i]*(Sum[rm]-Sum[lm-1]));
        }
    cout<

Problem D triples I

https://ac.nowcoder.com/acm/contest/884/D

题意:

题解:

C++版本一

#include
using namespace std;
const int N=2e5+7;
int main()
{
    int zs;
    cin>>zs;
    while(zs--)
    {
        long long n;
        vectors,ans,ans2;
        cin>>n;
        if(n%3==0) {cout<<1<<' '<

Problem E triples II

 

题意:

题解:

C++版本一

 

Problem F merge

 

题意:

题解:

C++版本一

 

Problem G tree

 

题意:

题解:

C++版本一

 

Problem H RNGs

 

题意:

题解:

C++版本一

 

Problem I string

 

题意:

题解:

C++版本一

 

Problem J free

https://ac.nowcoder.com/acm/contest/884/J

题意:

题解:

C++版本一

# include 
# include 
# include 
# include 
# define mp make_pair
# define R register int
 
using namespace std;
 
int h,n,m,k,s,t,a,b,c,firs[3009];
struct edge
{
    int co,too,nex;
}g[10009];
int d[3009][3009];
bool vis[3009][3009];
typedef pair  pii;
priority_queue ,greater > q;
 
void add(int x,int y,int co)
{
    g[++h].too=y;
    g[h].co=co;
    g[h].nex=firs[x];
    firs[x]=h;
}
 
void dis()
{
    memset(d,127,sizeof(d));
    d[s][0]=0;
    q.push(mp(0,s));
    int beg,j,x;
    while (q.size())
    {
        beg=q.top().second;
        q.pop();
        x=beg/n;
        beg%=n;
        if(vis[beg][x]) continue;
        vis[beg][x]=true;
        for (R i=firs[beg];i;i=g[i].nex)
        {
            j=g[i].too;
            if(d[beg][x]+g[i].cod[beg][x])
            {
                d[j][x+1]=d[beg][x];
                q.push(mp(d[j][x+1],j+(x+1)*n));
            }
        }
    }
}
 
int main()
{
    scanf("%d%d%d%d%d",&n,&m,&s,&t,&k);
    for (R i=1;i<=m;++i)
    {
        scanf("%d%d%d",&a,&b,&c);
        add(a,b,c);
        add(b,a,c);
    }
    dis();
    printf("%d\n",d[t][k]);
    return 0;
}

Problem K number

https://ac.nowcoder.com/acm/contest/884/K

题意:

题解:

C++版本一

#include 
using namespace std;
const int maxn = 1e5 + 7;
int sum[maxn], cnt[3];
int main()
{
    string str; cin >> str;
    int len = str.length();
    long long ans = 0;
    int l = 0; int t = 0;
    cnt[1] = -1; cnt[2] = -1;
    //while (str[l] == '0') l++;
    for (int i = l; i < len; i++)
    {
        sum[i+1] = (sum[i] + (str[i] - '0')) % 3;
        //cout << "? " <> "<< ans << endl;
            }
        }
    }
    cout << ans + t << endl;
    return 0;
}

 

你可能感兴趣的:(#,C++,#,2019牛客暑期多校训练营)