道心破�??
A. Sasha and Array Coloring
题面
显然取一大一小染一种颜色作差
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=55;
int a[N];
int main() {
::sync_with_stdio(false);cin.tie(nullptr);
iosint T;
>>T;
cinwhile(T--)
{
int n;
>>n;
cinfor(int i=1;i<=n;i++)
>>a[i];
cin(a+1,a+1+n);
sortint cnt=0;
for(int i=1,j=n;i<=j;i++,j--)
{
+=a[j]-a[i];
cnt}
<<cnt<<'\n';
cout}
return 0;
}
B. Long Long
题面
很明显最大的和就是所有数的绝对值的和
最小操作数就是连续的非全零的非正数段的个数,统计一下就行
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
[N];
ll aint main() {
::sync_with_stdio(false);cin.tie(nullptr);
iosint T;
>>T;
cinwhile(T--)
{
int n;
>>n;
cin=0;
ll sum=0;
ll cnt[0]=1;
a[n+1]=1;
afor(int i=1;i<=n;i++)
{
>>a[i];
cin+=abs(a[i]);
sum}
int j=1;
for(int i=1;i<=n;i++)
{
if(a[i]<=0)
{
++;
cntint j=i;
bool flag=false;
for(j=i;j<=n;j++)
{
if(a[j]>0)
break;
}
for(int k=i;k<j;k++)
{
if(a[k]!=0)
{
=true;
flagbreak;
}
}
if(!flag)
--;
cnt=j-1;
i}
}
<<sum<<' '<<cnt<<'\n';
cout}
return 0;
}
C. Sum in Binary Tree
题面
就是从底向跟的遍历
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
::sync_with_stdio(false);cin.tie(nullptr);
iosint T;
>>T;
cinwhile(T--)
{
;
ll n>>n;
cin=0;
ll sumwhile(n)
{
+=n;
sum/=2;
n}
<<sum<<'\n';
cout}
return 0;
}
D. Apple Tree
题面
需要统计每点的子树的叶子个数
AC代码:
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
// typedef long long ll;
#define int long long
const int N=2e5+5;
<int>s[N],k[N];
vector<N>vis,v;
bitset<int>root;
vectorint countt[N];
void dfs(int x)
{
if(vis[x])
return;
[x]=1;
visfor(auto it:k[x])
{
if(vis[it])
continue;
[x].push_back(it);
s(it);
dfs}
}
int Dfs(int x)
{
if(s[x].size()==0)
{
[x]=1;
counttreturn countt[x];
}
for(auto it:s[x])
{
[x]+=Dfs(it);
countt}
return countt[x];
}
signed main() {
::sync_with_stdio(false);cin.tie(nullptr);
iosint T;
>>T;
cinwhile(T--)
{
int n;
>>n;
cin(countt,0,sizeof(countt));
memsetfor(int i=1;i<n;i++)
{
int u,v;
>>u>>v;
cin[u].push_back(v);
k[v].push_back(u);
k}
(1);
dfsint q;
>>q;
cin(1);
Dfswhile(q--)
{
int x,y;
>>x>>y;
cin<<countt[x]*countt[y]<<'\n';
cout}
for(int i=1;i<=n;i++)
{
[i].clear();
s[i].clear();
k}
.reset();v.reset();
vis}
return 0;
}
简化后的代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
<int>s[N];
vectorint cnt[N];
int dfs(int x,int f)
{
if(s[x].size()==1&&s[x][0]==f)
{
[x]++;
cntreturn cnt[x];
}
for(auto it:s[x])
{
if(it!=f)
[x]+=dfs(it,x);
cnt}
return cnt[x];
}
signed main() {
::sync_with_stdio(false);cin.tie(nullptr);
iosint T;
>>T;
cinwhile(T--)
{
int n;
>>n;
cinfor(int i=1;i<=n;i++)
{
[i].clear();
s[i]=0;
cnt}
for(int i=1;i<n;i++)
{
int u,v;
>>u>>v;
cin[u].push_back(v);
s[v].push_back(u);
s}
(1,0);
dfsint q;
>>q;
cinwhile(q--)
{
int x,y;
>>x>>y;
cin<<cnt[x]*cnt[y]<<'\n';
cout}
}
return 0;
}
E. Tracking Segments
����
��������ҵĶ���д��
֮ǰд����
#include<bits/stdc++.h>
using namespace std;
int main()
{
int l=1,r=q,ans=-1;
while(l<r)
{
int mid=(l+r)>>1;
if(judge(mid))
{
=mid;
r=mid;
ans}
else
=mid+1;
l}
}
֮ǰ��д��A�������⣬��֪������д����
����һ��д�����ܹ�
AC���룺
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
::sync_with_stdio(false);cin.tie(nullptr);
iosint T;
>>T;
cinwhile(T--)
{
int n,m;
>>n>>m;
cin<pair<int,int>>s(m);
vectorfor(int i=0;i<m;i++)
>>s[i].first>>s[i].second;
cinint q;
>>q;
cin<int>p(q);
vectorfor(int i=0;i<q;i++)
>>p[i];
cinint l=1,r=q,ans=-1;
while(l<=r)
{
int mid=(l+r)>>1;
<int>sum(n+1,-1);
vectorfor(int i=0;i<mid;i++)
[p[i]]=1;
sum[0]=0;
sumfor(int i=1;i<=n;i++)
[i]+=sum[i-1];
sumbool flag=false;
for(int i=0;i<m;i++)
{
if(sum[s[i].second]-sum[s[i].first-1]>0)
{
=true;
flagbreak;
}
}
if(flag)
{
=mid-1;
r=mid;
ans}
else
=mid+1;
l}
<<ans<<'\n';
cout}
return 0;
}