目录
签到题目,
- #include
-
- using namespace std;
-
- int main()
- {
- string arr;
- cin>>arr;
- if(arr=="R") cout<<"L";
- else if(arr=="L") cout<<"R"<
- else if(arr=="U") cout<<"D"<
- else if(arr=="D") cout<<"U"<
- }
Do you like Van game?
这道题目是个小模拟题目,模拟范围并不大,所以我们可以直接进行模拟。
首先我们发现无非就是三种情况,最开始在1,2,3三个位置,我们可以直接开个变量假设就在初始的三个位置,然后对于每一次的交换,我们都把位置改变,接下来猜一下位置对不对,对了就把对应的答案加一;
代码如下:
- #include
-
- using namespace std;
-
- int main()
- {
- int n;
- cin>>n;
- int a=1,b=2,c=3;//假设abc为初始在123位置
- int ans1=0,ans2=0,ans3=0;// 记录猜对的次数
- while(n--)
- {
- int x,y,z;
- cin>>x>>y>>z;
- if(x==a) a=y;
- else if(y==a) a=x;
-
- if(x==b) b=y;
- else if(y==b) b=x;
-
- if(x==c) c=y;
- else if(y==c) c=x;
- //对于每一次交换,如果他交换了,就把他的位置改变
- if(a==z) ans1++;
- if(b==z) ans2++;
- if(c==z) ans3++;
- //三种初始位置分别计数
- }
- int ans=max(ans1,ans2);
- ans=max(ans,ans3);//求出最大猜对次数即可,不需要猜位置
- cout<
- }
好姐姐的三角形
也是很经典的一道模拟题目,输出经典的三角形,主要需要发现的是外面的空格个数和内层的空格个数,一定要思路清晰,不然空格个数判断错误的话很难改正。
- #include
-
- using namespace std;
-
- int main()
- {
- int n;
- cin>>n;
- while(n--)
- {
- int a;
- char k;
- cin>>a>>k;
- int p=1;
- for(int i=a-1;i>=1;i--)//外层空格数目是逐渐减少,从a-1个开始减少
- {
- for(int j=1;j<=i;j++) cout<<" ";//这里是外层空格
- cout<
- if(i!=a-1)//注意,第一层中间没有空格
- {
- for(int j=1;j<=p;j++) cout<<" ";//如果中间需要空格,进行空格判断,增长规律是p+=2
- p+=2;
- cout<
- }
- cout<
- }
- for(int i=1;i<=2*a-1;i++) cout<
//最后一层全是 - cout<
- cout<
- }
- }
帮帮小陈
目前不会写,先放着;
三重循环别想,绝对超时,二分可以优化,但是没想到怎么做;
卷点
这道题目我们需要分类讨论,不难发现,有几个特殊点位需要我们注意

当位于十字和斜线上的时候,我们会发现只有四种情况,可以通过对称实现,而当位于中心点四种情况会重叠,只有一种情况成立,其他情况我们发现都会有八种对称情况,那么根据分析,我们就可以把答案写出来了;
- #include
- #include
- using namespace std;
- typedef long long LL;
- int main()
- {
- int n;
- cin>>n;
- while(n--)
- {
- set
se;//这里使用到的是c++STL中的set容器,具体放入set的元素不重复(自动去重) - LL a,b,c,d;
- cin>>a>>b>>c>>d;
- se.insert(a);
- se.insert(b);
- se.insert(c);
- se.insert(d);//我们需要特判,这里的面积比其实是高之比
-
- if(a+b==c+d||a+c==b+d||a+d==b+c)//如果发现有两条边相加相等的情况,说明内部有卷点,如果有卷点,则绝对
- { //存在有两条边相加等于两条边相加,这样三角形高才能和正方形对应
- if(se.size()==4) cout<<"8"<
//如果发现四条高各不相同,说明不在十字和X上 - else if(se.size()==2||se.size()==3) cout<<"4"<
//2说明在X上,3说明是在十字上 - else if(se.size()==1) cout<<"1"<
//四条高相等,只能在中点 - }
- else cout<<"0"<
//否则高度相加不存在相等的情况肯定无解 - }
- }
-
- /*
- 补充set:S
小括号内定义你set可以放入什么类型的数据 - S.insert(A)函数表示把A加入容器。
- s.size()计算s的大小,元素不重复
- s.find(A)!=-1,在set里查找A,不到返回-1
- set的好处就是自动去重,保证每个元素只会出现一次
- */
签个到就下班
简单题目,签到题
- #include
-
- using namespace std;
-
- int main()
- {
- char a,b;
- string arr;
- cin>>a>>b>>arr;
- int ans=0;
- for(int i=0;i
size();i++) - {
- if(arr[i]>=a&&arr[i]<=b) cout<
' '; - }
- }
现在是摸鱼时间
这道题目是一道很搞人的题目。
我们先对式子进行化简,我们可以发现化简到最后得到j-i=arr[j]-arr[i];说明我们存入数组后,两个位置的下表之差等于他们数组存的数字的差;
那么同学很快就想到了解决方案,我直接暴力循环,只要数组内两个数相减等于下标相减,答案就可以加一,事实上想法没错,但是数据范围在1e6。你是过不去的,会超时,那么我们再想一想,上式还可以化简:j-arr[j]=i-arr[i]也就是说,现在只需要保证下标和数组的差值相等,那么就可以记作一次答案相等;
基于这个思想,我们就可以写出下面这个代码:
- #include
- #include
- #include
- using namespace std;
-
- typedef long long LL;
- map<int,int> mp;//这里使用到了map
- int arr[1000010];
-
- int main()
- {
- int n;
- LL cnt=0;
- cin>>n;
-
- for(int i=1;i<=n;i++) cin>>arr[i],mp[i-arr[i]]++;//直接计算差值 ,把差值加入到map中
- for(auto &it:mp)//通过对map差值的遍历,如果出现5次就是10个相等,6个就是15个相等,规律是n个就是1+2+...+n-1
- {
- int k=it.second;
- for(int i=1;i
//加入我们的答案 - }
- cout<
- //如果大家不会用map,可以再开一个数组,用这个数组记录差值,差值大小在-999-999之间,数组没负数下标
- //我们可以统一加一个1000,这样范围就在1-1999之间就可以存储,反正我们只要差值的出现次数,不管差值是
- //由谁减谁得到的
- }
- /*
- map类似字典,根据前一个东西可以定义后一个东西,后一个可以是int类型,也可以是string,甚至可以进行操作;
- 用法就是直接定义 A表示字典的第一个关键字,B是字典第二关键字,第二关键字可以进行操作;
- 具体详细用法请大家去csdn查看;
- */
现在是摸鱼时间 PLUS
这道题目实际是找两个互质的数字,他们的下标加起来最大是多少,记得不能是1,因为1不是质数不能参与互质运算。
所以很多同学直接暴力,企图循环出1e6的答案,肯定错误,我们发现我们的数据大小在1-1000,但是下标在1-1e6,我们可以想个办法把下标对应到数据上,因为只要数据互质,下标我们只取最大的两个即可,所以我们首先对应下标;
之后对数据进行互质判断,如果互质,直接相加即可,因为我们的第一步已经把下标最大存入这个数,所以直接相加一定是下标最大的相加,这样可以把原本1e6*1e6的算法变为1e3*1e3,可以过掉
- #include
- #include
- using namespace std;
-
- typedef long long LL;
- int arr[1010];
-
- int gcd(int a, int b)
- {
- return b>0 ? gcd(b, a % b) : a;
- }//判断互质函数,大家也可以写其他判断方法,这个是最简判断
- int main()
- {
- int n;
- LL cnt=0;
- cin>>n;
-
- for(int i=1;i<=n;i++)
- {
- int a;
- cin>>a;
- arr[a]=max(arr[a],i);//将下标对应到数据,且只要最大的
- }
- int ans=0;
- // for(int i=1;i<=10;i++) cout<
-
- for(int i=1;i<=1000;i++)
- {
- for(int j=i;j<=1000;j++)
- {
- if(i==j)//如果天数相同只算1次
- {
- ans=max(ans,arr[i]);
- if(i==1)//特判样例1 1,因为1 1不是指质数不能进行下面比较,但是1 1的确算作两次摸鱼,所以要特判
- ans=max(ans,arr[i]*2);
- }
- else if(gcd(i,j)==1&&i!=1&&j!=1)//如果互质,且没有1,就进行摸鱼答案判断
- {
- ans=max(ans,arr[i]+arr[j]);
- }
- }
- }
- cout<
- }
-
相关阅读:
FFmpeg源代码简单分析-其他-libswscale的sws_getContext()
python批量删除excel文件中的sheet页
NoSql的优势在哪里,NoSql是什么
(八)MyBatis中参数的处理
为什么资源隔离对HTAP至关重要?
多图详解Windows恶意软件删除工具的常用操作
uvm简介
代码分析体系及Sonarqube平台
RedisSearch深度解析:探索全文搜索的新境界
Dubbo 知识点整理
-
原文地址:https://blog.csdn.net/fakerzhang/article/details/127454943
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU