文章目录
题目
A - Keanu Reeves
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
string s;
cin>>s;
int cnt0=0,cnt1=0;
for(int i=0;i<s.size();i++){
if(s[i]=='0')
cnt0++;
else
cnt1++;
}
if(cnt0==cnt1){
printf("2\n");
for(int i=0;i<s.size()-1;i++)
printf("%c",s[i]);
printf(" %c\n",s[s.size()-1]);
}
else{
printf("1\n");
cout<<s<<endl;
}
}
B - Number Circle
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int a[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+1+n);
if(a[n]>=a[n-1]+a[n-2])
puts("NO");
else{
puts("YES");
swap(a[n],a[n-1]);
for(int i=n;i>0;i--){
printf("%d%c",a[i],i==1?'\n':' ');
}
}
}
C - Candies!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e5+10;
unordered_map<ll,pair<ll,ll> >mp[maxn];
ll a[maxn];
int main(){
ll n;
scanf("%lld",&n);
for(ll i=1;i<=n;i++){
scanf("%lld",&a[i]);
mp[i][1]=make_pair(0,a[i]%10);
}
ll len=1;
while(len<=n){
len*=2;
for(ll i=1;i+len-1<=n;i++){
mp[i][len]=make_pair(mp[i][len/2].first+mp[i+len/2][len/2].first+(mp[i][len/2].second+mp[i+len/2][len/2].second)/10,(mp[i][len/2].second+mp[i+len/2][len/2].second)%10);
}
}
ll q;
scanf("%lld",&q);
while(q--){
ll l,r;
scanf("%lld%lld",&l,&r);
printf("%lld\n",mp[l][r-l+1].first);
}
}
D1 - Add on a Tree
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int d[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
d[u]++;
d[v]++;
}
bool flag=true;
for(int i=1;i<=n;i++){
if(d[i]==2){
flag=false;
break;
}
}
if(flag)puts("YES");
else puts("NO");
}
D2 - Add on a Tree: Revolution
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e3+10;;
ll vis[maxn][maxn];
struct Edge{
ll v,w,next;
}e[maxn<<1];
struct Ans{
ll u,v,w;
}ans[maxn<<2];
ll Cnt;
ll head[maxn];
ll cnt;
void add(ll u,ll v,ll w){
e[cnt].v=v;
e[cnt].w=w;
e[cnt].next=head[u];
head[u]=cnt++;
}
ll de[maxn];
int findnode(ll u,ll f){
if(de[u]==1)return u;
for(ll i=head[u];~i;i=e[i].next){
ll v=e[i].v;
if(v==f)continue;
return findnode(v,u);
}
}
void solve(ll u,ll v,ll w){
vector<int>vec[2];
if(de[u]==1){
vec[0].push_back(u);
}
else{
for(ll i=head[u];~i;i=e[i].next){
if(e[i].v==v)continue;
vec[0].push_back(findnode(e[i].v,u));
if(vec[0].size()==2)break;
}
}
if(de[v]==1){
vec[1].push_back(v);
}
else{
for(ll i=head[v];~i;i=e[i].next){
if(e[i].v==u)continue;
vec[1].push_back(findnode(e[i].v,v));
if(vec[1].size()==2)break;
}
}
if(vec[0].size()==1){
if(vec[1].size()==1)
ans[++Cnt]=(Ans){vec[0][0],vec[1][0],w};
else{
ans[++Cnt]=(Ans){vec[0][0],vec[1][0],w/2};
ans[++Cnt]=(Ans){vec[0][0],vec[1][1],w/2};
ans[++Cnt]=(Ans){vec[1][0],vec[1][1],-w/2};
}
}
else{
if(vec[1].size()==1){
ans[++Cnt]=(Ans){vec[1][0],vec[0][0],w/2};
ans[++Cnt]=(Ans){vec[1][0],vec[0][1],w/2};
ans[++Cnt]=(Ans){vec[0][0],vec[0][1],-w/2};
}
else{
ans[++Cnt]=(Ans){vec[1][0],vec[0][0],w/2};
ans[++Cnt]=(Ans){vec[1][1],vec[0][1],w/2};
ans[++Cnt]=(Ans){vec[0][0],vec[0][1],-w/2};
ans[++Cnt]=(Ans){vec[1][0],vec[1][1],-w/2};
}
}
}
int main(){
ll n;
scanf("%lld",&n);
memset(head,-1,sizeof(head));
for(ll i=1;i<n;i++){
ll u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
add(v,u,w);
de[u]++;
de[v]++;
}
for(ll i=1;i<=n;i++){
if(de[i]==2){
puts("NO");
return 0;
}
}
for(ll u=1;u<=n;u++){
for(ll i=head[u];~i;i=e[i].next){
ll v=e[i].v;
if(vis[u][v])continue;
vis[u][v]=vis[v][u]=1;
solve(u,v,e[i].w);
}
}
puts("YES");
printf("%lld\n",Cnt);
for(ll i=1;i<=Cnt;i++){
printf("%lld %lld %lld\n",ans[i].u,ans[i].v,ans[i].w);
}
}
E - Count Pairs
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
unordered_map<ll,ll>mp;
int main(){
ll n,p,k;
scanf("%lld%lld%lld",&n,&p,&k);
for(ll i=1;i<=n;i++){
ll x;
scanf("%lld",&x);
mp[(x*x%p*x%p*x%p-k*x%p+p)%p]++;
}
ll ans=0;
for(auto it:mp)
ans+=it.second*(it.second-1)/2;
cout<<ans<<endl;
}