1. 程式人生 > >HGOI-國慶七連測-day6

HGOI-國慶七連測-day6

題解

今天是沙雕題集合…第一題就要打150+但毫無營養,第三題一題更比四題強…蒟蒻實在是沒有辦法orz 有生之年不要讓我碰到那個出題人 德州撲克真的沙雕

在這裡插入圖片描述

第一題——德克薩斯撲克(texas)

在這裡插入圖片描述

在這裡插入圖片描述

  • 題目太長了orz,懶得概括…
  • 就是一個暴力模擬+注意細節+要耐心
  • 這個是我這輩子打的最刺激的第一題。
#include <bits/stdc++.h>
using namespace std;
inline void fff(){
	freopen("texas.in","r",stdin);
	freopen("texas.out","w",stdout);
}
int a[
20],ans[6],pp; char ch[10]; void check4(){ for(int i=14;i>1;i--){ if(a[i]==4){ for(int j=1;j<=4;j++) ans[++pp]=i; a[i]=0; } } if(pp==0) return; for(int i=14;i>1;i--){ if(a[i]) { ans[++pp]=i; return; } } } void check3_1(){ if(pp==5) return; int pos1=-1; for(int i=14;i>
1;i--){ if(a[i]==3){ for(int j=1;j<=3;j++) ans[++pp]=i; pos1=i; break; } } if(pp==0) return; bool flag=false; for(int i=14;i>1;i--){ if(a[i]>=2&&i!=pos1){ for(int j=1;j<=2;j++)ans[++pp]=i; a[i]=0; flag=true; return; } } if(!flag){ memset(ans,0,sizeof
(ans)); pp=0; } } bool sss=false; void checks(){ if(pp==5) return; for(int i=14;i-5>=1;i--){ bool flag=true; for(int j=i;j>i-5;j--)if(a[j]==0) flag=false; if(flag){ for(int j=i;j>i-5;j--){ ans[++pp]=j; } return; } } if(pp==5) return; if(a[14]){ for(int i=5;i>=2;i--){ if(a[i]==0) return; } sss=true; for(int j=5;j>1;j--){ ans[++pp]=j; } ans[++pp]=14; } } void check3_2(){ if(pp==5) return; for(int i=14;i>1;i--){ if(a[i]==3){ for(int j=1;j<=3;j++) ans[++pp]=i; a[i]=0; } } if(pp==0) return; for(int i=14;i>1;i--){ if(a[i]){ ans[++pp]=i; a[i]=0; } if(pp==5) return; } } void check2_1(){ if(pp==5) return; for(int i=14;i>1;i--){ if(a[i]==2){ for(int j=1;j<=2;j++) ans[++pp]=i; a[i]=0; } if(pp==4) break; } if(pp==0) return; for(int i=14;i>1;i--){ if(a[i]) { ans[++pp]=i; } if(pp==5) return; } } void check1(){ if(pp==5) return; for(int i=14;i>1;i--){ if(a[i])ans[++pp]=i; if(pp==5) return; } } void print(int i){ switch(i){ case 14:printf("A ");break; case 11:printf("J ");break; case 12:printf("Q ");break; case 13:printf("K ");break; default: printf("%d ",i); } } int main(){ fff(); pp=0; for(int i=1;i<=7;i++){ cin>>ch; switch(ch[0]){ case '1':a[10]++;break; case 'A':a[14]++;break; case 'J':a[11]++;break; case 'Q':a[12]++;break; case 'K':a[13]++;break; default: a[ch[0]-'0']++; } } check4(); check3_1(); checks(); check3_2(); check2_1(); check1(); sort(ans+1,ans+6); if(!sss){ for(int i=5;i>=1;i--){ print(ans[i]); } }else{ for(int i=4;i>=1;i--)print(ans[i]); print(14); } }

第二題——戰鬥(battle)

【題目描述】

  • 給出一個長度為nn的非下降序列,要求從中選出長度至少為kk的子序列,並且從中選出一個值滿足序列的方差最小
  • 求最小方差
  • 方差公式:令x0x_0為基準。S=(x1x0)2+(x2x0)2+(x3x0)2+...+(xk1x0)2S=(x_1-x_0)^2+(x_2-x_0)^2+(x_3-x_0)^2+...+(x_{k-1}-x_0)^2
  • 首先可以推出幾個結論:
    • 第一,個數至多為k,如果增加到k+1個,若子序列當中所有元素相同,則無影響,多一個也沒意義,如果不同,那麼加一個只能令方差增大。
    • 第二,這kk個元素一定是挨在一起的。這個假設一下就好了。
  • 然後把這個方差公式展開一下:
    • S=x12+x22+x32+...+xk12+(k1)x022x0(x1+x2+x3+...xk1)S=x_1^2+x_2^2+x_3^2+...+x_{k-1}^2+(k-1)*x_0^2-2*x_0*(x_1+x_2+x_3+...x_{k-1})
    • S=i=1k1xi2+(k1)x022x0i=1k1xiS=\sum_{i=1}^{k-1}{x_i^2}+(k-1)*x_0^2-2*x_0 *\sum_{i=1}^{k-1}{x_i}
  • 然後字首和跟字首平方和就可以O(1)O(1)求出某段區間內的選擇某一個做基準的方差值
  • 考慮這個方程發現這個方程式式一個二次函式,但他好像不是完全嚴格遞減遞增的,有可能長下面這個樣子:

在這裡插入圖片描述

  • 所以二分法的時候就有可能停留在中間的某一段上面orz
  • 這個時候就要再用一次二分法找到之前一個和這個值不一樣的點來找到單調的區間。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
inline void fff(){
	freopen("battle.in","r",stdin);
	freopen("battle.out","w",stdout);
}
inline LL read(){
	LL x=0;char ch=getchar();
	while(ch<'0'||ch>'9') ch=getchar();
	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
	return x;
}
const int N=1e5+10;
LL n,k;
LL a[N];
LL sum[N],sum_s[N];
LL get_s(LL x,LL l,LL r)
            
           

相關推薦

HGOI-國慶-day6

題解 今天是沙雕題集合…第一題就要打150+但毫無營養,第三題一題更比四題強…蒟蒻實在是沒有辦法orz 有生之年不要讓我碰到那個出題人 德州撲克真的沙雕 第一題——德克薩斯撲克(texas) 題目太長了orz,懶得概括… 就是一個暴力模擬+注意

HGOI-國慶-day1

題解 今天這個題可以說是很懸了,第一題花了兩個小時,還只是交了個暴力orz,有點硬核… 第一題——bread 【題目描述】 區間內n個無色積木進行m次染色,每次將[(i∗p+q)mod[(i*p+q)mod[(i∗p+q)mod n+1,(i∗q+p)

HGOI-國慶-day3

題解 講道理,真的很譴責這種掛著羊頭賣著恐龍肉的操作。標題寫著普及訓練難度結果是NOI/CTSC的題orz 真的爆零,我一道題都不會寫orz,出題人是江蘇高考415的dalao… 第一題——高考題(gaokao) 【題目描述】 給出二元組序列[ai,bi

國慶(一)divide

【一句話題意】有T組資料(T≤5,000),每組有六個數,分別表示價值從1到6的物品的個數。(總價值≤20,000)問等否將物品按價值平分。 【分析】 明顯是揹包求f[sum/2]是否等於1。然後我們針

國慶(一)cmi

【一句話題意】求長度為n的序列,排序的最少元素移動次數。 【分析】 轉化一下題意,由於n一定,我們轉而求最大的不移動元素個數。於是 就是lcs啊 就是lcs啊 就是lcs啊 就是lcs啊 ┓( ´∀`

國慶(二) 八數碼

裸題,然而逆序對判可行性時出了點偏差,wa了三個點,正解直接跑一遍即可。 不多說上程式碼 Code: #include<map> #include<queue> #include

國慶(二)多段線性函式

【冗長的題目描述】 目標是使得f(y)儘可能的小,並求出y的取值範圍。 【演算法1】 根據數學證明,f(y)應該是成u形或者平底鍋形,所以二分或者三分求“谷底”就可以了。 複雜度為O(n* log2n

國慶(二) 模模塔

(這是什麼破標題) 【一句話題意】給定兩個陣列ai和bi,求陣列ci。變換規律為ci=Σj=1i⌊ab⌋bi&ThinSpace;mod&ThinSpace;j c_{i}=\Sigma

國慶(六)德克薩斯撲克

【簡化題目描述】 簡化德州撲克的規則,從七張牌中選取五張牌。在忽略花色的情況下,我們把牌型分為七類,大小依次遞減。 1、四帶一 2、三帶對 3、順子 4、三帶二(兩張牌不要求相同)5、兩對帶一張單牌 6

國慶(五)祭司

【題意】給定n個數的取值範圍,把他們分為a,b兩組。找到一種恰當的分組使得,兩個集合的差值的絕對值的最大值最小。n,li,ri<=200 【分析】首先一個顯而易見的規律是,差值最大值一定是一個集合

國慶天樂——第二天

歐拉 小學生 n-1 表示 long 進制 只有一個 我們 等於 【數論】(所有的等於都是恒等) 費馬小定理:p為質數 A^(p-1)=1 (mod p) 歐拉定理:p是任意自然數 A^phi(p)=1 (mod p) 費馬小定理是歐拉定理的特殊情況 歐拉函數:

國慶天樂——第一天

搜索 tar 增長 gdb target 似的 等於 成了 程序 20171001 所學內容:分治倍增,搜索模擬,位運算+考試 【時間復雜度】 表示運行時間的增長趨勢 T(N)=T(N/2)+O(1) 二分查找 T(N)=2*T(N/2)+O(1) 線段樹的節點個數 T

國慶天樂——第三天

方向 ddl 滑動 return 相加 坐標 規劃 前綴 最長 2017102 【【動態規劃】】 【基礎內容】 狀態設計:往往是觀察在搜索過程中需要用到的參數,所表 示的含義往往是“最大”、“最小”、“方案總數”、“0/1”。 狀態轉移方程一般以數列遞推的形式給出,在研究如

國慶天樂——第

detail 根據 第七天 生成 預處理 常用 最長子串 模式匹配 com 20171007 【字符串算法】 模式匹配----kmp 定義:next[i+1]是最大的j+1使得p[0~j]是p[0~i]的後綴 通過這個next數組來跳過某些冗余計算

國慶天樂——第六天

是什麽 父節點 堆優化 子圖 直連 線段樹 有向無環圖 連接 動態規劃 20171006 【【圖論】】 **********************定義***************************** 在講這個問題之前,首先我們需要了解圖論中的圖是什麽東西。 定義

BZOJ NOI 十 哈夫曼樹

描述 cout 正整數 n-1 pre return 影響 scan 問題 【問題描述】有這樣一個經典問題:? 給出一個長度為??的非負整數數組??。? 每次可以選擇數組中兩個不同位置的數????, ????(?? ?= ??),將它們刪除,然後再向數組中加入一個新的元素,

NOI 十 Zbox loves ants

版本 UC 分布 += int AC ppp sca pre Zbox loves ants題目描述從小熱愛生物的Zbox開始觀察螞蟻了.她有一根長度為m的繩子,在最初的時刻,上面分布著n只螞蟻,她發現,每一只螞蟻在最初都可能選擇任意一個方向爬,爬行的速度始終為1,當有兩只

BZOJ 十 可持久化字符串

div AR def 持久 復雜 post 線性復雜 sign 數組 SOL: 我們發現答案就是 跑一邊KMP 那麽答案就是i-net[i], 我們考慮在trie上跑KMP,我們發現KMP的復雜度是依賴攤還分析的線性復雜度。如果樸素的KMP做法時間復雜度是不

Noi 十 基因改造計劃

truct UC ret spa namespace () for open class SOL: 我們跑馬拉車算法,然後寫主席樹維護。 #include<bits/stdc++.h> #define LL long long #define

Noi 十 人生的經驗

lin tdi ++ int its signed AD put return SOL: 那個,其實這道題爆搜能過。正解好像是建模後求歐拉回路。 #pragma GCC optimize("-Ofast") #include<bits