应该没人来看了吧,就贴个代码了
A - Game 23
#include<bits/stdc++.h>
#define il inline
#define pb push_back
#define fi first
#define se second
#define ms(_data,v) memset(_data,v,sizeof(_data))
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
ll n,m;
int main() {
std::ios::sync_with_stdio(0);
cin>>n>>m;
if(m<n || m%n!=0) cout<<-1<<endl;
else if(m==n) cout<<0<<endl;
else {
ll num=0,t=m/n;
while(t%2==0) {
t/=2;
num++;
}
while(t%3==0) {
t/=3;
num++;
}
if(t!=1) cout<<-1<<endl;
else cout<<num<<endl;
}
return 0;
}
B - Maximal Continuous Rest
#include<bits/stdc++.h>
#define il inline
#define pb push_back
#define fi first
#define se second
#define ms(_data,v) memset(_data,v,sizeof(_data))
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int maxn=2e5+5;
int a[maxn*2],n;
int main(){
std::ios::sync_with_stdio(0);
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i],a[i+n]=a[i];
int ans=0,i=1,tp=0;
while(i<=2*n){
if(!a[i]) ++i;
else{
tp=0;
while(a[i++]) tp++;
ans=max(ans,tp);
}
}
ans=max(ans,tp);
cout<<ans<<endl;
return 0;
}
C - Polycarp Restores Permutation
#include<bits/stdc++.h>
#define il inline
#define pb push_back
#define fi first
#define se second
#define ms(_data,v) memset(_data,v,sizeof(_data))
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int maxn=2e5+5;
struct node{int id,num=0;};
map<int,node> mp;
int ans[maxn],n;
int main(){
std::ios::sync_with_stdio(0);
cin>>n;
mp[0].num=1,mp[0].id=1;
int sum=0,tp;
bool fg=0;
for(int i=1;i<=n-1;++i){
cin>>tp;
sum+=tp;
mp[sum].num++,mp[sum].id=i+1;
if(mp[sum].num>=2){
fg=1;
}
}
if(fg) cout<<-1<<endl;
else{
int i=1;
for(auto it=mp.begin();it!=mp.end();++it){
if(it==mp.begin()) ans[it->se.id]=i++,tp=it->fi;
else{
if(it->fi != tp+1){
cout<<-1<<endl;
return 0;
}
ans[it->se.id]=i++,tp=it->fi;
}
}
for(int i=1;i<=n;++i) cout<<ans[i]<<" ";
}
return 0;
}
D - Colored Boots
#include<bits/stdc++.h>
#define il inline
#define pb push_back
#define fi first
#define se second
#define ms(_data,v) memset(_data,v,sizeof(_data))
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
map<char,vector<int> > le;
map<char,vector<int> > ri;
const int maxn=2e5+5;
string l,r;
int la[maxn],ra[maxn],n;
int main() {
std::ios::sync_with_stdio(0);
cin>>n>>l>>r;
for(int i=0; i<(int)l.size(); ++i) {
le[l[i]].pb(i+1),ri[r[i]].pb(i+1);
}
int num=0;
for(auto it=le.begin(); it!=le.end(); ++it) {
if(it->fi=='?' || ri[it->fi].size()==0) continue;
while((it->se).size() && ri[it->fi].size()) {
num++;
la[num]=(it->se).back(),ra[num]=ri[it->fi].back();
(it->se).pop_back(),ri[it->fi].pop_back();
}
}
if(le['?'].size()) {
for(auto it=ri.begin(); it!=ri.end(); ++it) {
if(it->fi=='?' || it->se.size()==0) continue;
while((it->se).size() && le['?'].size()) {
num++;
la[num]=le['?'].back(),ra[num]=it->se.back();
(it->se).pop_back(),le['?'].pop_back();
}
}
while(le['?'].size() && ri['?'].size()) {
num++;
la[num]=le['?'].back(),le['?'].pop_back();
ra[num]=ri['?'].back(),ri['?'].pop_back();
}
}
if(ri['?'].size()) {
for(auto it=le.begin(); it!=le.end(); ++it) {
if(it->fi=='?' || it->se.size()==0) continue;
while((it->se).size() && ri['?'].size()) {
num++;
la[num]=(it->se).back(),ra[num]=ri['?'].back();
(it->se).pop_back(),ri['?'].pop_back();
}
}
}
cout<<num<<endl;
for(int i=1; i<=num; ++i) cout<<la[i]<<" "<<ra[i]<<endl;
return 0;
}
E - Superhero Battle
#include<bits/stdc++.h>
typedef long long ll;
ll n;
ll h,d[200010],min,net,i;
int main(){
scanf("%I64d%I64d",&h,&n);
for(i=0;i<n;i++){
scanf("%I64d",&d[i]),net+=d[i];
if(net<min)min=net;
}
if(net>=0&&min+h>0)printf("-1");
else{
ll temp=h;
for(i=0;i<n;i++){
temp+=d[i];
if(temp<=0){
printf("%I64d\n",i+1);
return 0;
}
}
ll round=(min+h)/(-net);
while(round*net+h+min>0)round++;
h+=net*round;
for(i=0;i<n;i++){
h+=d[i];
if(h<=0){
printf("%I64d\n",i+1+round*n);
return 0;
}
}
}
return 0;
}
F - Same Sum Blocks
#include<bits/stdc++.h>
#define il inline
#define pb push_back
#define fi first
#define se second
#define ms(_data,v) memset(_data,v,sizeof(_data))
#define sc(n) scanf("%d",&n)
#define SC(n,m) scanf("%d %d",&n,&m)
#define sz(a) int((a).size())
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int maxn=1e3+505;
int sum[maxn],n;
struct node{
int l,r;
};
bool cmp(node x,node y) {return x.r<y.r;}
map<int,vector<node> >num;
int main(){
std::ios::sync_with_stdio(0);
cin>>n;
rep(i,1,n) cin>>sum[i],sum[i]+=sum[i-1];
rep(i,1,n) rep(j,i,n) num[sum[j]-sum[i-1]].pb(node{i,j});
int cnt=0;
vector<node> ans;
for(auto it=num.begin();it!=num.end();++it){ //去除区间叠加的
vector<node> &tp=it->se;
sort(tp.begin(),tp.end(),cmp);
vector<node> tt;
int nr=-1,count=0;
rep(i,0,sz(tp)-1){
if(tp[i].l>nr) count++,nr=tp[i].r,tt.pb(node{tp[i].l,tp[i].r});
}
if(count>cnt) ans=tt,cnt=count;
}
cout<<sz(ans)<<endl;
rep(i,0,sz(ans)-1) cout<<ans[i].l<<" "<<ans[i].r<<endl;
return 0;
}
G - Privatization of Roads in Treeland
#include<bits/stdc++.h>
#define il inline
#define pb push_back
#define fi first
#define se second
#define ms(_data,v) memset(_data,v,sizeof(_data))
#define sc(n) scanf("%d",&n)
#define SC(n,m) scanf("%d %d",&n,&m)
#define sz(a) int((a).size())
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int maxn=2e5+5;
struct node{int id,to;};
vector<node> eg[maxn];
int n,k,in[maxn],ans,col[maxn];
void dfs(int np,int fa, int st){
rep(i,0,sz(eg[np])-1){
if(eg[np][i].to==fa) continue;
if(st>ans) st-=ans;
col[eg[np][i].id]=st;
dfs(eg[np][i].to,np,st+1);
st++;
}
}
int main(){
std::ios::sync_with_stdio(0);
cin>>n>>k;
for(int i=1,x,y;i<=n-1;++i){
cin>>x>>y;
in[x]++,in[y]++;
eg[x].pb(node{i,y}),eg[y].pb(node{i,x});
}
sort(in+1,in+n+1,greater<int>() );
ans=in[k+1];
dfs(1,0,1);
cout<<ans<<endl;
rep(i,1,n-1) cout<<col[i]<<" ";
return 0;
}