第九屆藍(lán)橋杯大賽個(gè)人賽省賽(軟件類(lèi))C/C++ 大學(xué)B組
考生須知:
考試開(kāi)始后,選手首先下載題目,并使用考場(chǎng)現(xiàn)場(chǎng)公布的解壓密碼解壓試題。
考試時(shí)間為4小時(shí)。時(shí)間截止后,提交答案無(wú)效。
在考試強(qiáng)制結(jié)束前,選手可以主動(dòng)結(jié)束考試(需要身份驗(yàn)證),結(jié)束考試后將無(wú)法繼續(xù)提交或?yàn)g覽答案。
選手可瀏覽自己已經(jīng)提交的答案。被瀏覽的答案允許拷貝。
對(duì)同一題目,選手可多次提交答案,以最后一次提交的答案為準(zhǔn)。
選手切勿在提交的代碼中書(shū)寫(xiě)“姓名”、“考號(hào)”,“院校名”等與身份有關(guān)的信息或其它與競(jìng)賽題目無(wú)關(guān)的內(nèi)容,否則成績(jī)無(wú)效。
選手必須通過(guò)瀏覽器方式提交自己的答案。選手在其它位置的作答或其它方式提交的答案無(wú)效。
-
試題包含三種類(lèi)型:“結(jié)果填空”、“代碼填空”與“程序設(shè)計(jì)”。
結(jié)果填空題:要求選手根據(jù)題目描述直接填寫(xiě)結(jié)果。求解方式不限。不要求源代碼。把結(jié)果填空的答案直接通過(guò)網(wǎng)頁(yè)提交即可,不要書(shū)寫(xiě)多余的內(nèi)容。
代碼填空題:要求選手在弄清給定代碼工作原理的基礎(chǔ)上填寫(xiě)缺失的部分,使得程序邏輯正確、完整。把代碼填空的答案(僅填空處的答案,不包括題面已存在的代碼或符號(hào))直接通過(guò)網(wǎng)頁(yè)提交即可,不要書(shū)寫(xiě)多余的內(nèi)容。使用ANSI C/ANSI C++ 標(biāo)準(zhǔn),不要依賴操作系統(tǒng)或編譯器提供的特殊函數(shù)。
-
程序設(shè)計(jì)題目:要求選手設(shè)計(jì)的程序?qū)τ诮o定的輸入能給出正確的輸出結(jié)果??忌某绦蛑挥心苓\(yùn)行出正確結(jié)果才有機(jī)會(huì)得分。
注意:在評(píng)卷時(shí)使用的輸入數(shù)據(jù)與試卷中給出的示例數(shù)據(jù)可能是不同的。選手的程序必須是通用的,不能只對(duì)試卷中給定的數(shù)據(jù)有效。對(duì)于編程題目,要求選手給出的解答完全符合ANSI C++標(biāo)準(zhǔn),不能使用諸如繪圖、Win32API、中斷調(diào)用、硬件操作或與操作系統(tǒng)相關(guān)的API。代碼中允許使用STL類(lèi)庫(kù)。注意: main函數(shù)結(jié)束必須返回0注意: 所有依賴的函數(shù)必須明確地在源文件中 #include <xxx>, 不能通過(guò)工程設(shè)置而省略常用頭文件。所有源碼必須在同一文件中。調(diào)試通過(guò)后,拷貝提交。提交時(shí),注意選擇所期望的編譯器類(lèi)型。
題目們(づ ̄ 3 ̄)づ:
1. 第幾天(結(jié)果填空)(滿分5分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,不限解決問(wèn)題的方式,只要求提交結(jié)果。必須通過(guò)瀏覽器提交答案。
題目描述:
2000年的1月1日,是那一年的第1天。那么,2000年的5月4日,是那一年的第幾天?注意:需要提交的是一個(gè)整數(shù),不要填寫(xiě)任何多余內(nèi)容。
解題思路:
這個(gè)題用EXCEL解決豈不是妙哉(●'?'●),所以,貼圖好了= ̄ω ̄=。
2.明碼(結(jié)果填空) (滿分7分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,不限解決問(wèn)題的方式,只要求提交結(jié)果。必須通過(guò)瀏覽器提交答案。
題目描述:
漢字的字形存在于字庫(kù)中,即便在今天,16點(diǎn)陣的字庫(kù)也仍然使用廣泛。
16點(diǎn)陣的字庫(kù)把每個(gè)漢字看成是16x16個(gè)像素信息。并把這些信息記錄在字節(jié)中。
一個(gè)字節(jié)可以存儲(chǔ)8位信息,用32個(gè)字節(jié)就可以存一個(gè)漢字的字形了。
把每個(gè)字節(jié)轉(zhuǎn)為2進(jìn)制表示,1表示墨跡,0表示底色。每行2個(gè)字節(jié),
一共16行,布局是:
第1字節(jié),第2字節(jié)
第3字節(jié),第4字節(jié)
....
第31字節(jié), 第32字節(jié)
這道題目是給你一段多個(gè)漢字組成的信息,每個(gè)漢字用32個(gè)字節(jié)表示,這里給出了字節(jié)作為有符號(hào)整數(shù)的值。
題目的要求隱藏在這些信息中。你的任務(wù)是復(fù)原這些漢字的字形,從中看出題目的要求,并根據(jù)要求填寫(xiě)答案。
這段信息是(一共10個(gè)漢字):
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4
4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64
16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128
0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0
2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0
1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0
0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0
注意:需要提交的是一個(gè)整數(shù),不要填寫(xiě)任何多余內(nèi)容。
解題思路:
這個(gè)題好多人做的很懵的樣子欸(⊙?⊙),或許是我同時(shí)打CTF的原因,所以我趕腳還好啊(????)。標(biāo)準(zhǔn)的隱寫(xiě)術(shù)啊(╯‵□′)╯︵┻━┻。
**坑點(diǎn):1.九的九次方不是81啊喂(#`O′)。2.沒(méi)讓填十個(gè)漢字不是嗎?都說(shuō)了需要提交的是一個(gè)整數(shù)<@_@>
貼代碼:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n=32;
bool huanhang=true;
while(n--)
{
int num,i;
bool flag=false;
int str[8]={0,0,0,0,0,0,0,0};
cin>>num;
if(num<0) {num=-1-num;flag = !flag;}
for(i=0;num != 0 && num != 1;i++)
{
str[i] = num % 2;
num = num / 2;
}
str[i] = num;
if(flag)
{
for(int i=0;i<8;i++)
if(str[i]==0) str[i]=1;
else str[i]=0;
}
for(int j=7;j>=0;j--)
{
//if(str[j]==0) cout<<" ";
//else cout<<str[j];
cout<<str[j];
}
if(huanhang) cout<<" ";
else cout<<endl;
huanhang = !huanhang;
}
return 0;
}
3. 乘積尾零(結(jié)果填空) (滿分13分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,不限解決問(wèn)題的方式,只要求提交結(jié)果。必須通過(guò)瀏覽器提交答案。
題目描述:
如下的10行數(shù)據(jù),每行有10個(gè)整數(shù),請(qǐng)你求出它們的乘積的末尾有多少個(gè)零?
5650 4542 3554 473 946 4114 3871 9073 90 4329
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899
1486 5722 3135 1170 4014 5510 5120 729 2880 9019
2049 698 4582 4346 4427 646 9742 7340 1230 7683
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649
6701 6645 1671 5978 2704 9926 295 3125 3878 6785
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074
689 5510 8243 6114 337 4096 8199 7313 3685 211
注意:需要提交的是一個(gè)整數(shù),表示末尾零的個(gè)數(shù)。不要填寫(xiě)任何多余內(nèi)容。
解題思路:
這個(gè)題當(dāng)時(shí)一看就要用大數(shù)運(yùn)算,在加上突然發(fā)現(xiàn)機(jī)子上是全環(huán)境于是。。。我默默打開(kāi)了Eclipse,我一看。。全英文界面Σ(っ °Д °;)っ(我英文不好被關(guān)了起來(lái)~>_<~)于是憑記憶把自動(dòng)補(bǔ)全打開(kāi)。接著調(diào)用BigInteger類(lèi)
報(bào)錯(cuò)報(bào)出天際。。。つ﹏?,我默默關(guān)了Eclipse就放棄了這個(gè)題。。。老闊疼。。。
比賽結(jié)束之后,俊杰小哥哥(我是不會(huì)告訴你們俊杰小哥哥是誰(shuí)的O(∩_∩)O)告訴我可以用快速冪,汪醬(我也是不會(huì)告訴你們汪醬是誰(shuí)的O(∩_∩)O)告訴我了一種很神奇的解法。
就是,要求末尾0的個(gè)數(shù)就相當(dāng)于一個(gè)數(shù)為一個(gè)整數(shù)乘以10的n次冪(那個(gè)數(shù)由100個(gè)數(shù)相乘而來(lái)),求n的最大值,那么,問(wèn)題就可以轉(zhuǎn)化為,求每個(gè)數(shù)的2*5存在的個(gè)數(shù),累乘即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num[100],sum_2=0,sum_5=0;
for(int i=0;i<100;i++)
{
cin>>num[i];
while(num[i] % 2 == 0)
{
sum_2++;
num[i] /= 2;
}
while(num[i] % 5 == 0)
{
sum_5++;
num[i] /= 5;
}
}
cout<<min(sum_2,sum_5);
return 0;
}
4. 摔手機(jī)(誤)測(cè)試次數(shù)(結(jié)果填空) (滿分17分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,不限解決問(wèn)題的方式,只要求提交結(jié)果。必須通過(guò)瀏覽器提交答案。
題目描述:
x星球的居民脾氣不太好,但好在他們生氣的時(shí)候唯一的異常舉動(dòng)是:摔手機(jī)。
各大廠商也就紛紛推出各種耐摔型手機(jī)。x星球的質(zhì)監(jiān)局規(guī)定了手機(jī)必須經(jīng)過(guò)耐摔測(cè)試,并且評(píng)定出一個(gè)耐摔指數(shù)來(lái),之后才允許上市流通。
x星球有很多高聳入云的高塔,剛好可以用來(lái)做耐摔測(cè)試。塔的每一層高度都是一樣的,與地球上稍有不同的是,他們的第一層不是地面,而是相當(dāng)于我們的2樓。
如果手機(jī)從第7層扔下去沒(méi)摔壞,但第8層摔壞了,則手機(jī)耐摔指數(shù)=7。
特別地,如果手機(jī)從第1層扔下去就壞了,則耐摔指數(shù)=0。
如果到了塔的最高層第n層扔沒(méi)摔壞,則耐摔指數(shù)=n
為了減少測(cè)試次數(shù),從每個(gè)廠家抽樣3部手機(jī)參加測(cè)試。
某次測(cè)試的塔高為1000層,如果我們總是采用最佳策略,在最壞的運(yùn)氣下最多需要測(cè)試多少次才能確定手機(jī)的耐摔指數(shù)呢?
請(qǐng)?zhí)顚?xiě)這個(gè)最多測(cè)試次數(shù)。
注意:需要填寫(xiě)的是一個(gè)整數(shù),不要填寫(xiě)任何多余內(nèi)容。
解題思路:
這個(gè)題。。。。emmmmm我先發(fā)張圖大家自行體會(huì)下。。。
這個(gè)題真的是充滿了怨念。。。。。(╯‵□′)╯︵┻━┻
算法競(jìng)賽入門(mén)經(jīng)典這本書(shū)上有原題在P292的例題 9-20。。。。。。
5.快速排序(代碼填空) (滿分9分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,不限解決問(wèn)題的方式。只要求填寫(xiě)缺失的代碼部分,千萬(wàn)不要畫(huà)蛇添足,填寫(xiě)多余的已有代碼或符號(hào)。必須通過(guò)瀏覽器提交答案。
題目描述:
以下代碼可以從數(shù)組a[]中找出第k小的元素。
它使用了類(lèi)似快速排序中的分治算法,期望時(shí)間復(fù)雜度是O(N)的。
請(qǐng)仔細(xì)閱讀分析源碼,填寫(xiě)劃線部分缺失的內(nèi)容。
#include <stdio.h>
int quick_select(int a[], int l, int r, int k) {
int p = rand() % (r - l + 1) + l;
int x = a[p];
{int t = a[p]; a[p] = a[r]; a[r] = t;}
int i = l, j = r;
while(i < j) {
while(i < j && a[i] < x) i++;
if(i < j) {
a[j] = a[i];
j--;
}
while(i < j && a[j] > x) j--;
if(i < j) {
a[i] = a[j];
i++;
}
}
a[i] = x;
p = i;
if(i - l + 1 == k) return a[i];
if(i - l + 1 < k) return quick_select( _____________________________ ); //填空
else return quick_select(a, l, i - 1, k);
}
int main()
{
int a[] = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12};
printf("%d\n", quick_select(a, 0, 14, 5));
return 0;
}
注意:只填寫(xiě)劃線部分缺少的代碼,不要抄寫(xiě)已經(jīng)存在的代碼或符號(hào)。
解題思路:
這個(gè)題。。。我比賽的時(shí)候。。我想當(dāng)然的填了a, l, i + 1, k,后來(lái)發(fā)現(xiàn)是錯(cuò)的。。。
/(ㄒoㄒ)/~~
正確答案應(yīng)該是這個(gè)a, i+1, r, k-(i-l+1)。。。。
#include <stdio.h>
int quick_select(int a[], int l, int r, int k) {
int p = rand() % (r - l + 1) + l;//隨機(jī)定位一個(gè)基準(zhǔn)下標(biāo)
int x = a[p];//將基準(zhǔn)下標(biāo)代表的數(shù)字取出
/*這里由于已經(jīng)把基準(zhǔn)值存入了x中,所以可以認(rèn)為a[p]是挖了一個(gè)坑,可以填數(shù)據(jù)*/
{int t = a[p]; a[p] = a[r]; a[r] = t;}//將挖的坑移至數(shù)組尾端
int i = l, j = r;//i作為從前向后檢索的下表,j作為從后向前檢索的下標(biāo)
while(i < j) {//快速排序
while(i < j && a[i] < x) i++;//如果有值比基準(zhǔn)值小且在基準(zhǔn)值左方那么不變
if(i < j) {//如果有值比基準(zhǔn)值大且在基準(zhǔn)值左方
a[j] = a[i];//用這個(gè)值把坑填上
j--;//j下標(biāo)向前移動(dòng)
}//此時(shí)i指向了那個(gè)坑
while(i < j && a[j] > x) j--;//如果有值比基準(zhǔn)值大且在基準(zhǔn)值右方那么不變
if(i < j) {//如果有值比基準(zhǔn)值小且在基準(zhǔn)值右方
a[i] = a[j];//再次把坑填上
i++;//i下標(biāo)向后移動(dòng)
}
}
a[i] = x;//把x的值扔回去,此時(shí),比x小的值都在其左側(cè),比x大的值都在其右側(cè)。
p = i;//此時(shí)x是第幾個(gè)數(shù),就是第幾小的數(shù)。
if(i - l + 1 == k) return a[i];
if(i - l + 1 < k) return quick_select( a, i+1, r, k-(i-l+1) ); //填空
else return quick_select(a, l, i - 1, k);
}
int main()
{
int a[] = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12};
printf("%d\n", quick_select(a, 0, 14, 5));
return 0;
}
6.遞增三元組(程序設(shè)計(jì))(滿分11分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,必須通過(guò)編程的方式解決問(wèn)題。注意:在評(píng)卷時(shí)使用的輸入數(shù)據(jù)與試卷中給出的示例數(shù)據(jù)可能是不同的。選手的程序必須是通用的,不能只對(duì)試卷中給定的數(shù)據(jù)有效。仔細(xì)閱讀程序的輸入、輸出要求,千萬(wàn)不要輸出沒(méi)有要求的、多余的內(nèi)容,例如:“請(qǐng)您輸入xx數(shù)據(jù):”。建議仔細(xì)閱讀示例,不要想當(dāng)然!程序處理完一個(gè)用例的數(shù)據(jù)后,立即退出(return 0),千萬(wàn)不要循環(huán)等待下一個(gè)用例的輸入。程序必須使用標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出,以便于機(jī)器評(píng)卷時(shí)重定向。對(duì)于編程題目,要求選手給出的解答完全符合ANSI C++標(biāo)準(zhǔn),不能使用諸如繪圖、Win32API、中斷調(diào)用、硬件操作或與操作系統(tǒng)相關(guān)的API。代碼中允許使用STL類(lèi)庫(kù)。注意: main函數(shù)結(jié)尾需要return 0。注意: 所有依賴的函數(shù)必須明確地在源文件中 #include <xxx>, 不能通過(guò)工程設(shè)置而省略常用頭文件。所有代碼放在同一個(gè)源文件中,調(diào)試通過(guò)后,拷貝提交該源碼。提交時(shí),注意選擇所期望的編譯器類(lèi)型。
題目描述:
給定三個(gè)整數(shù)數(shù)組
A = [A1, A2, ... AN],
B = [B1, B2, ... BN],
C = [C1, C2, ... CN],
請(qǐng)你統(tǒng)計(jì)有多少個(gè)三元組(i, j, k) 滿足:
1. 1 <= i, j, k <= N
2. Ai < Bj < Ck
?
【輸入格式】
第一行包含一個(gè)整數(shù)N。
第二行包含N個(gè)整數(shù)A1, A2, ... AN。
第三行包含N個(gè)整數(shù)B1, B2, ... BN。
第四行包含N個(gè)整數(shù)C1, C2, ... CN。
對(duì)于30%的數(shù)據(jù),1 <= N <= 100
對(duì)于60%的數(shù)據(jù),1 <= N <= 1000
對(duì)于100%的數(shù)據(jù),1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000
【輸出格式】
一個(gè)整數(shù)表示答案
【樣例輸入】
3
1 1 1
2 2 2
3 3 3
【樣例輸出】
27
資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms
請(qǐng)嚴(yán)格按要求輸出,不要畫(huà)蛇添足地打印類(lèi)似:“請(qǐng)您輸入...” 的多余內(nèi)容。
注意:
main函數(shù)需要返回0;
只使用ANSI C/ANSI C++ 標(biāo)準(zhǔn);
不要調(diào)用依賴于編譯環(huán)境或操作系統(tǒng)的特殊函數(shù)。
所有依賴的函數(shù)必須明確地在源文件中 #include \<xxx>
不能通過(guò)工程設(shè)置而省略常用頭文件。
提交程序時(shí),注意選擇所期望的語(yǔ)言類(lèi)型和編譯器類(lèi)型。
解題思路:
考試的時(shí)候我直接就用的暴力解法了。<( ̄ˇ ̄)/。。非暴力不會(huì)啊。。/(ㄒoㄒ)/~~。。:-(
//暴力解法
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N,sum=0;
cin>>N;
int *A = new int[N];
int *B = new int[N];
int *C = new int[N];
for(int i=0;i<N;i++)
cin>>A[i];
for(int i=0;i<N;i++)
cin>>B[i];
for(int i=0;i<N;i++)
cin>>C[i];
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
for(int q=0;q<N;q++)
if(A[i]<B[j]&&B[j]<C[q]&&A[i]<C[q])
sum++;
cout<<sum;
return 0;
}
//非暴力解法請(qǐng)等待更新(*/ω\*)
7.螺旋折線(程序設(shè)計(jì))(滿分19分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,必須通過(guò)編程的方式解決問(wèn)題。注意事項(xiàng)同上題
題目描述:
如圖p1.png所示的螺旋折線經(jīng)過(guò)平面上所有整點(diǎn)恰好一次。
對(duì)于整點(diǎn)(X, Y),我們定義它到原點(diǎn)的距離dis(X, Y)是從原點(diǎn)到(X, Y)的螺旋折線段的長(zhǎng)度。
例如dis(0, 1)=3, dis(-2, -1)=9
給出整點(diǎn)坐標(biāo)(X, Y),你能計(jì)算出dis(X, Y)嗎?
【輸入格式】
X和Y
對(duì)于40%的數(shù)據(jù),-1000 <= X, Y <= 1000
對(duì)于70%的數(shù)據(jù),-100000 <= X, Y <= 100000
對(duì)于100%的數(shù)據(jù), -1000000000 <= X, Y <= 1000000000
【輸出格式】
輸出dis(X, Y)
【樣例輸入】
0 1
【樣例輸出】
3
資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms
請(qǐng)嚴(yán)格按要求輸出,不要畫(huà)蛇添足地打印類(lèi)似:“請(qǐng)您輸入...” 的多余內(nèi)容。
注意:
main函數(shù)需要返回0;
只使用ANSI C/ANSI C++ 標(biāo)準(zhǔn);
不要調(diào)用依賴于編譯環(huán)境或操作系統(tǒng)的特殊函數(shù)。
所有依賴的函數(shù)必須明確地在源文件中 #include <xxx>
不能通過(guò)工程設(shè)置而省略常用頭文件。
提交程序時(shí),注意選擇所期望的語(yǔ)言類(lèi)型和編譯器類(lèi)型。
解題思路:
這個(gè)我直接考慮的是點(diǎn)的轉(zhuǎn)移。= ̄ω ̄=
例如:
如果一個(gè)點(diǎn)在第一象限(x,y),那么接下來(lái)它必然會(huì)轉(zhuǎn)移到第二象限(-x,y)
如果一個(gè)點(diǎn)在第二象限(x,y),那么接下來(lái)它必然會(huì)轉(zhuǎn)移到第三象限(x,-y+1)
特別的,如果該點(diǎn)在(-1,1),那么接下來(lái)它會(huì)轉(zhuǎn)移到x軸上(-1,0)
如果一個(gè)點(diǎn)在第三象限(x,y),那么接下來(lái)它必然會(huì)轉(zhuǎn)移到第四象限(-x-1,y)
如果一個(gè)點(diǎn)在第四象限(x,y),那么接下來(lái)它必然會(huì)轉(zhuǎn)移到第一象限(x,-y)
如果一個(gè)點(diǎn)在x軸正半軸(x,0),那么接下來(lái)它必然會(huì)轉(zhuǎn)移到第一象限(x,x)
如果一個(gè)點(diǎn)在y軸正半軸(0,y),那么接下來(lái)它必然會(huì)轉(zhuǎn)移到第二象限(y,y)
如果一個(gè)點(diǎn)在x軸負(fù)半軸(x,0),那么接下來(lái)它必然會(huì)轉(zhuǎn)移到第三象限(x,x+1)
特別的,如果該點(diǎn)在(-1,0),那么接下來(lái)它會(huì)轉(zhuǎn)移到原點(diǎn)(0,0)
如果一個(gè)點(diǎn)在y軸負(fù)半軸(0,y),那么接下來(lái)它必然會(huì)轉(zhuǎn)移到第四象限(-y,y)
接下來(lái)我貼一下代碼(づ??????)づ
//暴力解法
#include<bits/stdc++.h>
using namespace std;
int dist=0;
int dis(int x,int y)
{
if(x==0&&y==0) return 0;
else if(x==-1&&y==0)
{
dist=dist+1;
x=x+1;
}
else if(x>0&&y>0)
{
dist=dist+2*x;
x=-x;
}
else if(x<0&&y>0)
{
dist=dist+2*y-1;
y=-y+1;
}
else if(x<0&&y<0)
{
dist=dist-2*x-1;
x=-x-1;
}
else if(x>0&&y<0)
{
dist=dist-2*y;
y=-y;
}
else if(x==0&&y>0)
{
dist=dist+y;
x=-y;
}
else if(x<0&&y==0)
{
dist=dist-x-1;
y=x+1;
}
else if(x==0&&y<0)
{
dist=dist-y;
x=-y;
}
else if(x>0&&y==0)
{
dist=dist+x;
y=x;
}
//cout<<x<<" "<<y<<endl;
//cout<<dist<<endl;
dis(x,y);
}
int main()
{
int x,y;
cin>>x>>y;
dis(x,y);
cout<<dist;
}
//非暴力解法請(qǐng)等待更新(*/ω\*)
8. 日志統(tǒng)計(jì)(程序設(shè)計(jì))(滿分21分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,必須通過(guò)編程的方式解決問(wèn)題。注意事項(xiàng)同上題
題目描述:
小明維護(hù)著一個(gè)程序員論壇?,F(xiàn)在他收集了一份"點(diǎn)贊"日志,日志共有N行。其中每一行的格式是:
ts id
表示在ts時(shí)刻編號(hào)id的帖子收到一個(gè)"贊"。
現(xiàn)在小明想統(tǒng)計(jì)有哪些帖子曾經(jīng)是"熱帖"。如果一個(gè)帖子曾在任意一個(gè)長(zhǎng)度為D的時(shí)間段內(nèi)收到不少于K個(gè)贊,小明就認(rèn)為這個(gè)帖子曾是"熱帖"。
具體來(lái)說(shuō),如果存在某個(gè)時(shí)刻T滿足該帖在[T, T+D)這段時(shí)間內(nèi)(注意是左閉右開(kāi)區(qū)間)收到不少于K個(gè)贊,該帖就曾是"熱帖"。
給定日志,請(qǐng)你幫助小明統(tǒng)計(jì)出所有曾是"熱帖"的帖子編號(hào)。
【輸入格式】
第一行包含三個(gè)整數(shù)N、D和K。
以下N行每行一條日志,包含兩個(gè)整數(shù)ts和id。
對(duì)于50%的數(shù)據(jù),1 <= K <= N <= 1000
對(duì)于100%的數(shù)據(jù),1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000
【輸出格式】
按從小到大的順序輸出熱帖id。每個(gè)id一行。
【輸入樣例】
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3
【輸出樣例】
1
3
資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms
請(qǐng)嚴(yán)格按要求輸出,不要畫(huà)蛇添足地打印類(lèi)似:“請(qǐng)您輸入...” 的多余內(nèi)容。
注意:
main函數(shù)需要返回0;
只使用ANSI C/ANSI C++ 標(biāo)準(zhǔn);
不要調(diào)用依賴于編譯環(huán)境或操作系統(tǒng)的特殊函數(shù)。
所有依賴的函數(shù)必須明確地在源文件中 #include <xxx>
不能通過(guò)工程設(shè)置而省略常用頭文件。
提交程序時(shí),注意選擇所期望的語(yǔ)言類(lèi)型和編譯器類(lèi)型。
解題思路:
我下面給出的思路其實(shí)和我比賽時(shí)使用的思路有些出入,比賽時(shí)我的思路是,由于他要求的是某一時(shí)間段,那么利用二重循環(huán),將那一個(gè)時(shí)間段的起始時(shí)間逐漸后移,每次后移利用循環(huán)遍歷時(shí)間段內(nèi)的id的獲贊數(shù),若獲贊數(shù)大于k,則輸出。這樣后來(lái)發(fā)現(xiàn)會(huì)有重復(fù)輸出的問(wèn)題,于是又加入了flag作為標(biāo)志,若已輸出過(guò)則不再輸出。思路上是將id與ts擬合成了一條有許多端點(diǎn)的線段,之后用時(shí)間圍成的框框去逐漸后移。(*▽*)
這里呢,我的思路是先將id相同的進(jìn)行歸類(lèi),之后求出相同id的ts的最大值與次大值,做差若小于D且獲贊數(shù)大于等于K,即輸出id。o(* ̄▽?zhuān)?)ブ
//暴力解法
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N,D,K;
cin>>N>>D>>K;
int *id = new int[N];
int *ts = new int[N];
for(int i=0;i<N;i++)
cin>>ts[i]>>id[i];
for(int i=0;i<N;i++)
for(int j=i;j<N-1-i;j++)
if(id[j]>id[j+1])
{
int temp_1,temp_2;
temp_1=id[j];
id[j]=id[j+1];
id[j+1]=temp_1;
temp_2=ts[j];
ts[j]=ts[j+1];
ts[j+1]=temp_2;
}
for(int i=0;i<N;)
{
int max=ts[i],next_max=ts[i],j,zan=0;
for(j=i;id[i]==id[j];j++)
{if(ts[j]>max) max=ts[j];zan++;}
for(j=i;id[i]==id[j];j++)
if(ts[j]>next_max&&ts[j]<max) next_max=ts[j];
if((max-next_max)<D && zan>=K) cout<<id[i]<<endl;
i=j;
}
}
//非暴力解法請(qǐng)等待更新(*/ω\*)
9.全球變暖(程序設(shè)計(jì))(滿分23分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,必須通過(guò)編程的方式解決問(wèn)題。注意事項(xiàng)同上題
題目描述:
你有一張某海域NxN像素的照片,"."表示海洋、"#"表示陸地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......
其中"上下左右"四個(gè)方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。
由于全球變暖導(dǎo)致了海面上升,科學(xué)家預(yù)測(cè)未來(lái)幾十年,島嶼邊緣一個(gè)像素的范圍會(huì)被海水淹沒(méi)。具體來(lái)說(shuō)如果一塊陸地像素與海洋相鄰(上下左右四個(gè)相鄰像素中有海洋),它就會(huì)被淹沒(méi)。
例如上圖中的海域未來(lái)會(huì)變成如下樣子:
.......
.......
.......
.......
....#..
.......
.......
請(qǐng)你計(jì)算:依照科學(xué)家的預(yù)測(cè),照片中有多少島嶼會(huì)被完全淹沒(méi)。
【輸入格式】
第一行包含一個(gè)整數(shù)N。 (1 <= N <= 1000)
以下N行N列代表一張海域照片。
照片保證第1行、第1列、第N行、第N列的像素都是海洋。
【輸出格式】
一個(gè)整數(shù)表示答案。
【輸入樣例】
7
.......
.##....
.##....
....##.
..####.
...###.
.......
【輸出樣例】
1
資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms
請(qǐng)嚴(yán)格按要求輸出,不要畫(huà)蛇添足地打印類(lèi)似:“請(qǐng)您輸入...” 的多余內(nèi)容。
注意:
main函數(shù)需要返回0;
只使用ANSI C/ANSI C++ 標(biāo)準(zhǔn);
不要調(diào)用依賴于編譯環(huán)境或操作系統(tǒng)的特殊函數(shù)。
所有依賴的函數(shù)必須明確地在源文件中 #include <xxx>
不能通過(guò)工程設(shè)置而省略常用頭文件。
提交程序時(shí),注意選擇所期望的語(yǔ)言類(lèi)型和編譯器類(lèi)型。
解題思路:
這個(gè)題我認(rèn)為就是要解決兩件事,一個(gè)是如何從給出的圖中統(tǒng)計(jì)出海島的數(shù)量,另一個(gè)就是如何根據(jù)全球變暖前的圖推算出全球變暖后的圖。。。比較尷尬的是我在比賽時(shí)只解決了后一個(gè)問(wèn)題。。。。第一個(gè)不會(huì)。。。比賽結(jié)束后我得知可以用并查集的思想去解決這類(lèi)連通問(wèn)題(八連通,四連通。。。)問(wèn)題是我比賽前兩天剛剛看了并查集emmmmmmm真是虧死了。。。。。≧ ﹏ ≦
PS:電腦硬盤(pán)報(bào)廢了。。。。代碼后天更新吧{{{(>_<)}}}
—————————————————2018.4.2更新 分割線———————————————
//暴力解法請(qǐng)等待更新(*/ω\*)
//非暴力解法請(qǐng)等待更新(*/ω\*)
10. 乘積最大(程序設(shè)計(jì))(滿分25分)
注意事項(xiàng):?jiǎn)栴}的描述在考生文件夾下對(duì)應(yīng)題號(hào)的“題目.txt”中。相關(guān)的參考文件在同一目錄中。請(qǐng)先閱讀題目,必須通過(guò)編程的方式解決問(wèn)題。注意事項(xiàng)同上題
題目描述:
給定N個(gè)整數(shù)A1, A2, ... AN。請(qǐng)你從中選出K個(gè)數(shù),使其乘積最大。
請(qǐng)你求出最大的乘積,由于乘積可能超出整型范圍,你只需輸出乘積除以1000000009的余數(shù)。
注意,如果X<0, 我們定義X除以1000000009的余數(shù)是負(fù)(-X)除以1000000009的余數(shù)。
即:0-((0-x) % 1000000009)
【輸入格式】
第一行包含兩個(gè)整數(shù)N和K。
以下N行每行一個(gè)整數(shù)Ai。
對(duì)于40%的數(shù)據(jù),1 <= K <= N <= 100
對(duì)于60%的數(shù)據(jù),1 <= K <= 1000
對(duì)于100%的數(shù)據(jù),1 <= K <= N <= 100000 -100000 <= Ai <= 100000
【輸出格式】
一個(gè)整數(shù),表示答案。
【輸入樣例】
5 3
-100000
-10000
2
100000
10000
【輸出樣例】
999100009
再例如:
【輸入樣例】
5 3
-100000
-100000
-2
-100000
-100000
【輸出樣例】
-999999829
資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms
請(qǐng)嚴(yán)格按要求輸出,不要畫(huà)蛇添足地打印類(lèi)似:“請(qǐng)您輸入...” 的多余內(nèi)容。
注意:
main函數(shù)需要返回0;
只使用ANSI C/ANSI C++ 標(biāo)準(zhǔn);
不要調(diào)用依賴于編譯環(huán)境或操作系統(tǒng)的特殊函數(shù)。
所有依賴的函數(shù)必須明確地在源文件中 #include <xxx>
不能通過(guò)工程設(shè)置而省略常用頭文件。
提交程序時(shí),注意選擇所期望的語(yǔ)言類(lèi)型和編譯器類(lèi)型。