2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018) - 4.28

?

賽后補了幾道

賽中我就寫了兩個...

A - Altruistic AmphibiansGym - 101933A

看了眼榜沒幾個人做。就沒看。

最后發現就是一個DP(但是我覺得復雜度有點迷)

題意:$n$只青蛙有參數$l,w,h$分別表示彈跳力,體重,身高,在一口深為$d$的井里

一只青蛙不能承受比他重的重量,問最多有多少只能出去(達到高度嚴格大于d)

重的肯定比輕的晚出去,那么輕的肯定由重的來轉移,所以先排序,從重到輕的排

$dp_{i}$表示體重為i最高能疊多高 瞎jb轉移一下就好了

#include <cstdio>
#include <algorithm>
#include <cstring>
#define ll long long
using namespace std;inline int read() {int x = 0, f = 1; char ch = getchar();while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); }while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }return x * f;
}const int N = 1e5 + 10;
const int M = 1e8 + 10;
struct P {int l, w, h;bool operator < (const P &rhs) const {return w > rhs.w;}
} p[N];
int dp[M], n, d, ans;int main() {n = read(), d = read();for (int i = 1; i <= n; i++) p[i].l = read(), p[i].w = read(), p[i].h = read();ans = 0;sort(p + 1, p + n + 1);for (int i = 1; i <= n; i++) {if (dp[p[i].w] + p[i].l > d) ans++;for (int j = p[i].w + 1; j < min(p[i].w * 2, M); j++) {dp[j - p[i].w] = max(dp[j-p[i].w], dp[j] + p[i].h);} }printf("%d\n", ans);return 0;
}
View Code

?

B - Baby Bites Gym - 101933B

#include <cstdio>
#include <cstring>
using namespace std;const int N = 1010;
int a[N];
int n;
char s[N];int main() {scanf("%d", &n);bool ans = true;for (int i = 1; i <= n; i++) {scanf("%s", s);int len = strlen(s);if (s[0] == 'm') a[i] = i;else {int x = 0;for (int j = 0; j < len; j++) x = x * 10 + s[j] - '0';a[i] = x;if (x != i) {ans = false;}}}puts(ans?"makes sense":"something is fishy");return 0;
}
View Code

?

C - Code Cleanups Gym - 101933C

閱讀理解題啊。自己瞎糊了一發。讀不下去。就丟給隊友了。

不管了。

?

E - Explosion Exploit Gym - 101933E

題意:分別有$n,m$個士兵,每個士兵有一個血量,有d個攻擊,等概率分給每一個士兵。

問敵方士兵全死(m)的概率是多少

隊友過的。學習了新知識,概率記憶化+狀壓

用一個long long來表示狀態

unordered_map來存狀態對應的概率 再回溯搜索即可 tql

#include <bits/stdc++.h>
#define ll long long
using namespace std;inline int read() {int x = 0, f = 1; char ch = getchar();while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); }while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }return x * f;
}unordered_map<ll, double> mp;
int a[2][10];ll getsta() {ll ret = 0;for (int i = 1; i <= 6; i++) ret = ret * 10 + 1LL * a[1][i];for (int i = 1; i <= 6; i++) ret = ret * 10 + 1LL * a[0][i];return ret;
}double dfs(ll sta, int d) {if (mp.count(sta)) return mp[sta];if (sta < 1000000) return 1;if (d == 0) return 0;int sum = 0;for (int i = 0; i < 2; i++) for (int j = 1; j <= 6; j++)sum += a[i][j];double ret = 0;for (int i = 0; i < 2; i++) {for (int j = 1; j <= 6; j++) {if (!a[i][j]) continue;a[i][j]--;a[i][j-1]++;ll s = getsta();double res = dfs(s, d - 1);a[i][j]++;a[i][j-1]--;mp[s] = res;ret += a[i][j] * 1.0 / sum * res;}}return ret;
}int main() {int n = read(), m = read(), d = read();for (int i = 1, x; i <= n; i++) x = read(), a[0][x]++;for (int i = 1, x; i <= m; i++) x = read(), a[1][x]++;double res = dfs(getsta(), d);printf("%.8f\n", res);return 0;
}
View Code

?

H - House Lawn Gym - 101933H

題意:有m臺機器,每臺機器有名字,價格p,每分鐘能工作多少c,充一次電能工作多久t,充電需要多久r

有l面積的地待作,問平均每周能工作一次的機器中價格最小的那個,相同的按輸入順序輸出

隊友把10080說成10800能忍?

平均一下直接就把充電需要的時間給平均進來 得到每分鐘工作多少的p'

再用$l/p'$和10080比就得出答案了

可能難就難在輸入部分吧。

#include <bits/stdc++.h>
using namespace std;struct Node
{string name;int p , c, t, r;double cc;
}b[105];
bool vis[105];int main()
{ios::sync_with_stdio(false);int m;int l;cin >> l >> m;string a;getline(cin,a);for(int i=1;i<=m;i++){getline(cin,a);int sta = 0;b[i].name = "";b[i].p = b[i].c = b[i].r = b[i].t = 0;for(int j=0;j<a.length();j++){if(a[j]==','){sta++;continue;}if(sta == 0){b[i].name+=a[j];}if(sta == 1){b[i].p*=10;b[i].p+=a[j]-'0';    }if(sta == 2){b[i].c*=10;b[i].c+=a[j]-'0';    }if(sta == 3){b[i].t*=10;b[i].t+=a[j]-'0';    }if(sta == 4){b[i].r*=10;b[i].r+=a[j]-'0';    }}}int ans = 1e9;for (int i = 1; i <= m; i++) {b[i].cc = (b[i].c * b[i].t) * 1.0 / (b[i].t + b[i].r);if (l / b[i].cc <= 10080) {ans = min(ans, b[i].p);vis[i] = 1;}}if (ans == (int)1e9) puts("no such mower");else {for (int i = 1; i <= m; i++) {if (vis[i] && ans == b[i].p) {cout << b[i].name << '\n';}}    }return 0;
}
View Code

?

J - Jumbled String Gym - 101933J

題意: 0 1串 給你00出現的次數a 01出現的次數b 10出現的次數c 11出現的次數d

問能否構造出01串

WA了好幾發 一度崩潰

首先由a d能推出0和1的個數 必定是一個C(n, 2) 把a和d乘二開根 和加一相乘是否等于2a和2d來判斷

第二部分

用兩個數組表示

$a_{i}$表示第i個0后面出現了幾個1

$b_{i}$表示第i個0前面出現了幾個1

必定有$a_{i} + b_{i} = cnt_{1}$??????? $a_{i}\geq a_{i+1}$??????? $b_{i}\leq b_{i+1}$

$\sum ^{cnt_{0}}_{i=1}a_{i} = b$??????????? $\sum ^{cnt_{0}}_{i=1}b_{i} = c$

所以$b + c = cnt_{0}\times cnt_{1}$才有解

隨便舉幾個例子發現貪心的構造均能滿足答案

如樣例 3 4 2 1

得到$cnt_{0} = 3$?? $cnt_{1} = 2$

$a_{i}$ : 2 2 0

$b_{i}$ : 0 0 2

得到 00110 也符合

所以直接構造就完了

不過要注意

0 0 0 0直接輸出0或1就可以了

a為0或d為0的情況 如果$b + c = 0$ 那么對應的0的個數或1的個數為0 否則才為1

然后瞎jb輸出就完了

#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;inline int read() {int x = 0, f = 1; char ch = getchar();while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar();}while (ch >= '0' && ch <= '9') { x = x * 10 + ch - 48; ch = getchar(); }return x * f;
}int main() {int a = read(), b = read(), c = read(), d = read();int sqra = sqrt(2 * a), sqrd = sqrt(2 * d);bool ans = true;if ((a + b + c + d) == 0) {puts("0");return 0;}if (sqra * (sqra + 1) != a * 2 || sqrd * (sqrd + 1) != d * 2) {ans = false;} else {int cnt0 = sqra, cnt1 = sqrd;cnt0++, cnt1++;if (cnt1 == 1 && (b + c) == 0) cnt1 = 0;if (cnt0 == 1 && (b + c) == 0) cnt0 = 0;//printf("%d %d\n", cnt0, cnt1);if (b + c != cnt0 * cnt1) {ans = false;} else {if (cnt1 == 0) {while (cnt0--) putchar('0');return 0;}if (cnt0 == 0) {while (cnt1--) putchar('1');return 0;}int k = b / cnt1;for (int i = cnt0; i > cnt0 - k; i--) putchar('0');cnt0 -= k;k = b - k * cnt1;if (k) {k = cnt1 - k;for (int i = cnt1; i > cnt1 - k; i--) putchar('1');cnt1 -= k;putchar('0'), cnt0--;}    while (cnt1--) putchar('1');while (cnt0--) putchar('0');return 0;}}if (!ans) puts("impossible");return 0; 
}
View Code

?

K - King's Colors Gym - 101933K

題意:一棵樹n個節點,k種顏色,問有多少種方案用上k個顏色并且相鄰兩節點顏色不同

我以為要用樹形dp做,賽后看題解才明白是個容斥。

用k種的情況是$k\times \left( k-1\right) ^{n-1}$然后其中包含了只用了k-1種 只用了k-2種...的情況

容斥一下就好了

#include <bits/stdc++.h>
#define ll long long
using namespace std;inline ll read() {ll x = 0, f = 1; char ch = getchar();while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); }while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }return x * f;
}const ll mod = 1e9 + 7;
const int N = 2550;
ll C[N][N];
void init() {for (int i = 0; i < N; i++) C[i][0] = 1, C[i][1] = i;for (int i = 1; i < N; i++)for (int j = 2; j <= i; j++)C[i][j] = (C[i-1][j-1] + C[i-1][j]) % mod;
}ll qm(ll a, ll b) {ll res = 1;while (b) {if (b & 1) res = res * a % mod;a = a * a % mod;b >>= 1;}return res;
}int main() {init();ll n = read(), k = read();for (int i = 1; i < n; i++) read();ll ans = 0, flag = 1;for (int i = k; i >= 1; i--) {ll temp = flag * i * qm((ll)i - 1, n - 1) % mod * C[k][i];ans = (ans + temp + mod) % mod;flag = -flag;}        printf("%lld\n", ans);return 0;
}
View Code

?

轉載于:https://www.cnblogs.com/Mrzdtz220/p/10788014.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448904.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448904.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448904.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

消息隊列技術介紹 : ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ

一、 消息隊列概述 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 消息隊列中間件是分布式系統中重要的組件&#xff0c;主要解決應用耦合、異步消息、流量削鋒等問題。實現高性能、高可…

程序員的惡性循環 !

窮人的惡性循環&#xff1a; 窮 -> 需要努力工作 -> 沒有時間去交際 -> 人脈越來越狹窄 -> 工作越來越難做 -> 越需要努力去工作 -> 越沒有時間去發展人脈 -> 越窮 富人的良性循環&#xff1a; 有錢 -> 工作很輕松 -> 很多時間都在交際上 -> 人…

刷臉考勤,重新定位校園管理

近幾年&#xff0c;人臉識別技術在安防領域得到了廣泛應用&#xff0c;隨著技術的不斷發展&#xff0c;它離我們的日常生活越來越近&#xff0c;手機、商場、公園、校園等都可以看到它的身影。刷臉考勤&#xff0c;重新定義校園管理。人臉識別&#xff0c;也叫面部識別&#xf…

python爬蟲學習之頁面登陸

爬蟲學習的一點心得 登陸主要有3種方法&#xff1a;使用selenium&#xff0c;cookies&#xff0c;模擬表單登陸 個人對于一般情況使用cookies登陸 可以實現一次手動&#xff0c;長期自動&#xff0c;可以繞過登陸&#xff08;登陸的相關信息密碼&#xff0c;賬號等會存于cookie…

消息隊列 應用場景 解析

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 另外騰訊云-云社區還有一文不允許轉載&#xff0c;但內容挺好的&#xff1a;https://cloud.tencent.com/developer/article/1006035 分布…

求職面試的時候如何談薪酬待遇

在社會大學里混了那么多年&#xff0c;我最慘痛的經歷就是&#xff0c;在應聘一家企業的時候&#xff0c;總是羞于談薪酬待遇。大概這是很多職場新人都會遇到過的尷尬吧——覺得自己經驗不夠&#xff0c;或者想應聘的企業比較好&#xff0c;就覺得對方提多少就是多少吧&#xf…

利用memcached實現CAS單點登錄集群部署

前言&#xff1a;利用memcached實現CAS單點登錄集群部署 負載均衡&#xff1a;將接口請求的有狀態性變成無狀態性。是我們在實現負載均衡時必要要解決的問題。以應用接口的session狀態為例&#xff0c;一般解決方法都是將session數據和應用進行剝離&#xff0c;session數據統一…

注冊

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>注冊</title> {# 導入jQuery基礎類庫&#xff0c;才可以使用 $ #} <script src"../static/js/jquery-1.12.4.min.js"&…

Linux中10個有用的命令行補齊命令

本文由 極客范 - 踏雁尋花 翻譯自 Balakrishnan Mariyappan。歡迎加入極客翻譯小組&#xff0c;同我們一道翻譯與分享。轉載請參見文章末尾處的要求。在Linux系統中&#xff0c;輸入一個命令&#xff0c;再按兩次TAB鍵&#xff0c;就會列出所有以輸入字符開頭的可用命令。這并…

分布式開放消息系統 ( RocketMQ ) 的原理與實踐

分布式消息系統作為實現分布式系統可擴展、可伸縮性的關鍵組件&#xff0c;需要具有高吞吐量、高可用等特點。而談到消息系統的設計&#xff0c;就回避不了兩個問題&#xff1a; 消息的順序問題消息的重復問題RocketMQ作為阿里開源的一款高性能、高吞吐量的消息中間件&#xff…

數據結構02-鏈表

說明&#xff1a;由于該數據結構是由java并且是原生實現&#xff0c;所以與C有一些出入&#xff0c;不過原理是相同的 1.鏈表的定義 為了表示線性表元素a與a1的邏輯關系&#xff0c;存儲數據時&#xff0c;除了存儲元素本身的信息之外&#xff0c;還存儲了直接后繼元素的位置信…

第四章 面向對象

第四章 面向對象 1. 基本格式 定義&#xff1a;當函數(業務功能)比較多&#xff0c;可以使用面向對象來進行歸類&#xff0c;如果有一個凡事使用的公共值&#xff0c;也可以放到對象中 #格式&關鍵字 class 類名:def __inti__(self,x)self.x xdef 方法名(self,name):print(…

洛谷P2347 砝碼稱重 某一年noip提高組原題

可以轉化為01背包求方案數的問題&#xff0c;dp數組f[][]表示第幾個砝碼能稱出的重量,可壓縮至一維 轉移方程為f(i,j)f(i-1,j-w[i]) 當前我們可以稱出的重量必定是由之前的砝碼重量轉移過來的 #include<bits/stdc.h> using namespace std; const int N550; const int max…

解決:-bash: unzip: command not found (Linux 中 unZip/Zip 的安裝及使用)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux系統沒有自帶的壓縮解壓工具&#xff1b;需要我們自己安裝&#xff1b; 當用到zip或者unzip如果沒有安裝就會出現 unzip: Command…

云計算時代IT專業人員需具備的10項技能

摘要&#xff1a;IT專業人員需要不斷的學習&#xff0c;才能確保自己的工作能力跟上時代的步伐。云時代IT專業人員不僅需要具備一定的專業技能&#xff0c;比如快速運用自身知識快速在互聯網上構建應用程序&#xff0c;還必須具備商業、金融、業務需求分析等等。 【編者按】談…

java自定義注解學習筆記

注解學習筆記之自定義注解 Target&#xff08;{1,2,3,4,5,6,7}&#xff09; 1.ElementType.CONSTRUCTOR:用于描述構造器2.ElementType.FIELD:用于描述域3.ElementType.LOCAL_VARIABLE:用于描述局部變量4.ElementType.METHOD:用于描述方法5.ElementType.PACKAGE:用于描述包6.Ele…

[xsy3132]數表

題意&#xff1a;一個$n\times m$的數表&#xff0c;數值$\in[0,4)$&#xff0c;你可以任意次選擇一行或一列$1,\text{mod }4$&#xff0c;要最小化所有數的和 因為$n\leq10$&#xff0c;所以數表可以看成$m$個$n$位$4$進制數$a_{1\cdots m}$&#xff0c;以下使用不進位加法 定…

linux 下載、安裝 maven

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 創建maven的文件夾并下載maven的tar包到此文件夾中 //進入一個目錄 cd /usr/local//創建一個文件夾 mkdir maven//下載maven的tar包…

ELK4之進階學習

1.精確查找和模糊查找(term和match的區別) match經過分析(analyer)的, term是不經過分詞,直接去倒排索引中查找精確的值. 2.建議器的簡介(最左前綴或者自帶的做) (1)直接用現成的 (2)不只是糾錯,還有建議等等. (3)優點:用戶體驗,服務器減少請求(減少壓力,太耗電了,熱量太大) (4…

女人必知 教你認清6種隱性壞男人

周圍不乏有女朋友喜歡歷數往事、追憶曾擦肩而過的男人&#xff0c;有的說如果不是自己太苛求提早要見他家人引起反感&#xff0c;早就和心愛的人儷影雙雙甜蜜快樂了&#xff0c;還有的說暗戀的男生那一夜向他表露情感、她萬分感動、可男生最后提出上床她拒絕了、因而錯失了一段…