(本部2定格)Codeforcesラウンド82

タイトル

あなたは、文字列s与えられています。各文字は、0または1のいずれかです。

あなたは連続したサブセグメントを形成するために、文字列内のすべての1つのをしたいです。例えば、文字列が0、1、00111又は01111100である場合、次いで、すべて1は、隣接サブセグメントを形成し、文字列が0101 100001または11111111111101である場合、この条件は満たされません。

あなたは、いくつかの(おそらくなし)文字列から0を消去することがあります。あなたは消去しなければならないことを0の最小数は何ですか?

入力
テストケースの数-最初の行は1つの整数T(1≤t≤100)を含みます。

次いで、Tラインは、各テストケースを表す従います。各行は、1つの文字列s(| S |1≤≤100)が含まれています。Sの各文字は、0または1です。

出力
i番目の整数はi番目のテストケース(あなたはSから消去する必要が0の数の最小値)への答えであるプリントT整数、。

例えば
入力
3
010011
0
1111000
出力
2
0
0


最初のテストケースでは、あなたは文字列010011(それは0111に変わります)から第3及び第4のシンボルを削除する必要があります。

効果の件名:

01文字列は、とても一緒にすべての1が連続していることを、番号0をなくすように頼みます

アイデア:

文字列の最初の位置を取得し、それが予見可能な統計に戻ってくる0

#include <iostream>
#include<string>
#include<stdio.h>
using namespace std;
 
int main()
{
    int m;
    cin>>m;
    getchar();
    while(m--)
    {
 
        string str;
        getline(cin,str);
        int d = str.size();
        int i=0;
        while(1)
        {
            if(str[i]=='0')
            i++;
            else break;
        }
        int sum=0;
        int conut=0;
        while(i<d)
        {
            if(str[i]=='1'){
                sum+=conut;
                conut=0;
                i++;
            }
            else if(str[i]=='0'){
                conut++;
                i++;
            }
 
        }
        cout<<sum<<endl;
    }
}

Bタイトル

国家プロジェクト

あなたの会社は、長さnの高速道路上で新しいアスファルトを敷設するために任命されました。あなたは毎日あなたが高速道路のいずれかの修理1ユニット(高速道路の1つの単位の上に新しいアスファルトを敷く)、または修理をスキップできることを知っています。

修復をスキップするための気候のために必要です。お住まいの地域の気候は定期的です:天気は良いですが、あなたは、これらの日の新しいアスファルトを敷く場合、それは高品質の舗装となった場合グラムの日があります。その後、次のb日間の天気が悪く、あなたは、これらの日の新しいアスファルトを敷く場合には、低品質の舗装になり、再びグラムの良い日、悪い日Bというように。

あなたは日が1,2、...、gは良いですが、あなたは他の言葉で、良いシーズンの開始時に修理を開始することを確認することができます。

あなたは本当にあなたが念の高速道路の少なくとも半分は、高品質の舗装を持っていることをしたい、高速道路の品質を気にしないでください。例えば、もしN = 5、次いで少なくとも高品質を有するべきである高速道路の3台。n = 4の場合は、次に少なくとも2単位は、高品質を有するべきです。

最小日数が全体の高速道路の修復を完了するために必要とされているとは何ですか?

入力
テストケースの数-最初の行は、単一の整数T(1≤T≤104)を含みます。

1行につき1つの - 次T線はテストケースを含みます。各ラインは、三の整数を含むN、G、Bの(1≤n、G、b≤109) - 高速道路の長さは、それぞれ良好と不良日数。

出力
プリントT整数-テストケースごとに1。各テストケースのために、それの少なくとも半分は、高品質を持っている必要がある場合は、全体の高速道路を修復するために必要な最小日数を印刷します。

例えば
inputCopy
3
5 1
8 10 10
1000000 1000000 1
outputCopy
5
8
4999.995億

質問の意味:

仕事の日に必要がn個あります。行の日BなどのA規則、天気の良い日gの連続した日、そして悪天候があります。天気はあなたが仕事を行うことができます良いのであれば、それは少なくともN / 2日のかなりの数の数を切り上げが必要です。あなたは休息することを選択したが、あなたのためにそこにあるn個の作業待ちの日、あなたは数日休むようにしたいものは何でも言うことであるが、少なくともn個の日仕事ですることができます。日の最小数は、作業を完了するために必要。

ソリューション:

晴天と悪天候との少なくとも期間について計算。所望のN%gを分析する作業がちょうど完了することができるかどうか0判定する

#include <iostream>
#include<stdio.h>
typedef long long ll;
using namespace std;

int t;
long long ans;
int main()
{
    long long n,g,b,tmp;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld%lld%lld",&n,&g,&b);
        tmp=n;
        n=(n+1)>>1;
        if(n%g==0) ans=(g+b)*(n/g)-b;
        else ans=(g+b)*(n/g)+n%g;
        printf("%lld\n",max(ans,tmp));
    }
    return 0;
}

C

パーフェクトキーボード

polycarpは自分のキーボードを組み立てるために望んでいます。複数行のレイアウトは、あまりにも彼のために複雑されている - 彼のキーボードは、すべての26の小文字のラテン文字はいくつかの順序で配置される一列のみで構成されます。

polycarpは、彼が登録されているすべてのウェブサイトで同じパスワードSを(それが悪いですが、彼は気にしません)を使用しています。彼は非常に簡単にこのパスワードを入力することができますキーボードを組み立てたいです。パスワードを入力しながら、そう、s内の隣接する文字の各ペアのために、彼らは、キーボード上で隣接する必要があり、彼の指を移動するように、彼はしていません。パスワードはabacaba、その後、レイアウトcabdefghi ...であれば、文字、cは、キーボード上で隣接しており、aとbは、キーボード上の隣接しているので、例えば、完璧です。(2つの文字sは隣接している)ので、例えば、パスワードをパスワードにすることはできません、Sには隣接する二つの等しい文字が存在しないことが保証されます。

あなたはそれが可能であれば、キーボードの完璧なレイアウトを選んでのpolycarpを助けることができますか?

入力
テストケースの数-最初の行は、T(1≤T≤1000)整数一方を含みます。

次いで、Tラインは、次の各含有する1つのストリングS(1≤| S |≤200)テストケースを表します。sが小文字のみラテン文字で構成されています。s内のどの2つの隣接する同じ文字がありません。

出力
各テストケースについては、次の手順を実行します。

完璧なキーボードを組み立てることは不可能である場合には、(大文字で、それはこの問題で重要)NOを印刷します。
そうでない場合は、(大文字でYES)に印刷し、次いで26個の小文字のラテン文字からなる文字列-完璧なレイアウト。各ラテン文字は正確に一度、この文字列に表示されます。複数回答がある場合は、それらのいずれかを印刷します。
例えば
inputCopy
5
アベバ
codedoca
ABCDA
zxzytyz
abcdefghijklmnopqrstuvwxyza
outputCopy
YES
bacdefghijklmnopqrstuvwxyz
YES
edocabfghijklmnpqrstuvwxyz
NO
YES
xzytabcdefghijklmnopqrsuvw
NO

题意 输入一行字符串,每个相邻的字符在键盘上也是相邻的,如果可以输出YES和键盘布局,不然输出NO

#include <bits/stdc++.h>
using namespace std;
char a[55];
bool vis[26];
void ls(){
    memset(vis,0,sizeof(vis));
    memset(a,0,sizeof(a));
    string s;cin>>s;
    int j=27;
    a[j]=s[0];
    vis[s[0]-'a']=1;
    for(int i=1;i<s.size();i++){
        if(vis[s[i]-'a']){
            if(a[j-1]==s[i])
                j--;
            else if(a[j+1]==s[i])
                j++;
            else{
                cout<<"NO"<<endl;
                return;
            }
        }
        else{
            if(!a[j-1]){
                j--;
            }
            else if(!a[j+1]){
                j++;
            }
            else{
                cout<<"NO"<<endl;
                return;
            }
            a[j]=s[i];
            vis[a[j]-'a']=1;
        }
    }
    cout<<"YES"<<endl;
    for(int i=0;i<26;i++){
        if(!vis[i]){
            cout<<char('a'+i);
        }
    }
    for(int i=0;i<55;i++){
        if(a[i]>='a'&&a[i]<='z'){
            cout<<a[i];
        }
    }
    cout<<endl;
}
int main() {
    int t;cin>>t;
    while(t--){
        ls();
    }
}

公開された24元の記事 ウォンの賞賛5 ビュー1692

おすすめ

転載: blog.csdn.net/weixin_44091157/article/details/104337232