洛谷-P6686 混凝土數學

来源:https://www.cnblogs.com/fy4815/archive/2020/07/26/13381402.html
-Advertisement-
Play Games

題目描述:這裡 思路: 一、部分分演算法 對於的數據,用暴力解決即可,時間複雜度 對於另外的數據(所有木棍長度相等),考慮用組合數學,答案為 二、正解 我們考慮對整個序列進行桶排序。 我們設每個數出現的次數為。 對於所有≥的數,加上比它小的所有數出現的次數,並加上這個數至這個數中所有數出現的個數。 特 ...


題目描述:這裡

思路:

一、部分分演算法

  • 對於的數據,用暴力解決即可,時間複雜度
  • 對於另外的數據(所有木棍長度相等),考慮用組合數學,答案為

 二、正解

我們考慮對整個序列進行桶排序

我們設每個數出現的次數為

  • 對於所有的數,加上比它小的所有數出現的次數,並加上這個數至這個數中所有數出現的個數。
  • 特別的,對於所有的數,需要再次加上

但是,我們會發現這依然過不了(TLE了一個點)。

 

我們再次仔細觀察正解的統計方式第一條,發現這可以用首碼和優化。

於是,這道題就做完了。

 

下麵附上代碼:

#include <bits/stdc++.h>
using namespace std;

template < typename T > void read(T &x)
{
    int f = 1;x = 0;char c = getchar();
    for (;!isdigit(c);c = getchar()) if (c == '-') f = -f;
    for (; isdigit(c);c = getchar()) x = x * 10 + c - '0';
    x *= f;
}

const long long mod = 998244353;
int a[200005];
long long bin[200005];
long long sum[200005];

int main()
{
    //freopen(".in", "r", stdin);
    //freopen(".out", "w", stdout);
    int n, binmax = INT_MIN;
    long long ans = 0;
    read(n);
    for(int i = 1;i <= n;i++)
    {
        read(a[i]);
        bin[a[i]]++;
        binmax = max(binmax, a[i]);
    }
    int t = a[1];
    int flag = 1;    
    for(int i = 2;i <= n;i++)
        if(a[i] != t)
        {
            flag = 0;
            break;
        }
    if(flag)
    {
        long long ans = 1;
        for(int i = n;i > n - 3;i--)
        {
            ans *= i;
        }
        cout << (ans / 6) % mod << endl;
        return 0;
    }
    if(n <= 200)
    {
        for(int i = 1;i <= n;i++)
            for(int j = i + 1;j <= n;j++)
                for(int k = j + 1;k <= n;k++)
                    if((a[i] == a[j] || a[i] == a[k] || a[j] == a[k]) && (a[i] + a[j] > a[k]) && a[i] + a[k] > a[j] && a[j] + a[k] > a[i])
                        ans++;
        cout << ans % mod << endl;
        return 0;
    }
    sum[0] = 0;
    for(int i = 1;i <= binmax;i++)
        sum[i] = bin[i] + sum[i - 1];
    long long front = 0;
    for(int i = 1;i <= binmax;++i)
        if(bin[i])
        {
            if(bin[i] >= 3)
            {
                long long ansj = 1;
                for(int j = bin[i];j > bin[i] - 3;--j)
                    ansj *= j;
                ans += ansj / 6;
                ans %= mod;
            }
            if(bin[i] >= 2)
            {
                long long tx = bin[i] * (bin[i] - 1) / 2;
                ans += front * tx;
                ans %= mod;
                long long up = min(i * 2, binmax + 1) - 1;
                long long ty = sum[up] - sum[i];
                ans += ty * tx;
                ans %= mod;
            }
            front += bin[i];
        }
    cout << ans << endl;
    return 0;
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • IO讀寫基礎 應用層在進行read,write系統調用時,不是物理級別的讀寫,而是緩存的複製,進程緩衝區同內核緩衝區的緩存複製,底層數據交換是有由操作系統內核完成,控制內核緩衝與硬體(物理設備)之間數據交換.linux系統在系統內核只有一個內核緩衝區,用戶進程都有獨立的緩衝區,是進程緩衝區。外部設備 ...
  • 內置異常和Throwable核心方法 Java內置異常 可查異常(必須要在方法裡面捕獲或者拋出) ClassNoFoundException 應⽤程式試圖載入類,找不到對應的類 IllegalAccessException 拒絕訪問⼀個類的時候 NoSuchFieldExcetion 請求的變數不存 ...
  • VSCode配置Rust開發環境 在商店中輸入rls,選擇rust,點擊Quick start中的下載鏈接。這個Rust插件你也要記得下。 跳轉後來到下載界面,點擊下載。 運行下載好的exe文件,命令行輸入1按下回車即可。 安裝完畢後在命令行輸入rustc --version,如果能輸出版本號則表示 ...
  • 一、Tomcat的安裝及簡單使用 在網上找到你需要安裝的Tomcat版本,解壓到你需要安裝的目錄就可以了 目錄介紹: bin 專門用來存放 Tomcat 伺服器的可執行程式 conf 專門用來存放 Tocmat 伺服器的配置文件 lib 專門用來存放 Tomcat 伺服器的 jar 包 logs 專 ...
  • Java是啥 新手程式員通常會走入一個誤區,就是認為學習了一門語言,就可以稱為是某某語言工程師了。但事實上真的是這樣嗎?其實並非如此。 今天我們就來聊一聊,Java 開發工程師到底開發的是什麼東西。準確點來說,Java後端到底在做什麼? 基礎 大家都知道 Java 是一門後端語言,後端指的就是服務端 ...
  • 最近有很多小伙伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。原本我以為之前的幾篇文章已經可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java後端的全局上進行思考和總結的,忽略了很多小白們的感受,而很多朋友都需要更加基礎,更加詳細的學習路線。 所以,今天我們重 ...
  • 秋招總結 寫在最前 我寫過很多篇秋招總結,這篇文章應該是最後一篇總結,當然也是最完整,最詳細的一篇總結。秋招是我人生中一段寶貴的經歷,不僅是我研究生生涯交出的一份答卷,也是未來職業生涯的開端。僅以此文,獻給自己,以及各位在求職路上的,或者是已經經歷過校招的朋友們。不忘初心,方得始終。 前言 在下本是 ...
  • 一 JDBC簡介 Java DataBase Connectivity Java語言連接資料庫 官方(Sun公司)定義的一套操作所有關係型資料庫的規則(介面) 各個資料庫廠商去實現這套介面 提供資料庫驅動JAR包 可以使用這套介面(JDBC)編程 真正執行的代碼是驅動JAR包中的實現類 二 JDBC ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...