当前位置: 首页 > news >正文

拼好题(各个平台的零散题目)

题目意思:

给定两种操作,操作一,对a+1,花费x;操作二,对a^1,花费y,求:从a到b最少的花费,如果到不了,就直接输出-1。

思路:

 我们从note里面可以得到提示,当a是偶数的时候,a^1操作相当于+1,此时和操作一一样,故,我们直接想,从a到b就是自加的过程,不过是每次加1的时候取花费最小即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){int a,b,x,y;cin>>a>>b>>x>>y;if(a>b){//特殊情况,a>b的情况下,只有异或可以解决if((a^1)==b){cout<<y<<endl;}else{cout<<-1<<endl;}}else if(y>=x){//如果操作1的花费比操作2的花费要少cout<<((b-a)*x)<<endl;}else{int sum=0;//操作1和操作2交替操作for(int i=a+1;i<=b;i++){if(i%2==0)sum+=x;//如果下一个数字在进行操作之后是偶数//说明是从奇数转移过来的,故,我们直接对操作1进行自加else sum+=y;//反之}cout<<sum<<endl;}
}
signed main(){int nn;cin>>nn;while(nn--)solve();
}

 题目意思:

从px这个点开始进行n次操作,在第i次操作中,选择一个点使得这个点和px之间的距离恰好为ai

然后移动到该点,问最后是否能移动到qx这个点。

思路:

其实每次移动有点类似向量和圆,当所有的点都向着同一个方向移动的时候,此时到达最远的地方。

当每次移动的最大值和其他移动相反的时候此时到达最近的地方,就是直接判定两者之差是否为正数,反之若为负数,则移动最大值反向无影响。

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){int n;cin>>n;vector<int>a(n+1);int x1,y1;cin>>x1>>y1;int x2,y2;cin>>x2>>y2;int sum=0;int hou=-1;for(int i=1;i<=n;i++){cin>>a[i];sum+=a[i];//最远的hou=max(hou,a[i]);}int b=max(0ll,hou-(sum-hou));//最近的int changdu=((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));//两点距离if(changdu>=b*b&&changdu<=sum*sum){cout<<"Yes"<<endl;//判断两点之间的距离要在一个区间内}else{cout<<"No"<<endl;}
}
signed main(){int nn;cin>>nn;while(nn--)solve();
}

 

 题目意思:

构造长度为n的数组,使得里面所有的数字大小在l到r之间,而且数组内所有数字的异或和等于所有数字的与,如果存在这种数组,输出第k个数字,反之输出-1。

思路:

首先想最简单的情况,n是奇数的时候,此时数组里面所有的数字全部放l即可。

当n是偶数的时候,我们看下面[6,6,8,8]这种情况,提示是我们,此时数组里面就两个数字,一个l

和另一个数字,而题目要求字典序最小,故l要尽可能的多。手模一下发现,此时数组构造情况就是前面n-2个l后面两个相同的数字z,而且z&l==0。

但是偶数情况下n=2的时候是无论如何都是不可能的,故特判。

那么我们反向去想z,z要尽可能的小,故我们直接用位运算找到二进制下l数字左边第一个为1的位置,此时z的大小就是2^(i+1)。

最后特判z是否超过范围,k是否是n-1或者n的情况即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){int n,l,r,k;cin>>n>>l>>r>>k;if(n&1){cout<<l<<endl;return;}else{int cnt=-1;for(int i=62;i>=0;i--){//2的60次大于10的18次,上次就是这里wa了一发if(((l>>i)&1)==1){cnt=pow(2,i+1);break;}}//cout<<cnt<<endl;if(cnt>r){cout<<-1<<endl;return;}else if(cnt==-1){cout<<-1<<endl;return;}else{if(n==2){cout<<-1<<endl;}else if(k==n||k==n-1){cout<<cnt<<endl;}else cout<<l<<endl;}}
}
signed main(){int nn;cin>>nn;while(nn--)solve();
}

题目意思:

通过数组中的数字判断,是否有人说谎。此时每个人只能看到除了自己之外的其他人,并爆出数字,这个数字是,其他人最多有多少个人,它们的颜色是一样的。

思路:

我们直接从数组中数字全部一样的入手,当数组大小是n的时候,数组里面全部都是(1到n-1)

手动模拟一下看满足条件的情况。

最后发现此时满足条件的只有两种情况,n-1或者<=n/2。其他情况都是不行的。(@)

这里我们可以拿n=6的情况和n=5的情况作为支撑:

6

4 4 4 4 4 4

6

3 3 3 3 3 3

此时等于的情况成立。

然后我们在进行判断其他情况,我们从样例3入手

4

1 1 2 2

按照这个样例我们再写几个类似的发现,满足条件的其实数组里面只能有两个数字。

5

2 2 2 3 3

7

3 3 3 3 4 4 4

而且,这些数字明显满足一些关系,最大的和最小的相差为1,最小的个数等于最大值。

分析到这这个题目就做出来了,不过在多说一点就是分析的时候我一开始把 (@)这个地方给遗漏了,导致后面越来越郁闷....(哈哈哈)

#include<bits/stdc++.h>
using namespace std;
inline void solve(){int m;cin>>m;vector<int>a(m+1);for(int i=1;i<=m;i++)cin>>a[i];sort(a.begin()+1,a.end());int sum=0;for(int i=1;i<=m;i++){if(a[i]==a[1])sum++;//最小的个数}if(a[1]==a[m]-1){//最小和最大之间的关系if(a[m]==sum){cout<<"Other"<<endl;}else{cout<<"Lie"<<endl;}}else if(a[1]==a[m]){//数组里面只有一个数字的情况下if(a[1]==m-1||a[1]<=m/2)cout<<"Other"<<endl;else cout<<"Lie"<<endl;}else{cout<<"Lie"<<endl;}
}int main(){int n;cin>>n;while(n--)solve();
}

 题目意思:

找离叶子节点最远的点,并从小到大输出。

思路:

题目给出了叶子节点这一个关键的信息,我们就直接从叶子节点着手,用BFS标记其他节点距离叶子节点的距离。最后统计最大值即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int op=200012;
int vis[op];int d[op];int res[op];
queue<pair<int,int>>p;
vector<int>e[op];
//存储每个节点下的子节点
inline void solve(){int n;cin>>n;for(int i=1;i<=n;i++){vis[i]=res[i]=d[i]=0;//每组都要打破上一个状态e[i].clear();}for(int i=1,u,v;i<n;i++){cin>>u>>v;e[u].push_back(v);e[v].push_back(u);d[u]++,d[v]++;}for(int i=1;i<=n;i++){if(d[i]==1){vis[i]=1;p.push({i,0});//从叶子节点出发}}while(!p.empty()){int x=p.front().first,v=p.front().second;//BFSp.pop();for(int y:e[x]){if(vis[y])continue;vis[y]=1;res[y]=v+1;//对每一个点进行标记距离p.push({y,v+1});}}int sum=0;int mx=0;for(int i=1;i<=n;i++){if(res[i]>mx){//找到距离最大sum=1;mx=res[i];}else if(res[i]==mx){sum++;}}cout<<sum<<endl;for(int i=1;i<=n;i++){if(res[i]==mx){cout<<i<<" ";}}//从小的下标开始往后找cout<<endl;
}
signed main(){int nn;cin>>nn;while(nn--)solve();
}

题目意思:

找到暖炉的位置, 按照r从小到大输出,r相同时候按照c从小到大输出。

思路:

先找到暖水豚但是四周没有暖炉的所有情况记k1,在对空点进行枚举,观察是否能覆盖所有的k1。

说起来挺简单的,但是代码实现的细节还是挺多的。

贴一个官方给的代码(其实在这个代码上进行改进,还是有挺多可选的)

#include <bits/stdc++.h>
using namespace std ;
typedef pair<int,int> PII ;
const int N = 1010 ;
int n , m , u ;
string s[N] ;
int dx[8] = {0 , -1 , -1 , -1 , 0 , 1 , 1 , 1} ;
int dy[8] = {-1 , -1 , 0 , 1 , 1 , 1 , 0 , -1} ;
int main()
{cin >> n >> m ;for(int i = 1 ; i <= n ; i ++){cin >> s[i] ;s[i] = " " + s[i] ;}for(int i = 1 ; i <= n ; i ++)for(int j = 1 ; j <= m ; j ++)if(s[i][j] == 'w')//暖呼呼的水豚,然后找它的四周{int f = 0 ;for(int k = 0 ; k < 8 ; k ++){int fx = i + dx[k] , fy = j + dy[k] ;if(fx >= 1 && fx <= n && fy >= 1 && fy <= m){if(s[fx][fy] == 'm') f = 1 ;//如果有暖炉的话就进行标记一下}}if(!f) s[i][j] = '!' , u ++ ;//如果没有的话,说明四周藏了暖炉,统计水豚个数}vector<PII> res ;for(int i = 1 ; i <= n ; i ++)for(int j = 1 ; j <= m ; j ++)if(s[i][j] == '.'){//再对空格进行遍历int f = 1 , uc = 0 ;for(int k = 0 ; k < 8 ; k ++){int fx = i + dx[k] , fy = j + dy[k] ;if(fx >= 1 && fx <= n && fy >= 1 && fy <= m){//如果空格四周有!,说明是我们要的答案if(s[fx][fy] == '!') uc ++ ;//一定要是该空格满足所有的水豚的条件if(s[fx][fy] == 'c' ) f = 0 ;//如果空格四周有冷水豚的话,直接跳过}}if(uc == u && f && uc) res.push_back({i , j}) ;//满足所有水豚的情况,而且没有冷水豚,注意这里有一个特判就是如果题目给的样例中没有藏水豚的话,我们就不用将该坐标加进去。故进行一个是否有的特判}sort(res.begin() , res.end()) ;if(res.size()){for(int i = 0 ; i < res.size() ; i ++)cout << res[i].first << " " << res[i].second<<endl;}else cout << "Too cold!" << "\n" ;return 0 ;
}

http://www.dtcms.com/a/268281.html

相关文章:

  • vue什么时候可以用index作为:key的索引
  • Vue计算属性(computed)全面解析:原理、用法与最佳实践
  • Python库 python-pyper 的详细使用(优秀的并发数据处理框架)
  • 第一次ctf比赛的赛后复现记录
  • ​保持矩阵秩不变的乘法
  • SoloSpeech:从混合音频中提取目标语音
  • 下载安装 com0com
  • Android16之解决报错:ckati: no such file or directory(二百四十九)
  • ros-noetic搭建turtlebot3测试
  • 数据运营策略 —— B-O价值模型
  • 【机器学习笔记Ⅰ】12 逻辑回归
  • 《Redis》缓存与分布式锁
  • usrp b210 亚克力外壳
  • 【机器学习笔记Ⅰ】11 多项式回归
  • hp开关机
  • CICD[导航]、docker+gitlab+harbor+jenkins从安装到部署
  • vuex 和持久化 vuex-persistedstate
  • macOS虚拟机登录AppleID,全版本,成功率高
  • 深度学习篇---简单果实分类网络
  • 群晖 DS3617xs DSM 6.1.7 解决 PhotoStation 安装失败问题 PHP7.0
  • 企业智脑:智能营销新纪元——自动化品牌建设与智能化营销的技术革命
  • Unreal Engine 5中的AI知识
  • Yocto项目:嵌入式Linux开发的“万能烹饪手册”
  • 力扣 hot100 Day36
  • C++学习之STL学习:list的模拟实现
  • 【CSS-16】深入理解CSS Transform:从基础到高级应用
  • 条件渲染 v-show与v-if
  • 《自然》发布机器人技术路线图
  • 铸造软件交付的“自动驾驶”系统——AI大模型如何引爆DevOps革命
  • 分布式压测