文章目录
题解
A - Array with Odd Sum
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll t;
cin>>t;
while(t--){
ll n;
cin>>n;
ll sum=0;
bool flago=false,flage=false;
for(ll i=1;i<=n;i++){
ll x;
scanf("%lld",&x);
sum+=x;
if(x&1)flago=true;
else flage=true;
}
if(sum&1||(flago&&flage))puts("YES");
else puts("NO");
}
}
B - Food Buying
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll t;
cin>>t;
while(t--){
ll x;
cin>>x;
ll ans=0;
while(x>=10){
ans+=x/10*10;
x=x%10+x/10;
}
ans+=x;
cout<<ans<<endl;
}
}
C - Yet Another Walking Robot
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=0x7f7f7f7f;
const ll maxn=2e5+10;
map<pair<ll,ll>,ll>mp;
char s[maxn];
int main(){
ll t;
cin>>t;
while(t--){
mp.clear();
ll n;
cin>>n;
cin>>s+1;
ll c=0,m=0;
pair<ll,ll>ans=make_pair(0,INF);
mp[make_pair(0,0)]=0;
for(ll i=1;i<=n;i++){
if(s[i]=='L')c--;
else if(s[i]=='R')c++;
else if(s[i]=='U')m--;
else m++;
if(mp.count(make_pair(m,c))&&ans.second-ans.first+1>i-mp[make_pair(m,c)])
ans=make_pair(mp[make_pair(m,c)]+1,i);
mp[make_pair(m,c)]=i;
}
if(ans.first)printf("%lld %lld\n",ans.first,ans.second);
else puts("-1");
}
}
D - Fight with Monsters
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll>vec;
int main(){
ll n,a,b,k;
cin>>n>>a>>b>>k;
for(ll i=1;i<=n;i++){
ll x;
cin>>x;
x-=(x-1)/(a+b)*(a+b);
x-=a;
if(x>0){
vec.push_back((x+a-1)/a);
}
else
vec.push_back(0);
}
sort(vec.begin(),vec.end());
ll ans=0;
for(ll i=0;i<n;i++){
if(k>=vec[i]){
ans++;
k-=vec[i];
}
else
break;
}
cout<<ans<<endl;
}
E1 - String Coloring (easy version)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll n;
string s;
cin>>n;
cin>>s;
string ans;
string cur;
bool flag=true;
for(ll i=0;i<n;i++){
if(i==0||s[i]>=s[i-1]){
ans+='0';
cur+='0';
continue;
}
ans+='1';
cur+='1';
for(ll j=i-1;j>=0;j--){
if(!flag||s[j+1]>=s[j])
break;
if(cur[j]=='1')
flag=false;
else{
swap(cur[j+1],cur[j]);
swap(s[j+1],s[j]);
}
}
}
if(flag){
puts("YES");
cout<<ans<<endl;
}
else
puts("NO");
}
E2 - String Coloring (hard version)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=2e5+10;
ll dp1[maxn],dp2[26];
int main(){
ll n;
cin>>n;
string s;
cin>>s;
ll ans=0;
for(ll i=0;i<n;i++){
dp1[i]=1;
for(ll j=25;j>s[i]-'a';j--){
dp1[i]=max(dp1[i],dp2[j]+1);
}
dp2[s[i]-'a']=max(dp2[s[i]-'a'],dp1[i]);
ans=max(ans,dp2[s[i]-'a']);
}
cout<<ans<<endl;
for(ll i=0;i<n;i++){
printf("%lld%c",dp1[i],i==n-1?'\n':' ');
}
return 0;
}
F - Berland Beauty
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e3+10;
const int INF=0x3f3f3f3f;
int fa[maxn][maxn];
int ans[maxn][maxn];
int head[maxn];
int l[maxn],r[maxn],c[maxn];
struct edge{
int u,v,next;
}g[maxn<<1];
int cnt;
void add(int u,int v){
g[cnt].u=u;
g[cnt].v=v;
g[cnt].next=head[u];
head[u]=cnt++;
}
void dfs(int u,int f,int r){
fa[r][u]=f;
for(int i=head[u];~i;i=g[i].next){
int v=g[i].v;
if(v==f)continue;
dfs(v,u,r);
}
}
int main(){
memset(head,-1,sizeof(head));
int n;
cin>>n;
for(int i=1;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
for(int i=1;i<=n;i++){
dfs(i,-1,i);
}
int m;
cin>>m;
bool flag=true;
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
l[i]=u,r[i]=v,c[i]=w;
while(u!=v){
ans[v][fa[u][v]]=ans[fa[u][v]][v]=max(ans[fa[u][v]][v],w);
v=fa[u][v];
}
}
for(int i=1;i<=m;i++){
int u=l[i],v=r[i],w=c[i];
bool flag1=false;
while(u!=v){
if(ans[v][fa[u][v]]==w)
flag1=true;
v=fa[u][v];
}
if(!flag1){
flag=false;
break;
}
}
if(flag){
for(int i=1;i<n;i++){
int I=(i-1)<<1;
printf("%d%c",ans[g[I].u][g[I].v]?ans[g[I].u][g[I].v]:1000000,i==n-1?'\n':' ');
}
}
else
puts("-1");
return 0;
}