吐血(1)無厘頭燒腦
/** * 燒腦版 * 就是在一條長L釐米的 繩索上,螞蟻每秒走一釐米,走到兩端都會立刻掉下去,且螞蟻互相不會交叉過繩索,也就是說碰到時都掉頭走,問最後一隻螞蟻掉下繩索的 最長和最短時間 * @param L 繩索的長度 * @param data 每一隻螞蟻距離繩索最左邊的初始距離 * @return */ public static int[] t2(int L, int data[]) { //螞蟻數量 int count = data.length; //最長時間 ,注意除以2 int max = 0; //最短時間 int min = 0; //中間值 int half = L / 2; //輔助 陣列,用於儲存每一個螞蟻在特定位置的 標誌,說明該位置有幾隻螞蟻,-1 是特殊情況,是發生相遇事件的處理 int ruler[] = new int[2 * L + 1]; int result[] = new int[2]; for (int i = 0; i < count; i++) { min = Math.max(min, Math.min(L - data[i], data[i])); } //下面的處理是 修改 每一隻螞蟻距離最左邊的 初始距離,向左是負方向,向右是正方向前進,且0-L是正,L+1-2L 是負方向前進 for (int i = 0; i < data.length; i++) { if (data[i] > half) { data[i] *= -2; ruler[(-1) * data[i]] = 1; } else { data[i] *= 2; ruler[data[i]] = 1; } } while (true) { max++; for (int i = 0; i < data.length; i++) { if (data[i] > 0) { switch (ruler[data[i]]) { case 2://螞蟻相遇,其中一隻率先處理衝突 ruler[data[i]] = -1; data[i] = -1 * (data[i] - 1); ruler[-1 * data[i]] = 1; break; case -1://螞蟻相遇,它不是首先處理衝突的.記住,螞蟻相遇一定是針對兩隻螞蟻而言的 ruler[data[i]] = 0; ruler[data[i] - 1] = 1; data[i] = -1 * (data[i] - 1); break; case 1://預設情況 default: ruler[data[i]] = 0; //加一 , 說明螞蟻前進了一釐米,但是這裡的加一意味著 標誌位更新 ruler[data[i] + 1] += 1; //這裡的加一才是真正的距離更新,因為data儲存著距離資訊 data[i] = data[i] + 1; if (data[i] == 2 * L) { data[i] = 0; count--; if (count == 0) { break;//直接退出迴圈,然後在下面判斷是否全部的螞蟻掉下繩索,如果是,則程式終止 } } } } else if (data[i] < 0) { switch (ruler[-1 * data[i]]) { case 2: ruler[-1 * data[i]] = -1; data[i] = -1 * data[i] + 1; ruler[data[i]] = 1; break; case -1: ruler[-1 * data[i]] = 0; data[i] = -1 * data[i] + 1; ruler[data[i]] = 1; break; case 1: default: ruler[-1 * data[i]] = 0; data[i] = data[i] + 1; ruler[-1 * data[i]] += 1; if (data[i] == 0) { count--; if (count == 0) { break; } } break; } } } if (count == 0) { result[0] = min; result[1] = max / 2; return result; } } }
吐血版
int Max(int a, int b) { return a > b ? a : b; } int Min(int a, int b) { return a > b ? b : a; } void Fun(int L, int count, int *data, int *result) { int max = 0; int min = 0; for (int i = 0; i < count; ++i) { min = Max(min, Min(data[i], L - data[i])); } for (int i = 0; i < count; ++i) { max = Max(max, Max(data[i], L - data[i])); } result[0] = min; result[1] = max; } void testFun() { int testCase = 1000; int poleLength = 1000; int antsCount = 1000; scanf("%d", &testCase); int result[testCase][2]; for (int i = 0; i < testCase; i++) { scanf("%d %d", &poleLength, &antsCount); int index = 0; int antsArray[antsCount]; while (index < antsCount) { scanf("%d", &antsArray[index++]); } Fun(poleLength, antsCount, antsArray, result[i]); } for (int j = 0; j < testCase; ++j) { printf("%d %d\n", result[j][0], result[j][1]); } }
相關推薦
吐血(1)無厘頭燒腦
/** * 燒腦版 * 就是在一條長L釐米的 繩索上,螞蟻每秒走一釐米,走到兩端都會立刻掉下去,且螞蟻互相不會交叉過繩索,也就是說碰到時都掉頭走,問最後一隻螞蟻掉下繩索的 最長和最短時間 * @param L 繩索的長度 *
人工智慧第三章(1)——無資訊搜尋(盲目搜尋) (附書本資料)
摘要 本章旨在講清楚:1)搜尋問題如何形式化;2)樹搜尋,圖搜尋,及演算法評估;3)一些搜尋策略:寬度優先,一致代價,深度優先,深度受限,迭代加深,雙向搜尋。 前言 這一章說的是Agent,但是是搜尋Agent,所以主要講的是各種搜尋演算法(
【原創】IE11驚現無厘頭Crash BUG(三招搞死你的IE11,並提供可重現代碼)!
解決問題 html 窗口 前言 stat 錯誤 ont spa 環境 前言 很多人都知道我們在做FineUI控件庫,而且我們也做了超過 9 年的時間,在和瀏覽器無數次的交往中,也發現了多個瀏覽器自身的BUG,並公開出來方便大家查閱: 分享IE7一個神奇的BUG(不是
無源射頻混頻器的基本特性(1)
tar media 留下 時域 過程 inter local logs 運算 混頻器的一個重要作用就是頻率搬運,即將中頻信號搬運到射頻段,或者將射頻信號搬運到中頻段,前者稱為上變頻,後者稱為下變頻。 以上變頻為例,在實際使用中f0稱為IF(Intermediate Fre
十、無事勿擾,有事通知(1)——NSNotification
over ring pass tro 管理中心 代碼 aps pre 發生 概述 很久很久以前,有一只菜鳥正在美滋滋的擼著他的嵌入式C代碼。然而有一天,老板對菜鳥說:“別擼C了,從現在開始你就寫swift開發ios了。”菜鳥一臉懵逼,但還是照做了。 又有一天,菜蛋諂媚的對菜
無鎖資料結構(1):簡介
希望本文能成為無鎖(lock free)資料結構系列文章一個好的開端。我很樂意與社群分享我的經歷,這個系列就什麼是無鎖資料結構、如何實現以及 STL 容器概念是否適用於無鎖容器,何種情形下適合應用無鎖資料結構做一些分享。 談論無鎖資料結構,必然要談論諸如原子操作、程
快速入門Openstack,無腦多節點部署Mitaka(1)--前期環境搭建準備
序言 openstack是什麼?官方的解釋:OpenStack is a cloud operating system that controls large pools of compute, storage, and networking reso
Trinity簡介(1)--用於無參考基因組的轉錄組de novo組裝
一、 Trinity簡介 Trinity,是由 the Broad Institute 開發的轉錄組de novo組裝軟體,由三個獨立的軟體模組組成: Inchworm,Chrysalis和Butterfly。三個軟體依次來處理大規模的RNA-seq的reads資料。 Tr
機器學習筆記(1)監督學習和無監督學習
結果 關系 不同 情況 屬於 預測 數據 自己 復雜 監督學習 監督學習是指我們給予算法一個數據集,這個數據集可以是以往相同類型問題的結果,或者絕對正確的經驗答案的集合,也就是統計中常說的樣本,並且這些數據都是有其固有的“正確答案”,然後算法根據這個集合做出對當前相同類型的
ESP8266學習筆記(1)——搭建環境、編譯燒寫
一、搭建環境 1.1 資料準備 《ESP8266 SDK 入門指南》 1.2 安裝安信可ESP8266_IDE(可選) 1.3 安裝VirtualBox 1.4 安裝ESP8266_lubuntu映象檔案 1.在 VirtualBo
基礎演算法題(1)—— 題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的四位數?
題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的四位數? 分析題目,要求將1,2,3,4四個數字成各個位數不相同且無重複的四位數,可以寫四個for迴圈,每一個迴圈代表一個位數上的數字,即1——4,再定義一個int型的變數count,初始值為
數據結構—頭插法逆轉單鏈表——空間復雜度為O(1)
reat pri 後繼 space using set i++ for 逆轉鏈表 #if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using na
Python機器學習入門(1)之導學+無監督學習
預處理 全部 install 無監督學習 分類 png ins class 簡單 Python Scikit-learn *一組簡單有效的工具集 *依賴Python的NumPy,SciPy和matplotlib庫 *開源 可復用 sklearn庫的安裝 DOS
無廢話設計模式(1)--簡單工廠、工廠方法、抽象工廠
0-前言 簡單工廠、工廠方法、抽象工廠都是建立型的設計模式,三個設計模式都是工廠的變種,不復雜,下面我們來快速學習這三種; 1-簡單工廠模式 太簡單,UML圖就不畫了,直接上程式碼: //-----------------1、簡單工廠------------ //1-1、生產者父類 class Ph
開始寫博客,學習Linq(1)
設計 查詢 lin 數據源 任務 集成 部分 程序 編程 摘自《linq實戰》原文: 軟件很簡單。它可以歸結為兩件事情:代碼和數據。 開發軟件卻並非那麽簡單,其中很重要的一項任務就是編寫處理數據的代碼。 無論選擇了哪種語言,在程序開發得某個時候你將不得不開始
GuozhongCrawler系列教程 (1) 三大PageDownloader
特點 string null 瀏覽器兼容 ror down odi 系列 lan GuozhongCrawler QQ群 202568714 教程源代碼下載地址:http://pan.baidu.com/s/1pJBmerL GuozhongCrawl
正則表達式(1)
表達式 正則表達式是計算機科學中的一個重要概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器中,正則表達式通常被用來檢索、替換符合某個模式的文本。許多程序設計語言都支持利用正則表達式進行字符串操作。(grep、sed、awk) 為什麽要學習正則表達式?
Angular 4 - The Basics 筆記(1): Install
install rst logs nod first log 筆記 npm app Install Node.js Install Angular CLI sudo npm install -g @angular/cli Set-up new app
【Prince2科普】Prince2的七大原則(1)
步驟 哪些 來看 產品 論證 img .com 驗證 mil 經過前幾講中關於PRINCE2六大要素,四大步驟及整體思維架構的學習,相信各位看官已經對於PRINCE2有了大概的了解,那我們今天的學習內容會正式進入到七大原則內容的分享。 我們先來看一下,PRINCE
SQl 關鍵詞(1)
order by 結果 tro class 問題 重復 ima 排除 數據 1、Distinct 在表中,可能會包含重復值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。 關鍵詞 DISTINCT 用於返回唯一不同的值,過濾掉重復選項。 //