Codeforces Round #410 (Div. 2)

本文提供了CodeForces竞赛中四个问题的解决方案,包括回文字符串判断、字符串拼接验证、最大公约数问题以及数据分布调整等算法题目的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:http://codeforces.com/contest/798

A. Mike and palindrome

#include <bits/stdc++.h>
#define endl "\n"
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	string str;
	cin >> str;
	int len = str.length();
	int cnt = 0;
	for(int i = 0; i < len/2; ++i) {
		if(str[i] != str[len-i-1]) {
			cnt++;
		}
	}    	
	if(cnt > 1 || (cnt == 0 && (len % 2 == 0))) {
		cout << "NO" << endl;
	}
	else {
		cout << "YES" << endl;
	}
	return 0;
}


A. Mike and palindrome

#include <bits/stdc++.h>
#define endl "\n"

using namespace std;
const int MAXN = 50 + 7;

int main() {
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    string str[MAXN];
    for(int i = 0; i < n; ++i) str[i] = "";
    int ans = 1e8;
    for(int i = 0; i < n; ++i) {
        cin >> str[i];
    }
    bool hasSol = true;
    for(int i = 0;i < n; ++i) {
        int tmp = 0;
        for(int j = 0; j < n; ++j) {
            if(i == j) continue;
            bool flag = false;
            for(int k = 0; k < str[j].length(); ++k) {
                if(str[j].substr(k, str[j].length() - k) + str[j].substr(0, k) == str[i]) {
                    tmp += k;
                    flag = true;
                    break;
                }
            }
            if(!flag) {
                hasSol = false;
                break;
            }
        }
        if(!hasSol) {
            break;
        }
        ans = min(ans, tmp);
    }
    if(hasSol) {
        cout << ans << endl;
    }
    else {
        cout << "-1" << endl;
    }
    return 0;
}

C. Mike and gcd problem

#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
const int MAXN = 100000 + 7;
int num[MAXN];

int gcd(int a, int b) {
    return a == 0 ? b : gcd(b%a, a);
}

int main() {
    ios::sync_with_stdio(false);
    //freopen("in.txt", "r", stdin);
    / freopen("out.txt", "w", stdout);
    int n, g = 0;
    while(cin >> n) {
    	for(int i = 0; i < n; ++i) {
        cin >> num[i];
        g = gcd(g, num[i]);
    }
    if(g > 1) {
        cout << "YES\n0" << endl;
        return 0;
    }
    int s = 0, c = 0;
    for(int i = 0; i <= n; ++i) {
        if(num[i] % 2 == 0) {
            if(c % 2 == 0) {
                s += c/2;
            } else {
                s += c/2 + 2;
            }
            c = 0;
        } else c++;
    }
    cout << "YES\n" << s << endl;
    }
    return 0;
}


D. Mike and distribution

#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
const int MAXN = 100000 + 7;
pair<pair<int, int>, int > p[MAXN];
bool tag[MAXN];
int main() {
   	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	ios::sync_with_stdio(false);
	int n;
	cin >> n;
	for(int i = 1; i <= n; ++i) cin >> p[i].first.first;
	for(int i = 1; i <= n; ++i) cin >> p[i].first.second;
	for(int i = 1; i <= n; ++i) p[i].second = i;
	sort(p+1, p+n+1);
	int cnt = n - 1;
	if(n % 2 == 0) cnt = n-2;
	for(int i = 1; i <= cnt; i += 2) {
	    if(p[i].first.second < p[i+1].first.second) {
	    	tag[p[i].second] = true;
	    } else {
	     	tag[p[i+1].second] = true;
	    }
	}
	cout << n/2 + 1 << endl;
	bool flag = false;
	for(int i = 1; i <= n; ++i) {
	     if(!flag && !tag[i]) {
	     	flag = true;
	     	cout << i ;
	     } else if(flag && !tag[i]) {
	      	cout << " " << i;
	     }
	}
	return 0;
}



内容概要:本文档为《400_IB Specification Vol 2-Release-2.0-Final-2025-07-31.pdf》,主要描述了InfiniBand架构2.0版本的物理层规范。文档详细规定了链路初始化、配置与训练流程,包括但不限于传输序列(TS1、TS2、TS3)、链路去偏斜、波特率、前向纠错(FEC)支持、链路速度协商及扩展速度选项等。此外,还介绍了链路状态机的不同状态(如禁用、轮询、配置等),以及各状态下应遵循的规则和命令。针对不同数据速率(从SDR到XDR)的链路格式化规则也有详细说明,确保数据包格式和控制符号在多条物理通道上的一致性和正确性。文档还涵盖了链路性能监控和错误检测机制。 适用人群:适用于从事网络硬件设计、开发及维护的技术人员,尤其是那些需要深入了解InfiniBand物理层细节的专业人士。 使用场景及目标:① 设计和实现支持多种数据速率和编码方式的InfiniBand设备;② 开发链路初始化和训练算法,确保链路两端设备能够正确配置并优化通信质量;③ 实现链路性能监控和错误检测,提高系统的可靠性和稳定性。 其他说明:本文档属于InfiniBand贸易协会所有,为专有信息,仅供内部参考和技术交流使用。文档内容详尽,对于理解和实施InfiniBand接口具有重要指导意义。读者应结合相关背景资料进行学习,以确保正确理解和应用规范中的各项技术要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值