題目
這是$noip$模擬賽(---)
t1:想的太複雜了,開頭$1$個小時認為此題不可做,所以到最後也懶得打$o(n)$的方法,只打了$o(n^2)$的東西
我的做法:
先把資料的圖建出來,然後檢視對於每個列是否沒產生矛盾
#include#includeview code#include
#include
#include
#include
using
namespace
std;
inline
intread()
while(c>='
0'&&c<='9')
return f*ans;
}int vis[300001],n,has[300001],a[300001],b[300001],c[300001],lb[300001],lc[300001
];struct
nodex[
1010001
];int ma[300001
];int cnt,head[300001
];void add(int u,int
v)int ba[300001],ca[300001
],ans;
int bb[101],cc[101],minn=2
<<30-1,aa[101],book[101
];void dfs(int
pos)
}}void
check()
}sort(aa+1,aa+aa[0]+1
); sort(bb+1,bb+bb[0]+1
); sort(cc+1,cc+cc[0]+1
);
for(int i=1;i<=aa[0];i++)
return
; }
minn=min(minn,n-ans);
return;}
void dfs1(int
pos)
book[pos]=1
; dfs1(pos+1
); book[pos]=0
; dfs1(pos+1
); book[pos]=0;}
intmain()
for(int i=1;i<=n;i++) add(i,i+n),add(i,i+2*n);
for(int i=1;i<=n;i++)}}
cout
<
return0;
}/*91 3 5 9 8 6 2 4 7
2 1 5 6 4 9 3 4 7
3 5 1 9 8 6 2 8 7
*/
別人的做法:
垃圾搜尋。其實要抓住第一列是不重複的數這一特點去解題。若第$2,3$列有沒有出現而在第$1$行出現的時候,則這一列必須刪去,有可能又有不存在的數,就再去刪除,時間複雜度$o(n)$,因為每個列只會最多刪去一次。並且可以去先按照第一行排序,這樣就方便查詢了。
正確性:因為有小於$0$的就必有$\leq 2$的數,而這就恰好可以去進行搜尋了,但是如果去先統計$\leq 2$的點,就會產生衝突,因為不知道該刪哪個
t2:好像以前講過類似的題,但是卻不會寫,自己的暴力也還掛了,看到$n \leq 9$想到什麼,搜尋 狀壓啊,但在考場上還不會寫。
我們設$dp(i,s)$表示已經要決策到第i條邊,點的集合劃分為$s$($n!$狀壓),每個點都能在當前的集合中互相到達的概率是多少。
所以分兩種情況討論:
若第i條邊是好的,則$dp(i,合併當前的2個集合)=dp(i-1,s)*(1-)$
若是不好的,則$dp(i,s)=dp(i-1,s)*(p_i)$
主要是怎麼去寫那個$s$
#include#includesyft3:斜率優化$dp$,但是沒有學,所以留坑待補#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,x,y) for(register int i=(x);i<=(y);i++)
#define dwn(i,x,y) for(register int i=(x);i>=(y);i--)
#define maxn 10
#define maxm 90
#define maxs 363000
using
namespace
std;
intread()
void write(int
x)
if(x<0)x=-x,putchar('-'
);
while(x)ch[++f]=x%10+'
0',x/=10
;
while(f)putchar(ch[f--]);
putchar('\n
');}int
mul[maxn],tmp[maxn],tmp2[maxn],eu[maxm],ev[maxm],n,m;
long
double ew[maxm],p[2
][maxs];
int gx(int x,int y)
void bac(ints)}
intgets()
returns;}
/*int maxs;
void getst(int x)
if(yes[s])
rep(i,
1,n)tmp2[i]=i;
int nows=gets();
p[0][nows]=1.0
;
//cout
,m)
if(ss>tt)swap(ss,tt);
rep(j,
1,n)
int nxt=gets();
//cout<
//rep(j,1,n)cout/
cout
p[now][u]+=p[pre][u]*ew[i];
//cout
}double ans=p[m&1][0
]; printf(
"%.3lf
",ans);
return0;
}
$score:60+40+40=140$這分數是要完的節奏啊
接下來的是cxm講課的幾道題
t1:平面上有$n \leq 3 \times 10^5$的店,座標$\leq 10^5$,點上有能量,且只能往直右或直上走,每走一次需要有$k$的能量($k \leq 10^3$),問最大能量
我們只要將怎樣去快速轉移達到就行了,所以我們採取從下到上,從左往右的順序去$dp$,每一行內的答案可以去記錄,每一列的答案可以用個表去更新,記錄
t2:有$n$個與$m$個單詞$(\leq 3\times 10^5)$,每個單詞$30$個字元,問每個單詞的暴力查詢次數($you$ $guess$ 這是什麼意思)
建一棵$trie$樹,若$m$中的乙個單詞$p$在$n$中沒有出現過,那麼答案就很好統計,否則,我們可以都掃瞄過一遍,然後看一看是$n$中第幾個單詞,然後在建一棵$trie$樹,維護一下歷史版本的答案,每次統計完答案在加入字串,最後一塊輸出即可
2017 3 18考試記錄
雖然只做出了乙個題,但是第二題跟第三題也有思路,就是單位時間解題效率不高導致沒有做完,所以以後要多做題來加強一下。第一題 題目要求看能否讓所有排隊的人都能正好買到票拿到找零 分析 運用新學的stl中的map容器,將面值與數量存入容器中 注 當收到100要找零75時,應該注意找零順序,有50就給50和...
2019 7 30考試記錄
機房模考 2019.7.30 今天考了三道題,算是題量較小,所以在考場上時間挺充裕,寫下了一段簡單的記錄。在引用的基礎上增加一些考試後講題的感悟吧。這道題乍一看是個斯特林數,但是慢慢審題,會發現它和斯特林數的區別 座位不能連續放女生 男生預設填充 那就有點像兔子生殖的那題,也就是在乙隻兔子生下後不能...
2019 8 3考試記錄
題目不難,還剩乙個小時,寫下記錄 寫於考場 現在看來好樂觀233 題目確實不難,但是打的有多差233 難受 字串模擬。不看下面的描述,我還以為是道裸kmp。但是更貼心的是,模式串可以分開 笑哭 應該就是反著掃一遍 字典序要大 模式串匹配了就存一下陣列下標。如果存下來的下標個數等於模式串長度那就是匹配...