况那么一定 最后是4操作,必须清醒地意识到4操作有可能不知会出现一次,便可利用一个类似标志变量,出现一次4
取一次非。
3、当出现1次4后,也就是说反转一次,那么原来1和2的操作相当于换过来了,这是一个小技巧。用3-当前操作便可。
4、还有就是最后奇数项总和的解法,也是存在一点小技巧的,可以先求出来未反转时总和sum,如果原本就是奇数,
那反转后的总和仍是sum;但如果是偶数,那就不同了,前n项和-sum便是此情况下的奇数项总和(用long long定义较
好,防止超出范围)
代码如下:
#include
#include
#include
#define maxn 100200
using namespace std;
long long Right[maxn],Lift[maxn];
void link(int X,int Y)//构建数组模拟双向链表
{
Right[X]=Y;
Lift[Y]=X;
}
int main()
{
int n,m,Case=0;
while(cin>>n>>m)
{
memset(Lift,0,sizeof(Lift));
memset(Right,0,sizeof(Right));
int ans =0;
for(int i=1;i<=n;i++)
{
link(i,i+1);
link(i-1,i);
}
while(m–)
{
int c,X,Y;
cin>>c;
if(c==4)
{
ans=!ans;//类似标志控制最后到底反转还是未反转
continue;
}
cin>>X>>Y;
if(c==3&&(Right[Y]==X)) swap(X,Y);//处理特殊情况相邻
if(c!=3&&ans) c=3-c;//反转后1和2操作互换
if(c==1&&Lift[Y]==X) continue;
if(c==2&&Right[Y]==X) continue;//这两种情况已经符合1,2的操作直接跳过即可
int XL=Lift[X],XR=Right[X],YL=Lift[Y],YR=Right[Y];
if(c==3)
{
if(Right[X]==Y)//处理特殊情况
{
link(XL,Y);
link(Y,X);
link(X,YR);
}
else
{
link(X,YR);
link(YL,X);
link(Y,XR);
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.youkuaiyun.com/topics/618191877)
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!