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<
题意:
题解:
C++版本一
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<
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<<' '<
题意:
题解:
C++版本一
题意:
题解:
C++版本一
题意:
题解:
C++版本一
题意:
题解:
C++版本一
题意:
题解:
C++版本一
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;
}
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;
}