codeforces1238-div2

2412 ワード

C
現在、hの高さでは、1~h毎の段差がoutの状態にあるか、inの状態にあるか、少なくともいくつかの段差の状態を変えることで、hの高さから0に至ることができる.下降の唯一の方法は、lever,h-1の状態を逆にして、落下の最大の高さを超えてはならない.
テーマに沿ってシミュレーションすればいいので、自分で書いたコードは挫折します.
D
A,Bからなる文字列のみで、1つの列がgood列当であり、各文字が1つの長さの最小2の列に属している場合にのみ.何個あるの?すべてのgood以外の列を計算し、全体のシナリオ数を減算すればいいです.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
const int inf = 0x3f3f3f3f;
const int maxn = 2000+10;
string s;
 
int main(){
    ios::sync_with_stdio(false);
    ll ans = 0;
    int len;
    cin>>len;
    cin>>s;
    int pre = 0;
    for(int i=0; i

E状圧dp
文字列を与え、与えられたスキームの文字列が0−>nの総距離から最も短いように線形に配列されたキーボードを与える必要がある.費用を繰り上げて計算する考えもある.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
const int inf = 0x3f3f3f3f;
const int maxn = (1<<20)+10;
int dp[maxn];
int n, m;
string s;
int dis[21][21];



int main(){
    ios::sync_with_stdio(false);
    cin>>n>>m;
    cin>>s;
    cls(dis, 0);
    for(int i=1; i1, 1->0
                if((i>>j&1)^(i>>k&1)) tot += dis[j][k];
            }
        }
        for(int j=0; j>j&1)dp[i] = min(dp[i], dp[i^(1<