首页 > 其他分享 >Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)D题

Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)D题

时间:2024-12-21 19:29:27浏览次数:6  
标签:AtCoder 12 return Contest int res mid else flag

D - Repeated Sequence

 

思路:先存储数组的前缀和,把周期的和剪掉,这样就只需要查找在一个周期是否满足,枚举1-n,毕竟不确定周期是从哪开始的,对于从当前数为起始的周期,当剩余的数res小于从当前i为起点的i后缀和时,我们只需要查找一个R 满足b[r]-b[i-1]区间和等于res,若最后查找的r不满足说明就不存在,反之当大于从当前i为起点的i后缀和说明还需要前i的一个X前缀和。需要满足b[x]+b[n]-[i-1]=res。(别忘了判断最后查找的X是否满足哦,因为这里查找的R和X都是>=res的最小下标,毕竟比R,X再大只会越来越大于res)。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
LL a[200010],b[200010],n,s,res,flag=0; 
bool check(int x,int y)
{
	if(b[x]-b[y-1]>=res) return true;
	else return false;
}
bool check1(int x,int y)
{
	if(b[n]-b[y-1]+b[x]>=res) return true;
	else return false;
}
int main()
{
   ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
   cin>>n>>s;
   for(int i=1;i<=n;i++)
   {
   	cin>>a[i];
   	b[i]+=b[i-1]+a[i];
   }
   LL cnt=s/b[n];
   res=s-b[n]*cnt;
   if(res==0) flag=1;
   for(int i=1;i<=n;i++)
   {
//   	当前i为周期起点,后缀和>=res 
   	if(b[n]-b[i-1]>=res)
   	{
   	  int l=i-1,r=n+1;
	 
	  while(l+1<r){ 
	    int mid=(l+r)>>1;
	  	if(check(mid,i)) r=mid;
	  	else l=mid;
	  }	
	  if(b[r]-b[i-1]==res)
	  {
	  	flag=1;
	  	break;
	  }
	}
	//   	当前i为周期起点,后缀和<res,就需要查找前i中是否有一个X满足 
	else{
	  int l=0,r=i;
	  while(l+1<r){	 
	    int mid=(l+r)>>1;
	  	if(check1(mid,i)) r=mid;
	  	else l=mid;
	  }	
	  if(b[r]+b[n]-b[i-1]==res)
	  {
	  	flag=1;
	  	break;
	  }
	}
   }
   if(flag==1) cout<<"Yes"<<endl;
   else cout<<"No"<<endl;
   return 0;
}

标签:AtCoder,12,return,Contest,int,res,mid,else,flag
From: https://blog.csdn.net/qq_73819342/article/details/144634699

相关文章

  • 1221-伞阀流阻的FLUENT仿真
    1.处理模型-SpaceClaim2023为保证进出口流场充分发展,伞阀出口和进口要延长水力直径(一般取管路直径)的3-5倍;目前进口直径为1.5mm,延长6mm;出口直径为1.2mm,延长5mm;原始模型长9.9mm,共20.9mm长。2.划分网格-FluentMeshing使用简单的工作流模式:【WatertightGeometry】,根据提示完成......
  • 洛谷P1126 机器人搬重物
    题目描述机器人移动学会(RMI)现在正尝试用机器人搬运物品。机器人的形状是一个直径1.6米的球。在试验阶段,机器人被用于在一个储藏室中搬运货物。储藏室是一个N×M的网格,有些格子为不可移动的障碍。机器人的中心总是在格点上,当然,机器人必须在最短的时间内把物品搬运到指定的地......
  • 2024/12/14课堂记录
    今天是我生日!!!目录扫描烽火传递最大连续和(作业)扫描单调队列模板题先上代码 #include<iostream>usingnamespacestd;inta[2000010],q[2000010];intmain(){ intn,k; cin>>n>>k; for(inti=1;i<=n;i++)cin>>a[i]; inth=0,t=0;//队尾在前面跑,对头在......
  • [luoguP11233/CSP-S 2024] 染色
    题意给定一个长度为\(n\)的正整数数组\(A\),其中所有数从左至右排成一排。你需要将\(A\)中的每个数染成红色或蓝色之一,然后按如下方式计算最终得分:设\(C\)为长度为\(n\)的整数数组,对于\(A\)中的每个数\(A_i\)(\(1\leqi\leqn\)):如果\(A_i\)左侧没有与其同色的......
  • 攀山小队1221模拟赛
    “冬天来了,春天还会远吗?”前言一言难尽,最耻辱的一场。赛时08:30~09:30第一次看\(A\)题的时候,以为是悬线法,没想起来悬线法怎么做就先开\(B\)了。\(B\)第一眼以为是原,敲了一个\(k\)优解背包,当时没看题面,以为必须装满,调了很久,后面发现把memset删了就过了。看了一眼......
  • 24.12.21
    回来第一场打成屎了\(\tiny-1\)A大胆猜测在\(n\)足够大时一定可以把\(y\)与成\(0\),那么就只需最大化\(x\)(NT:绿题不到)。那么\(n\)什么时候足够大呢?任取\(3\)个数,那么每一位都至少有一种消掉它的方法,因此如果现在还剩\(k\)位,就一定可以选出两个数消掉\(\lceilk/......
  • P1268 树的重量
    链接:https://www.luogu.com.cn/problem/P1268原题:思路:原本的思路是通过最长边构建一棵树,然后通过记录每个横坐标的值来模拟每个边的分支。但是这样做太繁琐而且容易分类讨论失误。看了题解的一个非常巧妙的办法:类似于求LCA的思路。事实上感觉就像状态转移?类似于DP里面的......
  • 2024-2025-1 20241312 《计算机基础与程序设计》第十三周学习总结
    学期(2024-2025-1)学号(20241312)《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标加入云......
  • 2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排
    2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有n名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。你被施加了一种诅咒,吸收来自第i位魔法师的能量后,你会立即被传送到第(i+k)位魔法师。在这个过程中,你会不断进......
  • 2024.12.20,数据结构课项目,解压与自解压,记录
    std::ifstream有什么成员函数std::ifstream是C++标准库中的输入文件流类,用于从文件中读取数据。它继承自std::istream,因此具有std::istream的所有成员函数。此外,它还提供了一些特定于文件操作的成员函数。常用成员函数构造函数:std::ifstream():默认构造函数。std::if......