そーすにっき

なんかいろいろのせておくばしょ

CODE FESTIVAL 2017 qual C

CODE FESTIVAL 2017 qual C - CODE FESTIVAL 2017 qual C | AtCoder

306位 国内107位 3完

qual Cしか出られなかった

A:文字列(5文字以下)が"AC"を含むか

lengthをlentghと誤タイプしCE

B:整数列の各項を±1するかそのままにすることで得られる数列の集合のうち全項の積が偶数になるものはいくつか

偶数と奇数を分けながらやるだけだと思いつくと早かった

C:英小字列に任意個の'x'を挿入し回文にできるか判定して、出来れば最小個数を出力

O(length)があるとすぐに気づいた

前と後ろから見る線形時間解法は自分の得意分野(Deque大好きなのもその辺が理由)なので早解きに成功

コードも短く済んだのでうれしい限り

反省:

BitDPが遠い…競技時間中1回もBitDPにたどり着けなかったので精進不足

#include <iostream>
#include <cstdio>
#include <utility>
#include <algorithm>
#include <string>
#include <sstream>
#include <vector>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <queue>
#include <random>
 
#define i64 long long
#define ui64 unsigned long long
#define REP(i,n) for(int (i)=0;(i)<(n);i++)
#define REP2(i,k,n) for(int (i)=(k);(i)<(n);i++)
#define MDIST(a,b) abs(a-b)
#define DIST(a,b) sqrt((a)*(a)+(b)*(b))
#define ATCODER 1000000007
using namespace std;
 
////////////////////////
 
//a
int main(){
  string s;
  cin >> s;
  for(int i=0;i<s.length()-1;i++){
    if(s[i]=='A'&&s[i+1]=='C'){
      cout << "Yes" << endl;
      return 0;
    }
  }
  cout << "No" << endl;
}
 
//b
int main(){
  int n;
  cin >> n;
  int t;
  i64 o=1,e=1;
  i64 r=1;
  for(int i=0;i<n;i++){
    cin >> t;
    if(t%2);
    else e*=2;
    r*=3;
  }
  cout << r-e << endl;
}
 
//c
int main(){
  string s;
  cin >> s;
  int r=0;
  for(int i=0,j=s.length()-1;i<j;){
    if(s[i]==s[j]){i++;j--;}
    else if(s[i]!='x'&&s[j]!='x'){
      cout << -1 << endl;
      return 0;
    }else{
      if(s[i]=='x'){i++;r++;}
      else{j--;r++;}
    }
  }
  cout << r << endl;
}