首页 > 其他分享 >codeforces ECR 74 Standard Free2play(找规律)

codeforces ECR 74 Standard Free2play(找规律)

时间:2022-12-12 19:38:26浏览次数:40  
标签:主角 Free2play int codeforces Standard ++ continue ans else


题目大意:

有一座山,山有h层。每一层都有平台。有些平台凸出来,有些平台是凹进去。主角一开始站在h层平台,他的目标是落到第0层。主角能够下山的方式只有一种:让高为x的平台和高为x-1平台的状态取反从而往下跳。状态取反的意思是:原来是凸凹状态互换。主角每次下落层数必须小于等于2,否则摔死。主角还可以买魔法石,魔法石可以让任意一个石头的状态取反。

问:主角最少需要购买多少个魔法石能够掉到第0层。

解题思路:

我们假设主角一直跳,跳到中间某一层同时此时距离地面的高度非常高。之后我们画连续的1,观看主角的跳下去是否可能摔死。然后我们发现,其实主角每次跳相当于距离-2。然后当连续的1有偶数个时候我们保证主角不会摔死,具体可以数学证明或者画图证明。这里我们从数学来看。主角:跳的距离相当于1+2x那么主角必定最后落在第奇数格,所以主角稳稳地落在最后一格。而当有奇数个1时,主角肯定不能落在最后一格肯定会摔死。所以很自然地,我们可以找到规律,当中间有奇数串时,需要一个魔法石。但是若主角跳到最后一格,且最后一格距离为1时,无论最后一串长度是多少,我们都能落地,这是第一个特判。另外我们也需要考虑主角在第一次跳时候,它是相反为连续偶数个1才会摔死。

废话:

首先找规律的题目,我们必须多去动手尝试,那么是不是完全没套路呢?其实也不是我们需要构造出合理的样例才是突破口,合理的样例比如这里是多个连续排,其它的,我们也可以多动动手比如会不会是奇数啊,偶数啊,质数啊。

在图论中,会不会是一棵树,会不会是一条链,这些常用的样例。

#include <bits/stdc++.h>
#define itn int
using namespace std;
int main(){
int cas;cin>>cas;
while(cas--){
int h,n;cin>>h>>n;
vector<int> mv;
for(int i=0;i<n;i++){
int t;cin>>t;
mv.push_back(t);
}
int ans=0;
int j;
if(h==1){
cout<<0<<endl;
continue;
}
for(int i=0;i<n;i=j){
j=i;
int len=1;
j++;
while(j<n&&(mv[j]==mv[j-1]-1) ){
len++;
j++;
}

if(j==n){
if(mv[n-1]==1)continue;
if(i==0){
if(len%2==0)ans++;
else continue;
}else{if(len%2==1)ans++;
else continue;
}
}
else if(i==0){
if(len%2==0)ans++;
else continue;
}
else if(len%2==1)ans++;
else continue;
}
cout<<ans<<endl;
}
return 0;
}

 

标签:主角,Free2play,int,codeforces,Standard,++,continue,ans,else
From: https://blog.51cto.com/u_15910522/5931527

相关文章

  • codeforces 596 div2 p-binary(数位复杂度压缩)
    题目大意:已知: 同时  ,问k最少为多少。解题思路:首先,我们看到这里有2的n次方,我们考虑能不能从二进制表示下手,我们通过移位来表示:得到公式 ,很直接的想法是我们让k从小到大......
  • codeforces 594 div2 Ivan the Fool and the Probability Theory (DP 推公式)
    题目大意:现在有n*m个格子。然后我们可以对这些格子染上黑色或者白色。规定每个格子最多允许相邻1个与它同样颜色的格子,问你我们有多少中不同的染色方案。解题思路:首先考虑1*......
  • codeforces 1354D - Multiset (线段树或者2分)
    题目大意:已知一个数列an,我们每次可以添加一个数k,或者把第k大的数字去掉。问我们经过k次操作后,数列中任意1个剩余的数字。n,q<=1e6解题思路:首先最简单的思路是线段树。线段......
  • Codeforces Round #837 (Div. 2)D (最大回文字串+树)
    题目链接:D.Hossamand(sub-)palindromictree题目描述给定一颗有n(n<=2e3)个顶点的树,每个顶点有一个点权(字符),定义s(u,v)为从u到v的简单路径所经过的点权形成的字符......
  • Codeforces Round #837 (Div. 2)补题
    CodeforcesRound#837(Div.2)A.HossamandCombinatorics知识点:简单题复杂度:\(O(nlogn)\)很明显能看出,该题与数据的位置无关,只与大小有关所以我们可直接排序,判断......
  • 题解 CodeForces 940E Cashback
    1.题面描述题目链接给定长为\(n\)的序列和一个整数\(c\),你需要将其分为若干段。对于每一段,若其长度为\(k\),则可以删除其中前\(\lfloor\frac{k}{c}\rfloor\)小的......
  • Codeforces Round #821 (Div. 2)
    比赛链接A题意:给定一个长度为n的数组,你可以任意交换两个距离为k的数,求最大的连续k个数组之和。核心思路:这个我们直接暴力就好了,我们可以把那些距离为k的比较大的全都换......
  • StandardCharsets
    StandardCharsets /**Copyright(c)2011,Oracleand/oritsaffiliates.Allrightsreserved.*ORACLEPROPRIETARY/CONFIDENTIAL.Useissubjecttolicense......
  • Educational Codeforces Round 134 (Rated for Div. 2)
    比赛链接A题意:给定4个字符串,每次可以将一种字符串变成另一个字符串,请求最少的操作使得所有字符串相同。核心思路:就是一个找规律的题目,哈哈哈,看多了jly的代码还是有好处......
  • Codeforces Beta Round #2 C. Commentator problem
    题意二维平面上,给定三个圆的原点和半径,求一个点到三个圆的视角相同。三个圆心不共线。思路用(距离/半径)表示视角大小,用方差表示视角的波动。用爬山算法从重心开始四......