noip2016 d2 考試總結

2021-08-20 03:09:41 字數 3207 閱讀 8268

非常絕望的一次測試。早上狀態很不好呀,t1卡了乙個多小時沒想出正解,後面就慌了。

以此部落格紀念一下這次悲傷的考試。

t1 組合數問題

實際上就是楊輝三角做dp,先預處理出組合數,mod k防止爆掉,然後用相同的三角形結構更新dp值,dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1],如果組合數mod k的值等於0,就++.

#include

#include

using

namespace

std;

int yh[2005][2005], dp[2005][2005];

int main ( )

for ( int kk = 1; kk <= t; kk ++ )

}

t2 蚯蚓

三個不上公升序列,第乙個存原始蚯蚓長度,第二個存切後xq,第三個存x-xq,先sort一邊q1,每次取三個佇列隊首切,切了後推入第

二、三個佇列,可以證明二三序列一定不上公升。

但是q2、q3的h2、h3和h1不一樣,h1存的是q1隊首,h2、h3存q1、q2隊首的前一項,因此判斷隊空是h2

#include

#include

#include

using namespace std;

#define ll long long

const int n = 7000005;

ll q1[n], q2[n], q3[n], h1, h2, h3, t2, t3, t1;

bool cmp ( const ll &a, const ll &b )

int judge ( )

int main ( )

else

if ( xx == 2 )

else

if ( xx == 3 )

a = a + (i-1)*q;

if ( i % t == 0 ) printf ( "%lld ", a );

ll x = a*u/v; ll y = a-x;

q2[++t2] = x-i*q;

q3[++t3] = y-i*q;//相當於標記了每次切的蚯蚓

}printf ( "\n" );

for ( int i = 1; i <= n+m; i ++ )

else

if ( x == 2 )

else

if ( x == 3 )

a = a + m

*q;//最後一起加上理應加的總時間,如果被切過k次實際加上的是(m-k)*q.

if ( i % t == 0 ) printf ( "%lld ", a );

}return

0;}

t3 憤怒的小鳥

做過的一道狀壓dp!!可是還是爆零了!!!

有點小難受。。

先預處理出任意兩點拋物線能打到的豬豬,狀壓儲存。再遍歷所有當前狀態,更新加上能打到的豬豬後的狀態。注意處理浮點數精度。

#include

#include

#include

#include

using

namespace

std;

double x[20], y[20];

int dp[1

<<18+1], f[20][20];

bool check ( int i, double a, double b )

int main ( )

for ( int i = 1; i <= n; i ++ )

f[i][i] = 1

<<(i-1);

dp[0] = 0;

for ( int i = 1; i <= n; i ++ )

for ( int j = 1; j <= n; j ++ )

for ( int s = 0; s < (1

dp[s] + 1 )

dp[s|f[i][j]] = dp[s] + 1;

printf ( "%d\n", dp[(1

<1] );

}return

0;}

可是有dalao用搜尋搞出來了!!據說還比狀壓快!!%%%

#include 

#include

#include

#include

#include

#define mem(a, b) memset (a, b, sizeof(a))

#define dd double

using namespace std;

const int n = 45;

const dd pd = 1e-10;

int t, n, m, ans, q[n];

dd fc[n][2];

bool vis[n];

struct point a[n];

const bool cmp (point aa, point bb)

dd abss (dd a)

void dfs (int

x, int num1, int num2, int

use)

if (use >= ans) return;

dd yy;

for (int i = 1; i <= num2; i++)

}int now, nxt = num2 + 1;

dd xx, cc;

for (int i = 1; i <= num1; i++)

q[num1 + 1] = x;

vis[num1 + 1] = 0;

dfs (x + 1, num1 + 1, num2, use + 1);

}int main ()

sort (a + 1, a + n + 1, cmp);

mem (vis, 0);

mem (fc, 0);

mem (q, 0);

q[1] = 1;

if (m != 1) ans = n;

else

dfs (2, 1, 0, 1);

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

}return

0;}

下個星期要翻身!!繼續努力!!

蚯蚓 NOIP2016D2T2 單調佇列

本題中,我們將用符號 c 表示對c向下取整,例如 3.0 3.1 3.9 3。蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現在共有n只蚯蚓 n為正整數 每只蚯蚓擁有長度,我們設第i只蚯蚓的長度為a i i 1,2,n 並保證所有的長度都是非...

noip普及2016總結

事實上,我在去年也報了noip的普及組.奈何當年太稚嫩,不懂騙分,只有210.以上都是前話,滿滿的都是不堪回首的黑歷史.1.概述 考前算是做了比較充分的準備吧,至少在每天晚自習都會抽幾分鐘的時間複習一下 事實上功課也並沒有怎麼耽誤 然後就是臨場發揮還是較好吧,可以根據自己的能力與資料的大小寫出合適的...

NOIP2016 D2 T3 憤怒的小鳥

看了題解之後知道,是狀壓dp。一 首先預處理乙個 2 n 次方的fpow陣列 fpow 0 1 for rint i 1 i 19 i fpow i fpow i 1 1 二 然後預處理乙個sta i j 表示經過o,i,j三點的那條拋物線經過的所有的點的狀態,處理時要注意 1 拋物線的 a 值大於...