2014第六屆華為創新杯程式設計大賽初賽解題報告
還是忍不住想吐槽華為,吐槽華為舉辦的這個比賽。
第一場是一星比賽,水題。不過比賽為什麼在考試系統上?華為不愧是世界500強企業,招聘考試能走到機試的人數應該在百人左右吧。第一次舉辦如此大規模 的比賽還是比較緊張,參賽選手要排排隊慢慢來。不過交一個題目為什麼要等半個多小時才能等到結果啊?搞的人家也好緊張呀。
第一題
第一題是雞兔同籠問題,第二題也算是個模擬吧,一星的還勉強可以接受。
樣例
雞和兔的個數,雞和兔腿的總和
輸出:
如果無解輸出0 0 0
有解輸出 1 雞的個數 兔的個數
60分程式碼(滿分60):#include<iostream>
using namespace std;
int h,f,p,r,m;
int main()
{
while (cin>>h>>f)
{
p=r=m=0;
if (f>=2*h&&(f-2*h)%2==0&&(4*h>=f)&&(4*h-f)%2==0)
{
m=1;
r=(f-2*h)/2;
p=(4*h-f)/2;
}
cout<<m<<' '<<p<<' '<<r<<endl;
}
return 0;
}
/*
2 8
2 4
*/
第二題:
直接模擬即可。
100分程式碼(滿分100):
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
char str[1000005];
struct node
{
char add[10];
int len;
char val[1005];
}nod[1005];
int cmp(node p1,node p2)
{
if(strcmp(p1.add,p2.add)<=0) return 1;
return 0;
}
int main()
{
int i,len,j;
int n;
char add[10];
char val[1005];
int leng;
while(cin>>str)
{
n=0;
len=strlen(str);
int flag=0;
for(i=0;i<len;)
{
int q=0;
//cout<<i<<" i"<<endl;
if(len-i<8)
{
flag=1;
break;
}
for(j=i;j<=i+7;j++)
{
add[q++]=str[j];
}
add[q]='\0';
i+=8;
if(len-i<4)
{
flag=1;
break;
}
leng=0;
for(j=i;j<=i+3;j++)
{
int cnt=0;
if(str[j]>='0'&&str[j]<='9')
cnt=str[j]-'0';
else cnt=str[j]-'a'+10;
leng=leng*16+cnt;
}
i+=4;
leng*=2;
if(len-i<leng)
{
flag=1;
break;
}
q=0;
for(j=i;j<i+leng;j++)
{
val[q++]=str[j];
}
val[q]='\0';
i+=leng;
strcpy(nod[n].add,add);
//cout<<nod[n].add<<endl;
nod[n].len=leng/2;
strcpy(nod[n].val,val);
n++;
}
sort(nod,nod+n,cmp);
char ss[1005]="101";
for(i=0;i<n;i++)
{
if(strcmp(ss,nod[i].add)!=0)
{
strcpy(ss,nod[i].add);
}
else
{
flag=1;
break;
}
}
if(flag==1)
{
puts("msgerr");
continue;
}
//cout<<nod[1].len<<endl;
//cout<<n<<endl;
for(i=0;i<n;i++)
{
printf("%s%04x%s",nod[i].add,nod[i].len,nod[i].val);
}
printf("\n");
}
return 0;
}
第二場就有意思了,先看下題面。
一看就是個最水的dfs,簡直侮辱智商。然後開始敲了,交了之後只有70分,慘淡的隊友們紛紛爆零 ,好難過。一定是陣列開小了,改大再來一發,靠,說好的不限時間、不限空間呢?記憶體超限又是怎麼個意思? 出題人語文是數學老師教的麼?於是重新讀題,樣例裡說好的4行4列,地圖給的7列是個什麼意思?出題人的數學是體育老師教的麼 ?算了,重新讀題。國慶放假出去看朋友,一天走一個格子,咦,國慶七天假,難道七步之內走不到的 就不算?抱著這個疑問改了程式碼,交了一發,以為會100分,沒想到又是70分。我真是個逗比。不過 華為比賽打到這一步,心理、精神都出現了某些奇怪的徵兆,到底怎樣才是常人的思維啊?到底怎樣 才是華為的思維啊?我又重新審視題目了。發現題面上有一句話:“只能向上下左右方向其中一個方向走”會不會只能走 直線?當時我就凌亂了。真是神題。。。不過沒有時間寫了。好難過。有個同學寫的printf(“Y\n”),這樣也有60分,0分狗表示好難過。結束戰鬥心碎了一地。結果過了兩天發簡訊來說我100分,可以進最後一輪了,華為你是在逗我麼?
100分程式碼(滿分100):
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
int n,m;
char mp[1505][1505];
int visi[1505][1505];
int stax,stay,enx,eny;
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int flag;
void dfs(int cx,int cy,int step)
{
if(step>8) return;
if(flag) return;
if(cx==enx&&cy==eny)
{
flag=1;
return;
}
int px,py;
for(int i=0;i<4;i++)
{
px=cx+dir[i][0];
py=cy+dir[i][1];
if(px>=0&&px<n&&py>=0&&py<m&&!visi[px][py]&&(mp[px][py]=='-'||mp[px][py]=='H'))
{
visi[px][py]=1;
dfs(px,py,step+1);
visi[px][py]=0;
}
}
}
int main()
{
int i,j;
while(cin>>n>>m)
{
memset(visi,0,sizeof(visi));
//memset(cnt,0,sizeof(cnt));
flag=0;
for(i=0;i<n;i++)
cin>>mp[i];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(mp[i][j]=='B')
{
stax=i,stay=j;
}
else if(mp[i][j]=='H')
{
enx=i;
eny=j;
}
}
}
//cout<<stax<<" "<<stay<<endl;
//cout<<enx<<" "<<eny<<endl;
visi[stax][stay]=1;
dfs(stax,stay,1);
if(flag) printf("Y\n");
else printf("N\n");
}
return 0;
}
/*
4 7
--##---
B-----H
#---#--
-------
4 9
--##-----
B-------H
#---#----
---------
4 8
--##----
B------H
#---#---
--------
1 5
-B-H#
4 7
--##---
B-----H
#---#--
-------
*/
第三場是初賽最後一場,好吧估計腦袋正常的都被刷了,所以不怎麼卡。看到題面麻將我笑了,也是 個簡化的dfs,明明是原題還要改成成都麻將。。第一次交的時候沒有看到輸出的格式,如果輸出有3 個子的話,輸出3一行,然後1T4D5W類似的全部佔一行。其實當時就可以拿133分的。題面說的是規則 二里面的所有的牌只有兩種型別,就可以胡牌了,然後前面又說三種型別:T,D,W。然後就陷入了 怪圈,這個不叫麻將吧,但是題面說的也太含糊了。他說的意思是隻能是2+4*3類似的胡,不能七對 以及其他的。但最後最讓人無語的是第二組資料應然在自己在輸入的時候加了一個判斷如果有張牌 >=5,就輸出0,這就是題面所謂的保證資料合法性,好吧,我還是太年輕了。
147分程式碼(滿分160):
#include<cstdio>
#include<cstring>
const int maxn=27;
const char s[]="TDW";
int v[maxn],flag,ans[maxn],num;
int hash(int k,int ch)
{
return k-1+(strchr(s,ch)-s)*9;
}
void dfs(int dep)
{
if (dep==5)
{
flag=1;
return;
}
else if (dep==0)
{
for (int i=0;i<maxn;i++)
if (v[i]>=2)
{
v[i]-=2;
dfs(dep+1);
v[i]+=2;
}
}
else if (dep<=4)
{
for (int i=0;i<maxn;i++)
{
if (v[i]>=3)
{
v[i]-=3;
dfs(dep+1);
v[i]+=3;
}
if ((i>=0&&i+2<9)||(i>=9&&i+2<18)||(i>=18&&i+2<27))
if (v[i]&&v[i+1]&&v[i+2])
{
v[i]--,v[i+1]--,v[i+2]--;
dfs(dep+1);
v[i]++,v[i+1]++,v[i+2]++;
}
}
}
}
int checkerr()
{
for (int i=0;i<maxn;i++)
if (v[i]>4)
return 1;
return 0;
}
int main()
{
int k;
char ch;
while (~scanf("%d%c",&k,&ch))
{
memset(v,0,sizeof(v));
v[hash(k,ch)]++;
for (int i=1;i<13;i++)
{
scanf("%d%c",&k,&ch);
v[hash(k,ch)]++;
}
num=0;
if (!checkerr())
for (int i=0;i<maxn;i++)
if (v[i]<4)
{
flag=0;
v[i]++;
dfs(0);
v[i]--;
if (flag)
ans[num++]=i;
}
printf("%d\n",num);
if (num==0) continue;
for (int i=0;i<num;i++)
printf("%d%c",(ans[i])%9+1,s[ans[i]/9]);
putchar('\n');
}
return 0;
}
華為,不愧是世界五百強,場場比賽驚心動魄,虐人心脾。我等弱渣果然沒資格走進這樣高大上的企 業。
華為債見,你不僅僅是五百強!
相關文章
- 第六屆華為創新杯程式設計大賽-進階1第1輪程式設計
- 第六屆華為創新杯程式設計大賽-進階1第3輪程式設計
- 2014第六屆華為程式設計大賽初賽第四輪程式設計
- 2014第六屆華為程式設計大賽初賽第一輪程式設計
- "華為杯"華南理工大學程式設計競賽(同步賽) H題解 還沒寫程式設計
- 河南理工大學程式設計(ACM)大賽解題報告程式設計ACM
- NYNU ACM 藍橋杯選拔賽 解題報告ACM
- 第二屆隴劍杯 初賽全WP
- QZEZ第一屆“飯吉圓”杯程式設計競賽程式設計
- 第六屆藍橋杯省賽CC++B組C++
- 第六屆·2024 MindSpore 量子計算駭客松熱身賽賽題解讀
- 2014年藍橋杯程式設計大賽山東省賽區成績公佈程式設計
- 牛客競賽,GDDU第十屆文遠知行杯新生程式設計競賽,摸魚記(BDEIKL題解,補G,ACFHJ)程式設計
- 第二屆“重科杯”重慶科技大學程式設計競賽(同步賽)ptlks的題解(2024.5.18)程式設計
- 第七屆藍橋杯大賽個人賽省賽(軟體類)真題 C語言A組 1C語言
- 第二屆資料安全大賽“數信杯”資料安全大賽 WP
- HDU-2017"百度之星"程式設計大賽-初賽(B)-補題程式設計
- 藍橋杯2014年第五屆決賽C_C++程式設計本科B組C++程式設計
- 第十五屆浙江大學寧波理工學院程式設計大賽(同步賽)程式設計
- 第十五屆藍橋杯大賽軟體賽省賽 C/C++ 大學 A 組C++
- 22藍帽杯初賽
- 第十五屆藍橋杯軟體賽省賽C/C++B 組題解C++
- 第十四屆藍橋杯大賽軟體賽省賽Python 《三國遊戲》Python遊戲
- “九韶杯”河科院程式設計協會第一屆程式設計競賽題目分析以及總結程式設計
- 100+隊伍逐鹿大獎,創新程式設計挑戰賽秋季賽圓滿落幕程式設計
- 第九屆藍橋杯大賽個人賽決賽(軟體類本科B組)做題筆記 mit zwei Antworten筆記MIT
- 2020年百度之星程式設計大賽-初賽二程式設計
- 2020 年百度之星程式設計大賽 - 初賽三程式設計
- 程式設計大賽WBS程式設計
- 華中農業大學第十三屆程式設計競賽 題解程式設計
- 藍橋杯大賽——驅動程式
- 2024年數字中國創新第四屆紅明谷杯網路安全大賽WP
- 第十屆藍橋杯C++國賽B組部分題解(假題解)C++
- 中國計量大學現代科技學院第四屆“中競杯”程式設計校賽(同步賽) F.爬塔(DP)程式設計
- 百度第二屆“文心杯”創業大賽正式啟動,設5000萬元特別大獎創業
- 2014年第五屆藍橋杯省賽試題及詳解(Java本科C組)Java
- 山東省第六屆ACM大學生程式設計競賽-Single Round Math(大數除法)ACM程式設計
- “匯新杯”新興科技+網際網路創新大賽