题目分析:
模拟,写出两个就能找出规律:坐在自己位子上的小孩会不高兴,所以统计下来cnt
发现cnt为奇数是(cnt+1)/2次就能换成要求,偶数就是cnt/2
- #include
- #pragma GCC optimize(3)
- #define INF 0x3f3f3f3f
- #define endl "\n"
- #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
- typedef long long ll;
- using namespace std;
- const int N =2e5+7;
- int main(){IOS
- int t;cin>>t;
- while(t--)
- {
- ll cnt=0;
- int n;cin>>n;
- int x;
- for(int i=1;i<=n;i++)
- {cin>>x;
- if(x==i)cnt++;
-
- }
- if(cnt%2)
- {
- cout<<(cnt+1)/2<
-
- }else cout<
2< - }
-
-
-
- return 0;
- }
B. Longest Divisors Interval
题目分析:给你一个1e18大小的数n,让你 找出最长的连续数列满足这个数列每个都是n的除数
1e18为long long 类型,假设=1,=26,long long 就会爆掉,所以,连续序列的长度最多不超过25,同理,越往后面,数字越大,也即只需要在1~25范围内找连续数列就行
- #include
- #pragma GCC optimize(3)
- #define INF 0x3f3f3f3f
- #define endl "\n"
- #define IOS ios::sync_with_stdio(false);cin.tie(0);
- typedef long long ll;
- using namespace std;
- const int N =2e5+7;
- int a[N];
- struct ss {
- int a,b;
- }stu[N];
- int main(){IOS
- int t;cin>>t;
- while(t--)
- {
- ll n;cin>>n;
- ll ans=0;
- for(int i=1;i<=25;i++){
- ll tmp=0;
- while(n%i==0){
- i++;
- tmp++;
- }
- ans=max(ans,tmp);
- }cout<
- }
-
-
-
- return 0;
- }
C1. Dual (Easy Version)
题目分析:每次将 j 加到 i上,最终在不超过50次的操作下,使得整个序列变为不递减序列
特殊情况:全正 or 全负 两种情况处理起来差不多,后加前 or 前加后 最多 19次操作
其余情况不好处理,考虑往特殊情况上转,也即找到最大的数和最小的数相加,若小于零,则将最小的数加上全序列变为全负,否则变为全正,最多19次操作
- #include
- #pragma GCC optimize(3)
- #define INF 0x3f3f3f3f
- #define endl "\n"
- #define IOS ios::sync_with_stdio(false);cin.tie(0);
- typedef long long ll;
- using namespace std;
- typedef pair<int ,int >pii;
- const int N =2e5+7;
- int a[N];
- struct ss {
- int a,b;
- }stu[N];
- vector
ans; - int main(){IOS
- int t;cin>>t;
- while(t--)
- {
- int n;cin>>n;
- cin>>a[1];
- int mas=a[1];
- int mins=a[1];
- int masidx=1;
- int minsidx=1;
- for(int i=2;i<=n;i++)
- {
- cin>>a[i];
- if(a[i]>mas){
- mas=a[i];
- masidx=i;
- }
- if(a[i]
- mins=a[i];
- minsidx=i;
- }
-
- }
- if(mins+mas<0)
- {
- for(int i=1;i<=n;i++)
- {
- if(i!=minsidx){
- ans.push_back({i,minsidx});
- }
- }
-
- for(int i=n-1;i>=1;i--){
- ans.push_back({i,i+1});
- }
- }else {
- for(int i=1;i<=n;i++)
- {
- if(i!=masidx){
- ans.push_back({i,masidx});
- }
- }
- for(int i=2;i<=n;i++)
- {
- ans.push_back({i,i-1});
- }
-
- }
- cout<
2-2< - for(auto x:ans)
- {
- cout<
" "< - ans.pop_back();
- }
-
- }
-
- return 0;
- }
-
相关阅读:
不同的二叉搜索树
软件测试月薪10K如何涨到30K,只有自动化测试能做到
WPF入门教程系列三十 ——DataGrid验证
每章一篇博客带你拿下吉林大学JAVAEE期末(一)
如何在 SAP ABAP ALV 报表里以交通灯的方式显示某一列的值
Python21天学习挑战赛Day(11)·爬虫入门知识(应用)
如何安装TortoiseSVN并实现公网提交文件至本地SVN服务器?
计算机网络原理
数据库 -neo4j的基本操作
LeetCode每日一题——1704. 判断字符串的两半是否相似
-
原文地址:https://blog.csdn.net/Enjoy10ve/article/details/133362021