【心得體會】11.30-12.6
阿新 • • 發佈:2020-12-08
Tips
1、對於有精度要求的題目,注意判斷ESP=1e-5,以免出錯
總結
1、基礎的貪心DP和搜尋題要鞏固,爭取細節不出錯,快速出題。
2、加強博弈論的學習。
本週題單
USACO
USACO Training 2.1.4 Healthy Holsteins
簡單搜尋
訓練賽補題
Ray Tracing(CF)
題解連結:(補)
2020年廣東工業大學第十屆文遠知行杯新生程式設計競賽(補題)
A、肥豬的鋼琴床
題目連結:https://ac.nowcoder.com/acm/contest/9692/A
dp,
a[i]==0 f[i][0]=min(f[i-1][0],f[i-1][1]); f[i][1]=min(f[i-1][1],f[i-1][2])+1; f[i][2]=f[i-1][2]; a[i]==1 f[i][0]=min(f[i-1][0],f[i-1][1])+1; f[i][1]=min(f[i-1][1],f[i-1][2]); f[i][2]=f[i-1][2]+1;
F、合併石子
題目連結:https://ac.nowcoder.com/acm/contest/9692/F
一共有 n堆石子,故合併時產生 (n-1)!種情況;
第 i次合併時共有n+1−i堆石子,故選取兩堆的期望和為 2n/(n+1−i)
故消耗體力總和為 (n-1)!*(2n/2+2n/3+...+2n/n)
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define M 1000000007 ll ksm(ll a,ll p){ ll res=1; while(p){if(p&1){res=res*a%M;}a=a*a%M;p>>=1;}return res; } int i; ll n,res,tmp; int main(){ scanf("%d",&n); for(i=2;i<=n;i++){ res+=ksm(i,M-2)*n%M; } for(i=1;i<=n-1;i++){ res=res*i%M; } printf("%lld",res*2%M); }
C、母牛的俄羅斯輪盤賭
題目連結:https://ac.nowcoder.com/acm/contest/9692/C
思路:類似巴士博弈的思路,我們可以想到(想不到)第k槍和第k+5槍的結果是一樣的,故只要計算出前五槍的結果就好。
#include <bits/stdc++.h> #define ll long long #define ull unsigned long long using namespace std; inline int read(){ int f=0,num; char ch; while(ch=getchar(),!isdigit(ch))if(ch=='-')f=1;num=ch-'0'; while(ch=getchar(), isdigit(ch))num=num*10+ch-'0'; return f?-num:num; } int t; ll n; int main(){ cin>>t; while(t--){ cin>>n; if(n==1||n==3||n==4)cout<<"Pig"<<endl; else if(n==2)cout<<"Cow"<<endl; else if((n-1)%5==0||(n-3)%5==0||(n-4)%5==0) cout<<"Pig"<<endl; else if((n-2)%5)cout<<"Cow"<<endl; else if(n%5==0) cout<<"Pig"<<endl; else cout<<"Cow"<<endl; } return 0; }