ホームページ ウェブフロントエンド htmlチュートリアル Codeforces ラウンド #267 (ディビジョン 2) E アレックスと複雑なタスク_html/css_WEB-ITnose

Codeforces ラウンド #267 (ディビジョン 2) E アレックスと複雑なタスク_html/css_WEB-ITnose

Jun 24, 2016 am 11:57 AM
round task

とても良い思考の質問、貪欲です

質問の主な考え方: n 個の数値が与えられた場合、この部分列の 4k-4k+3 項目が a,b,a, となるような最長の部分列を見つける必要があります。 b 形式 (0 から番号が付けられます)。

欲張りですが、思考力はまだまだです…

アイデアはいくつか思いつくのですが、コードが書けません…

参考 http://www.cnblogs.com/ shiina- mahiro/p/3981944.html

考え方:

1. 4 つの数値が等しい状況に対処するには、4 つの数値を直接出力するだけです。出現回数を記録するためにマップを使用するため、離散化 (オンラインマップをクエリするとき、logn はソートする必要があり、大きな数値を 10 進数にマッピングする必要がある場合、nlogn は離散化する必要がないと言われています。)

2. ABAB の状況

まず、何かを理解する必要があります。ABAB を形成するには、2 つの数値が隣接している必要があります。最初は、O(n^2) アルゴリズムが必要になるとは考えていませんでした。書いてください。

次に、2 つの隣接する対数解析のアイデア (a、b) (c、d) を与えます。

d>b 明らかに、d は現在読み取られている番号なので、a、b、c は

前に読み取られた番号です

すると、c と a、b の関係に従って、次の状況が分割されます:

(1 )c

(2)b>c>=a は ABAB を形成します、それを記録してください

(3)c>=b (a,b) (c, d) なので、最初にすべて保存します。次の番号が処理のために読み込まれるのを待っています


//#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <iostream>#include <map>#include <vector>using namespace std;#define ls(rt) rt*2#define rs(rt) rt*2+1#define ll long long#define ull unsigned long long#define rep(i,s,e) for(int i=s;i<e;i++)#define repe(i,s,e) for(int i=s;i<=e;i++)#define CL(a,b) memset(a,b,sizeof(a))#define IN(s) freopen(s,"r",stdin)#define OUT(s) freopen(s,"w",stdout)const ll ll_INF = ((ull)(-1))>>1;const double EPS = 1e-8;const int INF = 100000000;const int MAXN = 500000+100;struct Node{    int l,r;    int x;}nodes[MAXN];map<int, int>pos,cnt;vector<int>b;int num[MAXN],n,top;void read(){    b.clear();    top=0;    for(int i=1;i<=n;i++)        scanf("%d",&num[i]);}void push(int x, int y){    b.push_back(x);    b.push_back(y);    b.push_back(x);    b.push_back(y);    cnt.clear();    pos.clear();    top=0;}int main(){    //IN("E.txt");    while(~scanf("%d",&n))    {        read();        for(int i=1;i<=n;i++)        {            int x=num[i];            if(cnt[x] != 0) cnt[x]++;            else cnt[x] = 1;            if(cnt[x] == 4){push(x,x);continue;}            if(pos[x] == 0){pos[x] = i; continue;}            //system("pause");            /*下面两行牛逼代码*/            int l=pos[x],r=i;            pos[x]=i;            while(top>0)            {                int bl=nodes[top-1].l, br=nodes[top-1].r, bx=nodes[top-1].x;                if(l>bl && l < br){push(bx,x);break;}                else if(l<=bl)top--;                else                {                        nodes[top].l=l;                        nodes[top].r=r;                        nodes[top].x=x;                        top++;                        break;///                }            }            if(top == 0){nodes[0].l=l;nodes[0].r=r;nodes[0].x=x;top++;}        }        printf("%d\n",b.size());        if(b.size())printf("%d",b[0]);        for(int i=1;i<b.size();i++)            printf(" %d",b[i]);        putchar('\n');    }    return 0;}
ログイン後にコピー




このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 シャットダウン プロンプト タスク ホスト ウィンドウ タスク ホストがシャットダウン タスク ソリューションを実行しています Windows 11 シャットダウン プロンプト タスク ホスト ウィンドウ タスク ホストがシャットダウン タスク ソリューションを実行しています Feb 12, 2024 pm 12:40 PM

最近、多くの Win11 ユーザーが、シャットダウン時に、taskhostwindow タスク ホストがシャットダウン タスクを実行しているというメッセージが表示されると報告しています。ユーザーは、ローカル レジストリ エディターの下のデスクトップ フォルダーに入り、右側のウィンドウで AutoEndTasks を選択して設定できます。このサイトは、シャットダウン時にこの問題の解決策をユーザーに丁寧に紹介します。 Windows 11 のシャットダウンでは、taskhostwindow タスク ホストがシャットダウン タスクを実行していることを示すメッセージが表示されます。 解決策 1. 次の図に示すように、win キー + r キーの組み合わせを使用し、「regedit」と入力して Enter キーを押します。 2. [HKEY]を検索します

PHPでラウンドは何を意味しますか PHPでラウンドは何を意味しますか Mar 10, 2023 am 10:04 AM

PHP では、round は「丸め」を意味し、浮動小数点数を整数に変換する組み込み関数です。この関数は浮動小数点数を丸め、float 型の整数値を返すことができます。構文は「round(number, precision,mode)」です。 );"。

PHPのround()関数を使って割り算と丸めを行う方法 PHPのround()関数を使って割り算と丸めを行う方法 Mar 21, 2023 pm 04:32 PM

Round() 関数は、PHP 数値書式設定ライブラリの非常に便利な関数で、浮動小数点数を指定された小数点以下の桁数に丸めることができます。ただし、PHP の除算演算では小数が無限になったり、精度が低下したりする可能性があるため、除数の丸めも必要です。次に、PHPのround()関数を使って除算と丸めを行う方法を詳しく説明します。

MySQL で ROUND 関数を使用して小数点以下の桁をインターセプトする方法 MySQL で ROUND 関数を使用して小数点以下の桁をインターセプトする方法 Jul 13, 2023 pm 09:21 PM

MySQL で ROUND 関数を使用して小数点以下の桁数をインターセプトする方法 MySQL では、ROUND 関数を使用して小数点以下の桁数をインターセプトできます。 ROUND 関数は、数値を指定された小数点以下の桁数に丸めます。以下では、ROUND 関数の使用方法を詳しく紹介し、コード例を示します。構文: ROUND(X,D)X は四捨五入される数値を表し、D は保持される小数点以下の桁数を表します。 ROUND 関数を使用して小数点以下の桁数を取得する例: produc という名前のテーブルがあるとします。

C#Taskの詳しい説明 C#Taskの詳しい説明 Mar 14, 2024 am 09:54 AM

Task は、C# で非同期操作を表すために使用されるオブジェクトで、System.Threading.Tasks 名前空間にあります。 Task は、同時非同期操作を処理するための高レベル API を提供し、.NET アプリケーションでの非同期コードの作成を容易にします。

C# タスクの使用 C# タスクの使用 Feb 19, 2024 pm 12:16 PM

C#Task の使用法には、特定のコード例の概要が必要です: Task は C# で非常に一般的に使用される型で、非同期に実行して結果を返す実行可能な操作を表します。タスクは、非同期操作、並列処理の処理、およびアプリケーションのパフォーマンスの向上において重要な役割を果たします。この記事では、Task の基本的な使用法を紹介し、具体的なコード例をいくつか示します。タスクの作成と使用 C# では、Task クラスを使用して非同期タスクを作成して使用できます。 Taの作成と使用方法は次のとおりです。

C# のタスクをより深く理解する C# のタスクをより深く理解する Feb 18, 2024 pm 12:03 PM

C#Task の詳細な説明、特定のコード例が必要です はじめに: C# マルチスレッド プログラミングでは、Task は非同期操作を実装するために一般的に使用されるプログラミング モデルです。 Task は、同時タスクを処理する簡単な方法を提供し、複数のスレッドで非同期操作を並行して実行でき、例外と戻り値を簡単に処理できます。この記事では、C#Task の使用方法を詳しく紹介し、いくつかの具体的なコード例を示します。 1. タスクの作成と実行 Task オブジェクトの作成方法 C# で Task オブジェクトを作成するには、さまざまな方法があります。

浮動小数点数を四捨五入する 1 行の C 関数を作成します。 浮動小数点数を四捨五入する 1 行の C 関数を作成します。 Aug 26, 2023 pm 01:53 PM

ここでは、浮動小数点数を丸めることができる 1 行の C 関数を記述する方法を見ていきます。この問題を解決するには、次の手順に従う必要があります。数値を取得する 数値が正の場合は 0.5 を加算し、そうでない場合は 0.5 を減算します。 型変換を使用して浮動小数点値を整数に変換します。 例 #include<stdio.h> intmy_round(floatnumber){ return(int)(number<0?number - 0.5:数値+0.5);}intmain(){&nbsp

See all articles