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

牛客周赛 Round 101题解

题解的token计算

思路:直接按照题目上说的去计算一下即可

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;cout << fixed << setprecision(6) << (double)(150 * log(n)) << endl;return 0;
}

 76修地铁

思路:按照提议去模拟即可,

对于普通火把,从第五个开始就开始每五列+2个

对于红石火把,就是从第五个开始,每十列+1个

对于普通铁轨,从第20列开始,每20列+3个

对于动力铁轨,除去动力铁轨,剩下的都是两个普通铁轨

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
signed main()
{cin >> n;int a = (n >= 5) ? ((n - 5) / 5 + 1) * 2 : 0;int b = (n >= 5) ? ((n - 5) / 10 + 1) : 0;int c = (n >= 20) ? ((n - 20) / 20 + 1) * 3 : 0;int flag = (n >= 20) ? ((n - 20) / 20 + 1) : 0;int d = (n - flag) * 2;cout << a << " " << b << " " << c << " " << d;return 0;
}

76选数

思路:很明显我们会发现就是排列里面的在二进制位里面的所有数的累加和,比如说当前n=5,那么就是1+2+4,所以我们只需要去遍历那个位置的1<<bit>n,然后输出这个(1<<bit)-1即可 

#include<bits/stdc++.h>
using namespace std;
#define int long longsigned main() {int n;cin >> n;int pos = 0;while ((1LL << (pos + 1)) <= n) {pos++;}cout << (1LL << (pos + 1)) - 1;return 0;
}

76构造

思路:我们很容易发现分割的区间里面必然会存在gcd(l,r)=1的情况,因为排列里面始终有一个1,所以,如果m为偶数就是直接输出-1,然后我们再来考虑,如果m是奇数,那么就将m的二进制位里面除了1大小的那一位,别的都单独作为一段,最后的1和剩下的数作为一段,然后输出段数和区间即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
vector<int> alone;
map<int,int> mp;
signed main()
{cin>>n>>m;if(m%2==0){cout<<"-1\n";return 0;}for(int i=31;i>=0;i--){if(m&(1<<i)){if((1<<i)>n){cout<<"-1\n";return 0;}if(i==0&&m%2==1){break;}alone.push_back(1<<i);}}int l=1;vector<pair<int,int> > pos;for(int i:alone){cout<<i<<" ";mp[i]++;pos.push_back({l,l});l++;}for(int i=1;i<=n;i++){if(mp[i]==0){cout<<i<<" ";}}cout<<"\n";pos.push_back({l,n});cout<<pos.size()<<"\n";for(auto v:pos){cout<<v.first<<" "<<v.second<<"\n";}return 0;
}

qcjj寄快递

思路:我们这题其实在题面上已经告诉你时间是多少了,就是形式化题面那个式子,我们只需要对式子去进行求导,找到零点就是最后的答案,此时的k= log2(e+ln(2)),我们只需要对每一步的欧式距离去求导,然后带入原式子求出最小的时间去累加即可

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
struct node
{double x, y;
};
double cal(const node &a, const node &b)
{double dx = a.x - b.x;double dy = a.y - b.y;return sqrt(dx * dx + dy * dy);
}
double com(double e)
{if (e == 0.0){return 0.0;}double k = log2(e * log(2));if (k < 0.0){k = 0.0;}return 2 * k + 2 * e / pow(2,k);
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;vector<node> points(n);for (int i = 0; i < n; ++i){cin >> points[i].x >> points[i].y;}double ans = 0.0;for (int i = 1; i < n; ++i){double e = cal(points[i - 1], points[i]);ans += com(e);}cout << fixed << setprecision(10) << ans << endl;return 0;
}

幂中幂plus

思路:我们发现mod的大小不会超过1e6,因此是有循环节,我们只需要找到循环节的大小,和一个循环节的累加和就可以在O(1)的时间复杂度内求解所有的k

#include <bits/stdc++.h>
using namespace std;
using ll = long long;ll MOD;ll ksm(ll base, ll exp) {ll res = 1;base %= MOD;while (exp > 0) {if (exp % 2 == 1) {res = (res * base) % MOD;}base = (base * base) % MOD;exp /= 2;}return res;
}void solve() {ll b, c0;cin >> b >> c0 >> MOD;if (MOD == 1) {ll q;cin >> q;while (q--) {cout << 0 << "\n";}return;}vector<ll> memo(MOD + 1, -1);ll c = ksm(b, c0), cnt = 0;vector<ll> pre;pre.push_back(0);while (memo[c] == -1) {cnt++;memo[c] = cnt;pre.push_back((pre.back() + c) % MOD);c = ksm(b, c);}ll len = cnt - memo[c] + 1;ll su = (pre[cnt] - pre[memo[c] - 1] + MOD) % MOD;ll q;cin >> q;while (q--) {ll k;cin >> k;if (k <= cnt) {cout << pre[k] % MOD << "\n";} else {ll t = (k - memo[c] + 1) / len % MOD;ll ans = t * su % MOD;ans = (ans + pre[memo[c] - 1]) % MOD;ll r = (k - memo[c] + 1) % len;ans = (ans + pre[memo[c] - 1 + r] - pre[memo[c] - 1] + MOD) % MOD;cout << ans << "\n";}}
}int main() {ios_base::sync_with_stdio(false);cin.tie(nullptr);solve();return 0;
}

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

相关文章:

  • 北京-4年功能测试2年空窗-报培训班学测开-第五十六天
  • 阶段1--Linux中的网络配置
  • rt-thread多线程消息队列通信
  • 【SAP-CO】成本控制范围
  • 清理磁盘空间
  • 4 种更新的方法将消息从安卓传输到 Mac
  • JavaEE初阶第十期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(八)
  • 用 Three.js 实现 PlayCanvas 风格 PBR 材质教程(第二篇):核心参数与光照模型
  • CS课程项目设计4:支持AI人机对战的五子棋游戏
  • RustDesk自建服务器完整部署指南:从零开始到成功连接。成功解决rustdesk报错:未就绪,请检查网络连接
  • Linux的系统调用机制总结
  • [Python] -项目实战10- 用 Python 自动化批量重命名文件
  • 重学前端008 --- CSS 无障碍 Quiz
  • 《高并发优化方案一》:本地锁 + 分布式锁实战详解
  • Excel函数 —— TEXTJOIN 文本连接
  • 支持不限制大小,大文件分段批量上传功能(不受nginx /apache 上传大小限制)
  • Apache Ignite Closure 和 Thread Pool
  • Ubuntu安装k8s集群入门实践-v1.31
  • WinForm-免费,可商用的WinForm UI框架推荐
  • 类似腾讯会议的私有化音视频会议软件,BeeWorks Meet
  • Go语言进阶书籍:Go语言高级编程(第2版)
  • 开源 Arkts 鸿蒙应用 开发(八)多媒体--相册和相机
  • 45.sentinel自定义异常
  • RIQ模型时间管理方法详解
  • Idea或Pycharm上.idea的忽略提交的问题总结
  • go语言八股
  • MySQL(149)如何进行数据清洗?
  • 09_Spring Boot 整合 Freemarker 模板引擎的坑
  • 【C++】stack和queue拓展学习
  • 库卡气体保护焊机器人省气的方法