考察知識:模擬,列舉
演算法難度: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看...