CF622

news/2025/2/6 2:48:37/

CF EDU7

    • [A Infinite Sequence](http://codeforces.com/contest/622/problem/A)
      • 思路
      • 代码
    • [B The Time](http://codeforces.com/contest/622/problem/B)
      • 思路
      • 代码
    • [C Not Equal on a Segment](http://codeforces.com/contest/622/problem/C)
      • 思路
      • 代码
    • [D Optimal Number Permutation](http://codeforces.com/contest/622/problem/D)
      • 思路
      • 代码
    • [E Ants in Leaves](http://codeforces.com/contest/622/problem/E)
      • 来一发机房大佬题解

A Infinite Sequence

思路

玄学做法
m ∗ ( m + 1 ) 2 ≤ n \frac{m * (m+1)}{2} \leq n 2m(m+1)n, m指1到m的和、
那n一定属于1到m+1这一个循环。
找到m, 将n减去 m ∗ ( m + 1 ) 2 \frac{m * (m+1)}{2} 2m(m+1)即可。
注意:如果减去后等于0, 说明n正好是m。
优化:找m缩小枚举范围

代码

#include<bits/stdc++.h>using namespace std;long long n;
long long now;
int main()
{cin >> n;for(long long i = (int)(sqrt(2 * n)) + 1; i >= 1; i--){if(i * (i + 1) <= 2 * n){now = i;break;}}//cout << now << endl;n = n -   (now * (now+1) / 2);if(n == 0){n = now;}cout << n << endl;return 0;
}

大佬蒙逼玄学做法
模拟
对于每一列
它每次都比上一列多一个n
看这儿

int main(){   LL n;    cin>>n;    LL now=1;   while(n>now){       n-=now;        now++;   }    cout<<n;    return 0;}

B The Time

思路

模拟。
把小时和分钟分离
先在分钟上加上要加的数。
然后在分钟上%60;
接着, 再在小时上+(分钟/60)
最后注意输出

代码

#include<bits/stdc++.h>using namespace std;int h;
int m;
char s[10];
int dmin; 
int main()
{scanf("%s", s+1);h = (s[1] - '0') * 10 + (s[2] - '0');m = (s[4] - '0') * 10 + (s[5] - '0');cin >> dmin;m += dmin;int dh = m / 60;m %= 60;h += dh;h %= 24;if(h < 10){cout << '0' << h;}else{cout << h;}cout << ':';if(m < 10){cout << '0' << m;}else{cout << m;}return 0;
}

大佬全化成分钟在做的。

#include<bits/stdc++.h>using namespace std;using int64 = long long;
const int mod = 1e9 + 7;
const int inf = (1 << 30) - 1;
const int64 infll = (1LL << 61) - 1;struct IoSetup {IoSetup() {cin.tie(nullptr);ios::sync_with_stdio(false);cout << fixed << setprecision(10);cerr << fixed << setprecision(10);}
} iosetup;template< typename T >
ostream &operator<<(ostream &os, const vector< T > &v) {for(int i = 0; i < (int) v.size(); i++) {os << v[i] << (i + 1 != v.size() ? " " : "");}return os;
}template< typename T >
istream &operator>>(istream &is, vector< T > &v) {for(T &in : v) is >> in;return is;
}template< typename T1, typename T2 >
inline bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); }template< typename T1, typename T2 >
inline bool chmin(T1 &a, T2 b) { return a > b && (a = b, true); }template< typename T = int64 >
vector< T > make_v(size_t a) {return vector< T >(a);
}template< typename T, typename... Ts >
auto make_v(size_t a, Ts... ts) {return vector< decltype(make_v< T >(ts...)) >(a, make_v< T >(ts...));
}template< typename T, typename V >
typename enable_if< is_class< T >::value == 0 >::type fill_v(T &t, const V &v) {t = v;
}template< typename T, typename V >
typename enable_if< is_class< T >::value != 0 >::type fill_v(T &t, const V &v) {for(auto &e : t) fill_v(e, v);
}int main() {int h, m, v;scanf("%d:%d", &h, &m);scanf("%d", &v);int t = h * 60 + m;t += v;t %= 24*60;printf("%02d:%02d\n", t / 60, t % 60);
}

C Not Equal on a Segment

思路

找每个数左边第一个与他不相等的数。设p[x] 为左边第一个与a[x]不相等的数的下标。
显然, 如果a[i] != a[i-1], 则p[i] = i-1; 否则p[i] = p[i-1];
对于每一个询问[l,r] (x), 如果p[r] < l 同时 a[r] == x 的话, 区间里全为x输出-1,
否则:
1.a[r] == x 输出p[r];
2 a[r] != x 输出r

代码

#include<bits/stdc++.h>using namespace std;int n, m;
int a[200010];
int p[200010];
int main()
{cin >> n >> m;for(int i = 1; i <= n; i++){scanf("%d", &a[i]);if(a[i] == a[i-1]){p[i] = p[i-1];}else{p[i] = i-1;}}while(m--){int l, r, x;scanf("%d %d %d", &l, &r, &x);if(p[r] < l && a[r] == x){printf("-1\n");}else{if(a[r] != x){printf("%d\n", r);}else{printf("%d\n", p[r]);}}}return 0;
}

D Optimal Number Permutation

思路

显然, 要让他最小的话, 我们首先要让每一项都尽可能小。
这是一个单项式。。。
第一个因式我们好像没法改变。。。
考虑第二个因式: ∣ d i + i − n ∣ |d_i + i - n| di+in
因为要让这个单项式尽可能小, 还是那句话, 每一项都尽可能小(最好为0
所以, 我们可以尝试让第二个因式为0
得到 d i = n − i d_i = n - i di=ni
所以, 很轻松得到了同一个数i在这个数列中两个位置差应为n - i;
考虑构造。
举一个例子
11 22 33 44 55
4 3 2 1 0
由于1距离为4, 所以中间应有3个数。
我们可以添3, 因为ta距离为2, 正好能镶进1中间。
还剩了一个位置, 我们可以填距离为0的5(因为它对整个序列没有影响)
这样前5个位置就填满了。
然后, 在往后填2, 距离为3, 中间有2个空, 正好可以填距离为1的4.
最后在填剩下一个5.
答案为: 1353124425
因此, 我们发现规律:奇数偶数分别填成两个序列拼一块在接一个n就是答案

代码

#include<bits/stdc++.h>using namespace std;int n; 
//bool vis[500010];
int m;
int main()
{cin >> n;for(int i = 1; i <= n; i += 2){cout << i << " ";}/*if(n % 2 == 1){cout << n;}*/m = n-1;if((n-1) % 2 == 0){m = n-2;}for(int i = m; i >= 1; i-=2){cout << i << " ";}for(int i = 2; i <= n; i += 2){cout << i << " ";}/*if(n % 2 == 0){cout << n;}*/m = n-1;if((n-1) % 2 == 1){m = n-2;}for(int i = m; i >= 1; i-=2){cout << i << " ";}cout << n << endl;return 0;
}

E Ants in Leaves

来一发机房大佬题解


http://www.ppmy.cn/news/632353.html

相关文章

板刷CF:dp1500-2100

1、1582E 题目链接&#xff1a;题目链接 分析&#xff1a; 1、1582E&#xff0c;n为10的5次方&#xff0c;那么我们的k则是sqrt(n)的级别&#xff0c;所以我们可以暴力求解&#xff0c;我们可以定义dp[i][j]为从后往前取&#xff0c;i之后k取到j时最后一个段的sum的最大值&a…

CF 162(div2)

C.学习了一下STL List的insert的用法&#xff0c;然后这道题直接用List模拟即可。函数原型&#xff1a;iterator insert(iterator where, value_type val);注意这里的插入是在当前指针位置上赋值&#xff0c;然后把原来这个位置上的值后移。例如1,2,3 指针it 2&#xff0c;则i…

网络安全零基础学习路线

一&#xff0c;怎么入门&#xff1f; 1、Web 安全相关概念&#xff08;2 周&#xff09; 了解网络安全相关法律法规 熟悉基本概念&#xff08;SQL 注入、上传、XSS、CSRF、一句话木马等&#xff09;。 通过关键字&#xff08;SQL 注入、上传、XSS、CSRF、一句话木马等&#…

CF#692 div2

A 从后往前找连续)最长长度判断是否大于n/2即可 B 一个数字只会出现1-9&#xff0c;而1-9的最小公倍数为7560 所以你最多自增7560个数后必能找到符合条件的数&#xff0c;所以暴力模拟即可 C 因为m小于n所以必能找到符合条件的&#xff0c;我们想想后会发现一些规律 出现的点…

csgo卡住关不掉_csgo卡屏断开连接解决方法 | 手游网游页游攻略大全

发布时间&#xff1a;2016-03-19 细心的玩家会发现失落城堡010最新补丁出现卡屏问题,小编给大家分享一下失落城堡010最新补丁出现卡屏问题解决方法.希望大家喜欢. 点击下载: 失落城堡010最新补丁出 ... 标签&#xff1a; Steam 动作 win7 RPG 冒险 独立 发布时间&#xff1a;20…

csgo如何旋转跳?如何连跳

csgo如何旋转跳&#xff1f;如何连跳 1、换成小刀并按下W键向前奔跑。 2、先按下跳跃键&#xff08;跳跃的一瞬间&#xff09;&#xff0c;松开W键。 3、这时按下A键并同时用鼠标将视角向左转&#xff0c;就可以完成旋转跳了。 csgo如何旋转跳&#xff1f;如何连跳 csgo连跳…

CF上分日记

1621B-1500分 大意&#xff1a;给一堆区间&#xff0c;每个区间有标价。某人要买一个或两个区间&#xff0c;要求这些区间中包含的数的最小值和最大值差距尽量大&#xff0c;在此基础上花费尽量少。求这个花费。 钻进了非要在线处理的牛角尖&#xff0c;不知道该怎么维护最优的…

wegame启动cf蓝屏_CF闪退跟蓝屏的部分原因解疑

游戏玩了很长一会儿就会出现闪退并提示你内存溢出,而这一问题很可能就是预加载资源惹出的祸根,16g物理内存也惨遭毒手,讲真的,这个问题我在心悦客服那得到的回复就是:我内存不够。16g不够资格玩cf……enmmm……。所以我就想到了虚拟内存,其实吧,放眼现在虚拟内存起到的作…