Educational Codeforces Round 59 (Div. 2)
Educational Codeforces Round 59 (Div. 2)
A. Digits Sequence Dividing
题意:给一个整数串s,分成至少两份,大小依次严格递增。(1≤q≤300,2≤|s|≤300)
思路:分成两份,第一位分给第一份,余下分给第二份。
#include <bits/stdc++.h> using namespace std; void solve(){ int n;string s;cin>>n>>s; string s1=s.substr(0,1),s2=s.substr(1); if(s2.size()>s1.size()||s2[0]>s1[0]) cout<<"YES\n"<<"2\n"<<s1<<' '<<s2<<"\n"; else cout<<"NO\n"; } int main() { int t;cin>>t; while(t--) solve(); return 0; }
B. Digital root
题意:一个数的数根为取所有位之和构成新数直至只有一位。给出k,x,试求数根为x的第k个数。(1≤q
≤103,1≤k≤1012,1≤x≤9)
思路:每次+9,原理见:数根(digital root)公式的推导。
#include <bits/stdc++.h> using namespace std; void solve(){ long long k,x;cin>>k>>x; cout<<(k-1)*9+x<<"\n"; } int main() { int t;cin>>t; while(t--) solve(); return 0; }
C. Brutality
题意:给出一个操作序列和每次操作的伤害,相同操作最多连续k次,试求所能造成的最大伤害。
思路:双指针局部排序。
#include <bits/stdc++.h> using namespace std; int main() { int n,k;cin>>n>>k; int d[n];for(int &i:d) cin>>i; string s;cin>>s; long long sum=0; for(int l=0,r=0;l<n;l=r){ while(r<n&&s[r]==s[l]) ++r; sort(d+l,d+r,greater<int>()); for(int i=l;i<min(r,l+k);i++) sum+=d[i]; } cout<<sum<<"\n"; return 0; }

浙公网安备 33010602011771号