首页 > 其他分享 >Codeforces Round #829 (Div. 2)

Codeforces Round #829 (Div. 2)

时间:2022-11-24 20:45:15浏览次数:46  
标签:typedef const ll Codeforces long cin 829 tie Div

A. Technical Support

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll>  pll;
const ll N=2e5+10;
const ll inf=1e18;
const ll mod=9901;
signed main(){
  ios::sync_with_stdio(false);
  cin.tie(0);cout.tie(0);
  ll t;cin>>t;
  while(t--){
	ll n;cin>>n;
	string s;cin>>s;
	ll ans=0;
	for(ll i=0;i<s.size();i++){
		if(s[i]=='Q') ans++;
		else if(ans>0) ans--;
	}
	if(ans) cout<<"No"<<endl;
	else cout<<"Yes"<<endl;
  }
}

B. Kevin and Permutation

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll>  pll;
const ll N=2e5+10;
const ll inf=1e18;
const ll mod=9901;
signed main(){
  ios::sync_with_stdio(false);
  cin.tie(0);cout.tie(0);
  ll t;cin>>t;
  while(t--){
	ll n;cin>>n;
	if(n&1) cout<<n<<" ";
	for(ll i=n/2;i>=1;i--) cout<<i<<" "<<i+n/2<<" ";
	cout<<endl;
  }
}

C1. Make Nonzero Sum (easy version)

题解:因为只包含1和-1,每次都考虑a[i]和a[i+1],和就是a[i]-a[i+1],可以发现,如果这两个数相同的话和就是0,如果不同的话就应该把他们分别加上。

例如:一个序列1 1,直接选择[1,2]这个区间,和就是1-1=0,和为0,如果序列为1 -1,那么就分两次选择,[1,1]和[2,2],就是1+(-1)=0

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll>  pll;
const ll N=1e6+5;
const ll inf=1e18;
const ll mod=9901;
ll a[N];
signed main(){
  ios::sync_with_stdio(false);
  cin.tie(0);cout.tie(0);
  ll t;cin>>t;
  while(t--){
    ll n;cin>>n;
    for(ll i=1;i<=n;i++) cin>>a[i];
    vector<ll> ans;
    ans.push_back(0);
    for(ll i=2;i<=n;i++){
      if(i&1) continue;
      if(a[i]==a[i-1]) ans.push_back(i);
      else ans.push_back(i-1),ans.push_back(i);
    }
    if(n&1) cout<<"-1"<<endl;
    else{
      cout<<ans.size()-1<<endl;
      for(ll i=1;i<ans.size();i++){
        cout<<ans[i-1]+1<<" "<<ans[i]<<endl;
      }
    } 
  }
}

C2. Make Nonzero Sum (hard version)

题解:与前一题相同,只需要判断一下0的位置

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll>  pll;
const ll N=2e5+5;
const ll inf=1e18;
const ll mod=9901;
ll a[N];
signed main(){
  ios::sync_with_stdio(false);
  cin.tie(0);cout.tie(0);
  ll t;cin>>t;
  while(t--){
    ll n;cin>>n;
    ll sum=0;
    for(ll i=1;i<=n;i++){
       cin>>a[i];
       if(a[i]) sum++;
    }
    vector<ll> ans;
    if(sum&1) cout<<"-1"<<endl;
    else {
      ll beg=0,end=0;
      ll p=0;
      for(ll i=1;i<=n;i++){
        if(a[i]){
          p++;
          if(p==1){
            if(a[i-1]==0){
            ans.push_back(i-1);
            }
            beg=i;
          }
          else if(p==2){
            end=i;
            if(((end-beg)%2&&a[end]==a[beg])||((end-beg)%2==0&&a[end]!=a[beg])){
              ans.push_back(end);
            }
            else {
              ans.push_back(beg);
              ans.push_back(end);
            }
            p=0;
          }
        }
      }
      if(a[1]==0){
        ans.insert(ans.begin(),0);
      }
      if(a[n]==0){
        ans.push_back(n);
      }
      cout<<ans.size()-1<<endl;
      for(ll i=1;i<ans.size();i++){
        cout<<ans[i-1]+1<<" "<<ans[i]<<endl;
      }
    }
  }
}

D. Factorial Divisibility

题解:判断最后a1!+a2!+...an!是否包含x!,判断是否有x!,如果存在a[i]>=x那么肯定还有x!,如果不存在,那么我们就要判断它的第一位的,就比如要得到4!就需要4*3!,就是3!+3!+3!+3!,需要四个3!,然后3!同理,需要三个2!一次类推,所以就可以从1开始往上不断累加阶乘,最后看能不能到达x!

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll>  pll;
const ll N=5e5+5;
const ll inf=1e18;
const ll mod=9901;
ll a[N],sum[N];
signed main(){
  ios::sync_with_stdio(false);
  cin.tie(0);cout.tie(0);
  ll n,m;cin>>n>>m;
  for(ll i=1;i<=n;i++){
     cin>>a[i];
     sum[a[i]]++;//记录每一个数的个数
  }
  ll ans=0;
  bool flag=0;
  for(ll i=1;i<=m-1;i++){
    if(sum[i]%(i+1)){//如果这个i!可以往上累加变成(i+1)!
      flag=1;break;
    }
    sum[i+1]+=sum[i]/(i+1);
  }
  if(flag) cout<<"No"<<endl;
  else cout<<"Yes"<<endl;
}

标签:typedef,const,ll,Codeforces,long,cin,829,tie,Div
From: https://www.cnblogs.com/hhzp/p/16923213.html

相关文章

  • Codeforces Round #418 (Div. 2) D. An overnight dance in discotheque 题解
    圆由于没有相交,之间的关系要么毫无关系,要么就是包含,所以能形成树。直接包含的就是父节点。如果只有一组,不分前半夜后半夜的话,那么舒适度就是每棵树的根节点(深度为0)面积......
  • CodeForces - 311B Cats Transport
    题意:洛谷翻译超可爱的放一下qwq解:先设dp[i][j]为安排前i个人接前j只猫的最小等待时间。显然要给猫排个序。猫可以等人,但人不会等猫。于是算一下每只猫需要人在什么时......
  • Codeforces Round #621 (Div. 1 + Div. 2) D
    D.CowandFields对于每个点我们可以通过两次bfs求出他离1最近的距离和离n最近的距离对于连边就是让d1[i]+d2[j]+1去更新最短路我们要让d1[i]+d2[j]+1最大我们先直......
  • Codeforces Round #771 (Div. 2) E Colorful Operations
    ColorfulOperations珂朵莉树+树状数组||线段树单独维护点当前的值\(val\)和当前颜色的值\(tag\)这样就可以分开维护颜色和点的值,把复杂的操作\(2\)变成\(O(......
  • Codeforces Round #804 (Div. 2) C D
    C1700D2300所以我并没有做水题。考虑0的位置一定不动再考虑1的位置也不动考虑2的位置不妨设0的位置为L1的位置为R那么若2的位置在L~R之间那么2就可以随便放......
  • Public NOIP Round #3(Div. 1) 题解
    T2:先判\(1,n\)有连边的情况,也就是说明最短路一定是\(1\)直接走到\(n\)。特判掉\(k=1,n=2\)的情况,这是无解的。那么如果\(k\ge2\)就令\(1,n\)都为\(U\),其余随......
  • Codeforces Round #835 (Div. 4) A-G完全题解
    比赛链接A、点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){intT;cin>>T;while(T--){vector<int>G;for(inti=1;......
  • Codeforces Round #831 (Div. 1 + Div. 2)
    C核心思路:这个题目其实是一个规律题,它有一个很重要的前提,那就是在分配方案最优的情况下,要不然我们直接选几个差值最大的就ok,那他这句话,其实我们结合几个样例就知道,有一个......
  • Codeforces Round #790 (Div.4) A-H2题解
    原题链接:https://codeforces.com/contest/1676A.Lucky?题意:给定长度为6由数字组成的字符串问前三个数字的和是否等后三个数字的和。题解:直接相加比较即可。#include<......
  • Codeforces Round #835 (Div.4) A-G题解
    原题链接:https://codeforces.com/contest/1744A.MediumNumber题意:给定三个数,求中间那个数(倒数第二小or倒数第二大)。题解:直接用数组存,sort一下输出中间的数即可。#in......