Word Processor
简单模拟

void solve(){
  string s;
  cin>>n>>m;ll cnt = 0;
  rep(i,1,n){
    cin>>s;
    if(cnt+len(s)>m){
      cout<<"\n"<<s<<" ";cnt=len(s);
    }else{
      cout<<s<<" ";cnt+=len(s);
    }
  }
  return ;
}

Photoshoot
n<=1000,模拟操作即可,从小到大枚举ans[1],只要满足条件输出即可,因为i更小字典序一定更小
注意是排列,不能重复不缺失

ll n,m;
void solve(){ 
  cin>>n;
  vector<int> a(n+1),b(n+1);
  rep(i,1,n-1)cin>>a[i];
  rep(i,1,n){
    vector<int> vis(n+1);
    b[1]=i;
    vis[i]=1;
    bool f = 1;
    rep(j,2,n){
      b[j]=a[j-1]-b[j-1];
      if(vis[b[j]]||b[j]<0||b[j]>n){f=0;break;}
      vis[b[j]]=1;
    }
    if(f){
      rep(i,1,n)cout<<b[i]<<" ";return ;
    }
  }
  return;
}

Race
二分时间,也就是二分最大速度,画图讨论即可
分为一直加速,先加速后匀速后减速,先加速后减速

ll n,m,k;
ll calc(ll x,ll y){
  if(x>y)swap(x,y);
  return (y+x)*(y-x+1)/2;
}
ll work(ll up,ll x){
  if(up<=x)return calc(1,up);
  ll mid = (up+x)>>1;
  if((up+x)%2==1)return calc(1,mid)+calc(x,mid);
  else return calc(1,mid)+calc(mid-1,x);
}
void solve(){ 
  cin>>k>>n;
  rep(i,1,n){
    int x;cin>>x;
    ll l = 1,r = 100000;
    while(l<=r){
      ll mid = (l+r)>>1;
      if(work(mid,x)>=k)r=mid-1;
      else l=mid+1;
    }
    cout<<l<<'\n';
  }
  return;
}