2019-08-01 紀中NOIP模擬賽B組

T1?[JZOJ2642] 游戲

題目描述

  Alice和Bob在玩一個游戲,游戲是在一個N*N的矩陣上進行的,每個格子上都有一個正整數。當輪到Alice/Bob時,他/她可以選擇最后一列或最后一行,并將其刪除,但必須保證選擇的這一行或這一列所有數的和為偶數。如果他/她不能刪除最后一行或最后一列,那么他/她就輸了。兩人都用最優策略來玩游戲,Alice先手,問Alice是否可以必勝?

分析

  這個說辭...一看就知道是博弈論

  眾所周知,博弈論有兩個重要結論:

  1.一個狀態是必敗狀態當且僅當它任意后繼都是必勝狀態

  2.一個狀態是必勝狀態當且僅當它存在后繼是必敗狀態

  于是設 $f[i][j]$ 為矩陣為 $i$ 行 $j$ 列時該回合操作方的狀態($1$ 為必勝,$0$ 為必敗),顯然 $f[1][1]=1$

  同時需要將 $f[1][i]$ 和 $f[i][1]$ 初始化,還要記錄所有橫軸和縱軸的前綴和

  然后分別討論刪除最后一行和最后一列時的后繼狀態,若該行或該列無法被刪除,則該后繼視為必勝

  考場上寫這題的時候已經不早了,感覺有點慌,幸好最后過了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
#define N 1005int T, n;
int g[N][N], f[N][N], p1[N][N], p2[N][N];int main() {scanf("%d", &T);while (T--) {scanf("%d", &n);for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) {scanf("%d", &g[i][j]);p1[i][j] = p1[i][j - 1] + g[i][j];p2[i][j] = p2[i - 1][j] + g[i][j];}f[1][1] = 1;for (int i = 2; i <= n; i++) {int t1, t2;if (p1[1][i] % 2) t1 = 1;else t1 = 0;if (p2[1][i] % 2) t2 = 1;else if (f[1][i - 1]) t2 = 1;else t2 = 0;if (t1 && t2) f[1][i] = 0;else f[1][i] = 1;}for (int i = 2; i <= n; i++) {int t1, t2;if (p2[i][1] % 2) t2 = 1;else t2 = 0;if (p2[i][1] % 2) t1 = 1;else if (f[i - 1][1]) t1 = 1;else t1 = 0;if (t1 && t2) f[1][i] = 0;else f[i][1] = 1;}for (int i = 2; i <= n; i++)for (int j = 2; j <= n; j++) {int t1, t2;if (p1[i][j] % 2) t1 = 1;else if (f[i - 1][j]) t1 = 1;else t1 = 0;if (p2[i][j] % 2) t2 = 1;else if (f[i][j - 1]) t2 = 1;else t2 = 0;if (t1 && t2) f[i][j] = 0;else f[i][j] = 1;}if (f[n][n]) printf("W\n");else printf("L\n");}return 0;
}
View Code

T2?[JZOJ2643] 六邊形

題目描述

  棋盤是由許多個六邊形構成的,共有5種不同的六邊形編號為1到5,棋盤的生成規則如下:

  1.從中心的一個六邊形開始,逆時針向外生成一個個六邊形。

  2.對于剛生成的一個六邊形,我們要確定它的種類,它的種類必須滿足與已生成的相鄰的六邊形不同。

  3.如果有多個種類可以選,我們選擇出現次數最少的種類。

  4.情況3下還有多個種類可以選,我們選擇數字編號最小的。

  現在要你求第N個生成的六邊形的編號?

  前14個六邊形生成圖如下:

分析

  這是個純模擬,感覺沒有什么要分析的

  主要就是要多注意細節,考場上少寫了一句代碼,直接掉到了 $45.5$ 分

  而且每次一寫模擬就寫得賊慢

//考場上寫得有點繁瑣
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 10005int T, n, c = 2, now = 8, s, e, ok, g1, g2;
int q[25], g[N], book[6], sum[6];int main() {scanf("%d", &T);for (int i = 1; i <= T; i++) {scanf("%d", q + i);n = max(n, q[i]);}g[1] = 1; g[2] = 2; g[3] = 3;g[4] = 4; g[5] = 5; g[6] = 2; g[7] = 3;sum[1] = sum[4] = sum[5] = 1;sum[2] = sum[3] = 2; sum[0] = inf;s = 2; e = 7;while (++c) {for (int i = 1; i <= 6; i++) {for (int j = 1; j < c; j++) {memset(book, 0, sizeof book);int minsum = inf;if (j != c - 1) {if (now == e + 1) {book[g[s]] = book[g[e]] = 1;for (int k = 1; k <= 5; k++)if (!book[k])minsum = min(minsum, sum[k]);for (int k = 1; k <= 5; k++)if (!book[k] && sum[k] == minsum) {g[now++] = k; sum[k]++; break;}g1 = s; g2 = s + 1; s = e + 1;}else {book[g[g1]] = book[g[g2]] = book[g[now - 1]] = 1;for (int k = 1; k <= 5; k++)if (!book[k])minsum = min(minsum, sum[k]);for (int k = 1; k <= 5; k++)if (!book[k] && sum[k] == minsum) {g[now++] = k; sum[k]++; break;}g1++; g2++;}}else {if (i == 6) e = now, book[g[s]] = 1;book[g[g1]] = book[g[now - 1]] = 1;for (int k = 1; k <= 5; k++)if (!book[k])minsum = min(minsum, sum[k]);for (int k = 1; k <= 5; k++)if (!book[k] && sum[k] == minsum) {g[now++] = k; sum[k]++; break;}}if (now > n) {ok = 1; break;}}if (ok) break;}if (ok) break;}for (int i = 1; i <= T; i++)printf("%d\n", g[q[i]]);return 0;
}
View Code

T3?[JZOJ2644] 數列

題目描述

  給你一個長度為N的正整數序列,如果一個連續的子序列,子序列的和能夠被K整除,那么就視此子序列合法,求原序列包括多少個合法的連續子序列?

  對于一個長度為8的序列,K=4的情況:2, 1, 2, 1, 1, 2, 1, 2 。它的答案為6,子序列是位置1->位置8,2->4,2->7,3->5,4->6,5->7。

分析

  看到題目就先寫了前綴和枚舉區間 $O(n^2)$ 暴力 $30 \, pts$

  當時看了半天覺得這是最可做的一題,結果看了數據范圍還是沒想出來 $O(n \, log \, n)$ 做法

  結果考完試下午看了下大家的討論,發現正解是 $O(k)$

  具體就是把每個前綴和按 $k$ 取模,記錄每個余數出現的次數 $sum$

  顯然,前綴和所得余數相同的的兩項之間的區間和,一定能被 $k$ 整除

  所以在余數相同的項中,我們可以任意挑選兩項組成一個合法區間

  因此答案為 $\sum\limits_{i=0}^{k-1} \binom{sum[i]}{2}$

  要注意,第 $0$ 項的前綴和余數視為 $0$

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
#define ll long long
#define N 50005
#define K 1000005int T, n, k, x;
int pre[N], sum[K];
ll ans, c[K];int main() {c[2] = 1;for (int i = 3; i <= N; i++)c[i] = c[i - 1] + i - 1;scanf("%d", &T);while (T--) {ans = 0;scanf("%d%d", &k, &n);for (int i = 1; i <= k; i++) sum[i] = 0;sum[0] = 1;for (int i = 1; i <= n; i++) {scanf("%d", &x);pre[i] = (pre[i - 1] + x) % k;sum[pre[i]]++;}for (int i = 0; i < k; i++)ans += c[sum[i]];printf("%lld\n", ans);}return 0;
}
View Code

轉載于:https://www.cnblogs.com/Pedesis/p/11284483.html

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

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

相關文章

knn分類 knn_關于KNN的快速小課程

knn分類 knnAs the title says, here is a quick little lesson on how to construct a simple KNN model in SciKit-Learn. I will be using this dataset. It contains information on students’ academic performance.就像標題中所說的&#xff0c;這是關于如何在SciKit-Le…

spring—配置數據源

數據源&#xff08;連接池&#xff09;的作用 數據源(連接池)是提高程序性能如出現的 事先實例化數據源&#xff0c;初始化部分連接資源 使用連接資源時從數據源中獲取 使用完畢后將連接資源歸還給數據源 常見的數據源(連接池)&#xff1a;DBCP、C3P0、BoneCP、Druid等 開發步…

大型網站系統與Java中間件實踐pdf

下載地址&#xff1a;網盤下載 基本介紹 編輯內容簡介 到底是本什么書&#xff0c;擁有這樣一份作序推薦人列表&#xff1a;阿里集團章文嵩博士|新浪TimYang|去哪網吳永強|丁香園馮大輝|蘑菇街岳旭強|途牛湯崢嶸|豆瓣洪強寧|某電商陳皓/林昊…… 這本書出自某電商技術部總監之手…

office漏洞利用--獲取shell

環境&#xff1a; kali系統&#xff0c; windows系統 流程&#xff1a; 在kali系統生成利用文件&#xff0c; kali系統下監聽本地端口&#xff0c; windows系統打開doc文件&#xff0c;即可中招 第一種利用方式&#xff0c; 適合測試用&#xff1a; 從git下載代碼&#xff1a; …

pandas之DataFrame合并merge

一、merge merge操作實現兩個DataFrame之間的合并&#xff0c;類似于sql兩個表之間的關聯查詢。merge的使用方法及參數解釋如下&#xff1a; pd.merge(left, right, onNone, howinner, left_onNone, right_onNone, left_indexFalse, right_indexFalse,    sortFalse, suffi…

typescript_如何掌握高級TypeScript模式

typescriptby Pierre-Antoine Mills皮埃爾安托萬米爾斯(Pierre-Antoine Mills) 如何掌握高級TypeScript模式 (How to master advanced TypeScript patterns) 了解如何為咖喱和Ramda創建類型 (Learn how to create types for curry and Ramda) Despite the popularity of curry…

html函數splice,js數組的常用函數(slice()和splice())和js引用的三種方法總結—2019年1月16日...

總結&#xff1a;slice()和splice()slice(參數1,參數2)可以查找數組下對應的數據&#xff0c;參數1為起始位置&#xff0c;參數2為結束位置&#xff0c;參數2可以為負數&#xff0c;-1對應的是從后向前數的第一個數值。splice()可以進行增刪改查數據操作&#xff0c;splice(參數…

leetcode 643. 子數組最大平均數 I(滑動窗口)

給定 n 個整數&#xff0c;找出平均數最大且長度為 k 的連續子數組&#xff0c;并輸出該最大平均數。 示例&#xff1a; 輸入&#xff1a;[1,12,-5,-6,50,3], k 4 輸出&#xff1a;12.75 解釋&#xff1a;最大平均數 (12-5-650)/4 51/4 12.75 代碼 class Solution {publ…

python ==字符串

字符串類型(str)&#xff1a; 包含在引號&#xff08;單&#xff0c;雙&#xff0c;三&#xff09;里面&#xff0c;由一串字符組成。 用途&#xff1a;姓名&#xff0c;性別&#xff0c;地址&#xff0c;學歷&#xff0c;密碼 Name ‘zbk’ 取值: 首先要明確&#xff0c;字符…

認證鑒權與API權限控制在微服務架構中的設計與實現(一)

作者&#xff1a; [Aoho’s Blog] 引言&#xff1a; 本文系《認證鑒權與API權限控制在微服務架構中的設計與實現》系列的第一篇&#xff0c;本系列預計四篇文章講解微服務下的認證鑒權與API權限控制的實現。 1. 背景 最近在做權限相關服務的開發&#xff0c;在系統微服務化后&a…

mac下完全卸載程序的方法

在國外網上看到的&#xff0c;覺得很好&#xff0c;不僅可以長卸載的知識&#xff0c;還對mac系統有更深的認識。比如偏好設置文件&#xff0c;我以前設置一個程序壞了&#xff0c;打不開了&#xff0c;怎么重裝都打不開&#xff0c;后來才知道系統還保留著原來的偏好設置文件。…

機器學習集群_機器學習中的多合一集群技術在無監督學習中應該了解

機器學習集群Clustering algorithms are a powerful technique for machine learning on unsupervised data. The most common algorithms in machine learning are hierarchical clustering and K-Means clustering. These two algorithms are incredibly powerful when appli…

自考本科計算機要學什么,計算機自考本科需要考哪些科目

高科技發展時代&#xff0c;怎離得開計算機技術&#xff1f;小學生都要學編程了&#xff0c;未來趨勢一目了然&#xff0c;所以如今在考慮提升學歷的社會成人&#xff0c;多半也青睞于計算機專業&#xff0c;那么計算機自考本科需要考哪些科目&#xff1f;難不難&#xff1f;自…

審查指南 最新版本_代碼審查-最終指南

審查指南 最新版本by Assaf Elovic通過阿薩夫埃洛維奇 代碼審查-最終指南 (Code Review — The Ultimate Guide) 構建團隊代碼審查流程的終極指南 (The ultimate guide for building your team’s code review process) After conducting hundreds of code reviews, leading R…

非對稱加密

2019獨角獸企業重金招聘Python工程師標準>>> 概念 非對稱加密算法需要兩個密鑰&#xff1a;公鑰&#xff08;publickey&#xff09;和私鑰&#xff08;privatekey&#xff09;。公鑰與私鑰是一對&#xff0c;如果用公鑰對數據進行加密&#xff0c;只有用對應的私…

管理Sass項目文件結構

http://www.w3cplus.com/preprocessor/architecture-sass-project.html 編輯推薦&#xff1a; 掘金是一個高質量的技術社區&#xff0c;從 CSS 到 Vue.js&#xff0c;性能優化到開源類庫&#xff0c;讓你不錯過前端開發的每一個技術干貨。 點擊鏈接查看最新前端內容&#xff0c…

Spring—注解開發

Spring原始注解 Spring是輕代碼而重配置的框架&#xff0c;配置比較繁重&#xff0c;影響開發效率&#xff0c;所以注解開發是一種趨勢&#xff0c;注解代替xml配置文 件可以簡化配置&#xff0c;提高開發效率。 Component 使用在類上用于實例化BeanController 使用在web層類…

政府公開數據可視化_公開演講如何幫助您設計更好的數據可視化

政府公開數據可視化What do good speeches and good data visualisation have in common? More than you may think.好的演講和好的數據可視化有什么共同點&#xff1f; 超出您的想象。 Aristotle — the founding father of all things public speaking — believed that th…

C++字符串完全指引之一 —— Win32 字符編碼 (轉載)

C字符串完全指引之一 —— Win32 字符編碼原著&#xff1a;Michael Dunn翻譯&#xff1a;Chengjie Sun 原文出處&#xff1a;CodeProject&#xff1a;The Complete Guide to C Strings, Part I 引言  毫無疑問&#xff0c;我們都看到過像 TCHAR, std::string, BSTR 等各種各樣…

網絡計算機無法訪問 請檢查,局域網電腦無法訪問,請檢查來賓訪問帳號是否開通...

局域網電腦無法訪問&#xff0c;有時候并不是由于網絡故障引起的&#xff0c;而是因為自身電腦的一些設置問題&#xff0c;例如之前談過的網絡參數設置不對造成局域網電腦無法訪問。今天分析另一個電腦設置的因素&#xff0c;它也會導致局域網電腦無法訪問&#xff0c;那就是賓…