NOIP2011提高組DAY1題解

2021-08-26 05:13:04 字數 1757 閱讀 5147

考察知識:模擬,列舉

演算法難度:x 實現難度:x

分析:直接讀入資料然後判斷就可以了,真的沒有難度

**:

#includeconst int maxn=10005;

int n,a[maxn],b[maxn],g[maxn],k[maxn],x,y;

int main()

printf("%d\n",ans);

return 0;

}

考察知識:列舉+分析

演算法難度:*** 實現難度:xx+

分析:我們記:cnt[i][j]表示(1...j)色調為i的客棧數量 

pre[i]表示i前面第乙個最低消費不超過於i的座標 

那麼我們只需要列舉第二個客棧,假設是在i,顏色為col[i],然後統計ans+=cnt[col[i]][pre[i]]

解釋:我們選擇了第二個客棧,第乙個客棧座標應該小於第二個,而且要有咖啡店,所以座標應該小於等於pre[i]

注意:pre[i]的求法;如果i的最低消費滿足,則pre[i]=i-1

**:

#includeconst int maxn=200005;

int n,k,p,col[maxn],p[maxn];

int cnt[52][maxn],pre[maxn];

long long ans=0;

//cnt[i][j]表示(1...j)色調為i的客棧數量

//pre[i]表示i前面第乙個最低消費不超過於i的座標

int main()

考察知識:模擬,搜尋+剪枝

演算法難度:***x 實現難度:***x

分析:首先說明一下題意:

a.每次移動只能左移或右移而且只能移動一格

b.操作次數要嚴格等於n步

解決方法:

a.我們先定義乙個結構體,實現方塊掉落,方塊消除等功能

b.然後開始搜尋,直到搜尋完畢,這道題剪枝不是非常好想,提供乙個剪枝:

如果要向左移但是左移的地方有方塊那麼剪枝,因為在這種情況下左移,右移等價,而右移字典序小

細節都在**中(注意巨集定義):

#include#include#include#includeusing namespace std;

#define f(var,l,r) for(int var=l;var<=r;var++)

struct mayan_puzzle

void fall()

} }bool re_move()

f(i,0,4) f(j,0,6)

if(r2[i][j])

} if(ret) fall();

return ret;

} void operate(int x,int y,int k)

bool empty()

void print()putchar('\n');

}}my;

int n,k,x[6],y[6],g[6],findans;

void dfs(int dep,mayan_puzzle t)

mayan_puzzle t_;

f(i,0,4) f(j,0,6) if(t.g[i][j])

} if(i>0&&!t.g[i-1][j])

} }}int main()

dfs(1,my);

if(findans) else printf("-1\n");

return 0;

}

NOIP2011 提高組Day 1題解

總結 第一天的三道題除了第三題 長度有點超過我的接受範圍之外,一二題難度還是比較適中滴,只可惜第二題我打的暴力忘了小小的優化一下,結果沒得全分,有點難過了。這道題的思路就是輸入過後倒著尋找符合條件的地毯,因為越後放的地毯在越上面 這道題我們先列舉第二個客棧的位置,然後去倒推第乙個客棧的位置。當時做這...

noip2011提高組day1第1題 c 實現

為了準備乙個獨特的頒獎典禮,組織者在會場的一片矩形區域 可看做是平面直角座標系的第一象限 鋪上一些矩形地毯。一共有 nn 張地毯,編號從 11 到nn。現在將這些地毯按照編號從小到大的順序平行於座標軸先後鋪設,後鋪的地毯覆蓋在前面已經鋪好的地毯之上。地毯鋪設完成後,組織者想知道覆蓋地面某個點的最上面...

noip2011提高組 計算係數

這個題第一眼 楊輝三角。其實還有個高大上的名字 叫。二項式定理 我才高一qaq 後面這個名字不知道啊 不過知道楊輝三角也夠了 1 1a 0 b 0 1 1 1a 1b 1 2 1 1a 2 2ab 1b 2 1 3 3 1 只不過這道題多了乙個x與y項的係數 無所謂 用整體思想 將ax看成u by看...