本文共 2871 字,大约阅读时间需要 9 分钟。
A
题目大意
说来说去,其实就是求CCPC的个数
题解
思维题,其实个人觉得有点难度,首先先遍历一遍,找到CCPC有几个,然后我们把CP给掐掉 对,掐掉"CP" 然后有几个特别情况 “CCC” “CPC” “CCP” 这些都是可以通过增加一个字符 获得CCPC的
#includeusing namespace std;const int maxn=2e5+10;char s[maxn];int t,n;int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>t; while(t--){ cin>>n; cin>>s; int ans=0; for(int i=0;i
B
题目大意
有三种颜色,两个不同的颜色可以合并,问最后怎么合,能让最后剩余的球球最少
题解
引入一个概念:三种颜色分别用0,1,2表示。题意所示合并方式即01合并等于2,02合并等于1,12合并等于0。该合并方式可以用公式表示: 0 ^ 1 ^ 3 = 2 0 ^2 ^ 3 = 1 1 ^2 ^ 3 = 0
特殊情况就是全部都是同一个颜色,此时直接特殊处理输出长度即可
另外,需要进行奇偶划分,奇数个起初就和0异或就好了 对于偶数的话,要与3进行异或
关于相关证明可以参考:https://blog.csdn.net/u013368721/article/details/78763599
#includeusing namespace std;const int maxn=5e3+10;char s[maxn];int n;int main(){ ios::sync_with_stdio(false); cin.tie(0); while(cin>>s){ n=strlen(s); set st; for(int i=0;i
C
题目大意
小明挖矿只能往右或者往下走,如果遇到障碍了就需要一个传送门传送
题解
我们只需要判断每个金币点的右边和下边是否已经是障碍物,如果都是障碍物的话,那小明肯定就不能继续工作了,此时就需要一个传送门
我们可以初始化地图全为障碍物,就可以直接判断金币点的下方和右方了
#includeusing namespace std;const int maxn=1000+10;char mp[maxn][maxn];int n,m;int main(){ ios::sync_with_stdio(false); cin.tie(0); while(cin>>n>>m){ memset(mp,'#',sizeof(mp)); for(int i=1;i<=n;i++) cin>>mp[i]+1; int ans=0,cnt=0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(mp[i][j]=='.'){ ++cnt; if(mp[i+1][j]!='.'&&mp[i][j+1]!='.') ++ans; } } } if(cnt<=1) cout<<0<
D
题目大意
让两个土堆最后相同,问最少需要多少体力
题解
当然能不移动是最好的,要移动的话也得要从相邻的移过去
我们可以用当前第一堆先减去第二堆 算出一个差值,这个差值就是相邻堆需要给的(如果差值为负值的话) 如果差值为正值的话,我们就给到下一堆 为下下堆而作准备
#includeusing namespace std;const int maxn=1e5+10;int a[maxn],t,n;typedef long long ll;int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++){ int x; cin>>x; a[i]-=x; } ll ans=0; for(int i=1;i<=n;i++){ ans+=abs(a[i]); a[i+1]+=a[i]; } cout< <
E
题目大意
给你v,l,n,m代表有v个速度,下一行分别给出v个速度,l长的路,n个随机地点随机改变速度的加油站,m个随机地点宝藏。问拿到所有宝藏的时间期望
题解
因为所有东西几乎随机的,所以我们可以求平均路程和平均速度,然后用平均路径除以平均速度就可以得到时间了 平均速度很好求,但是路径的话注意一下:
有m个随机宝藏 可以将路径分成(m+1)个地点 但是我们从一端走过去的话,并不需要把(m+1)个点全部走完 我们只需要走m个即可 即总长度*( m / ( m + 1 ) ) 最后用doule存一下即可
#includeusing namespace std;int v,s,n,m;typedef long long ll;int main(){ while(cin>>v>>s>>n>>m){ double vv=0.0; for(int i=1;i<=v;i++){ int x; cin>>x; vv+=x; } vv/=v; double ss=s*(m*1.0/(m+1)); printf("%.10f\n",ss/vv); } return 0;}
学如逆水行舟,不进则退
转载地址:https://chocolate.blog.csdn.net/article/details/101417699 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!