【心得体会】11.30-12.6
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;
}