CCF2023年12月第3題 Crontab

2021-08-16 03:54:25 字數 2254 閱讀 1559

這一題要求我們對給定的配置資訊,在特定的時間段輸出需要執行的任務。

在unix中每分鐘檢查一次,最簡單的思路就是用迴圈模擬時間的推移,每分鐘匹配一次規則。這種情況在真正的系統裡是很高效的,因為時間是真實流動的。但如果是模擬執行則有些浪費時間。

如果在考試過程中想不到其它方法這種暴力方法至少可以通過70%左右的測試用例。

第二種方案是採用排序的方法,也就是在讀取每一條配置資訊之後生成該條配置資訊在所有時刻對應的指令。隨後對這些時刻進行排序。

具體的處理每條配置資訊時可以按照如下幾步,將『dec』,』sun『 等用數字進行替換,再將』 *『 用 『0-24』 等進行替換, 最後將所有的』5『 替換為 『5-5』 ;也就是將配置資訊標準化的過程。處理這類問題時,最終的格式越單一處理起來就越簡單。

下一步需要做的就是將字串轉換為整型陣列,這裡需要分別處理兩種格式的資料,即範圍型的和逗號型的,依然分開處理。

最終得到了所有位置的資料,這時只需要將它們組合起來就好了。需要注意的是數字的位數,因為這裡對記憶體的要求很充足,就將數字設定為unsigned long long 型別。

組合數字之前需要進行判斷,判斷一下該月是否有這一天,同時這一天是否是給定的星期。

最後還需要判斷是否在開始和結束日期之內。

當輸入完所有的指令之後,只需要進行排序即可。可以呼叫stl 裡的sort 函式,速度很快。

tips:

1.英文縮寫有大寫也有小寫,要先進行轉換。

2.採用的是24小時計時法

3.星期是從0-6

4.開始時間可以取,結束時間不可以取

5.注意判斷平年還是閏年

6.時間相同的指令需要按照輸入的順序排序

最終的**,踩了很多坑,令人崩潰,得分是95分。 希望能被找到問題。

// cronlab.cpp: 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include#include#include#include#include#include#include#define min 0

#define hour 1

#define day 2

#define mon 3

#define week 4

using namespace std;

/*w= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7

在公式中d表示日期中的日數,m表示月份數,y表示年數。

這是乙個根據日期來判斷星期幾的公式,當然即使沒有這個公式我覺得也能推出來*/

string mon[13] = ;

string nmon[13] = ;

string week[7] = ;

string nweek[7] = ;

struct out *pout;

vectorouts;

void english2number(string &res)

/*將英文縮寫轉換成數字*/

for (int i = 0; i < 13; ++i) }

for (int i = 0; i < 7; ++i) }

return;

}void s2number(string &res, int code) }}

void r2number(string &res, set& u) }}

void t2number(string &res, set& u)

stringstream ss;

ss << res;

ss >> n;

u.insert(n);

}bool sort_by_time(const struct out &a, const struct out &b)

else

for (iday = sday.begin(); iday != sday.end(); iday++)

if (iweek == sweek.end())

continue;

for (ihour = shour.begin(); ihour != shour.end(); ihour++)}}

}} }

sort(outs.begin(), outs.end(), sort_by_time);

vector::iterator i;

for (i = outs.begin(); i < outs.end(); ++i)

//system("pause");

return 0;

}

CCF 2023年12月第5題 商路

這一題題目很長,但理解起來並不困難。有一點很重要,那就是題目輸入的順序是城市編號的順序,而城市編號的順序又直接決定了城市之間的上下級關係。雖然編號小的不一定是大編號的下級,但下級城市的編號一定比上級城市的編號小,如何利用這一點非常重要。假如城市a的下級城市是b,c,d 那如果b,c,d 本身的商路價...

CCF 2023年3月第5題 引水入城(80分)

這一題是很明確的最大流問題 但是無論是用dfs 還是 bfs 都肯定會超時。因為規模太大了。如果想練手網路流可以試試提交乙個殘量網路的 應該只能得50分左右。dfs,bfs 有缺陷得地方在於沒有認識到這一題圖得結構是非常規整得。這一題得方案還是使用動態規劃來做。將最大流問題轉換為最小割問題 接下來只...

CCF認證2023年12月第3題 最大的矩形

試題編號 201312 3 試題名稱 最大的矩形 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 在橫軸上放了n個相鄰的矩形,每個矩形的寬度是1,而第i 1 i n 個矩形的高度是hi。這n個矩形構成了乙個直方圖。例如,下圖中六個矩形的高度就分別是3,1,6,5,2,3。請找出能...