CF小组训练赛 Holiday 1

本文解析了三道编程题:中心对称矩阵判断、数字排序验证及水果购买最优与最劣策略,提供了清晰的解题思路与代码实现。

A. Super Agent

具体题目地址可以直接搜索题目标题
题目大意

判定一个字符矩阵是否中心对称

解题思路

水题。

#include<bits/stdc++.h>
using namespace std;
char a[5][5];
int main(){
	for(int i = 0; i < 3;i++){
		for(int j = 0;j < 3;j++){
			scanf("%c",&a[i][j]);
		}
		getchar();
	}
	int f = 1;
	for(int i = 0;i < 3;i++){
		for(int j = 0;j < 3;j++){
			if(a[i][j] != a[2 - i][2 - j]){
				f = 0;
				break;
			}
		}
	}
	if(f) puts("YES");
	else puts("NO");
	return 0;
}

B. Correct Solution?

具体题目地址可以直接搜索题目标题
题目大意

将数字n中的每一位数字重新排序,以获得不带前导零的最小可能数字,给定n与玩家猜的m,判定m是否是正确答案

解题思路

题目有巨坑。

  • The first line contains one integer n (0 ≤ n ≤ 109) without leading zeroes. The second lines contains one integer m (0 ≤ m ≤ 109) — Bob’s answer, possibly with leading zeroes.

所以,就有可能存在以下情况:
n=0,m=0; OK
n=0,m=00; WA
n=123456,m=0123456; WA
会卡这个前导0,非常恶心。

思路1 模拟
  • 代码相当繁琐,想要1try过,必须考虑很周全
#include<bits/stdc++.h>
using namespace std;
#define pb push_back

int get(int n){
	int m = n;
	int all = 0;
	int zero = 0;
	vector<int> v;
	while(m != 0){
		int t = m % 10;
		m /= 10;
		if(t != 0){
			v.pb(t);
		}else{
			zero++;
		}
		all++;
	}
	sort(v.begin(),v.end());
	int k = pow(10,all - 1);
	int re = 0;
	re += v[0] * k;
	k /= 10;
	while(zero != 0){
		k /= 10;
		zero--;
	}
	for(int i = 1;i < v.size();i++){
		re += v[i] * k;
		k /= 10;
	}
	return re;
}
int check(string s){
	int f = 1;
	if(s[0] == '0'){
		for(int i = 0;i < s.length();i++){
			if(s[i] != '0'){
				f = 0;
				break;
			}
		}
		if(f == 1){
			if(s.length() > 1){
				return -1;
			}else{
				return 0;
			}
		}else{
			return -1;
		}
	}
	int k = pow(10,s.length()-1);
	int r = 0;
	for(int i = 0;i < s.length();i++){
		r += (s[i] - '0') * k;
		k /= 10;
	}
	return r;
}
int main(){
	int n,m;
	cin >> n;
	string s;
	cin >> s;
	m = check(s);
	if(m == -1){
		puts("WRONG_ANSWER");
	}else if(n == 0){
		if(m == 0){
			puts("OK");
		}else{
			puts("WRONG_ANSWER");
		}
	}else{
		int x = get(n);
		//cout << x << endl;
		if(x != m) puts("WRONG_ANSWER");
		else puts("OK");	
	}
	return 0;
}
思路2 直接按照字符串处理
#include<iostream>
#include<string>
#include<stdio.h>
#include<algorithm>
using namespace std;

int main(){
    //freopen("x.txt","r",stdin);
    string a;
    string b;
    cin >> a;
    cin >> b;
    string res = "";
    sort(a.begin(),a.end());
    int len = a.length();
    int j = 0;
    for(int i = 0; i < len;i++){
        if(a[i] != '0'){
            res += a[i];
            j++;
        }
    }
    int x = len - j;
    string en = "";
    en += res[0];
    for(int p = 0;p < x;p++)
        en += "0";
    int ll = res.length();
    for(int p = 1;p < ll;p++)
        en += res[p];
    if(a == "0" && b == "0"){
        printf("OK\n");
    }else{
        if(en == b){
            printf("OK\n");
        }else{
            printf("WRONG_ANSWER\n");
        }
    }


    return 0;
}

C. Fruits

具体题目地址可以直接搜索题目标题
题目大意

A去买水果,但每个水果的价格标签还没有贴上去,问最好情况和最坏情况下,各需要多少钱

解题思路

水题。分两种情况,简单排序就可。

#include<bits/stdc++.h>
using namespace std;
int a[105];
int main(){
	int n,m;
	cin >> n >> m;
	string s;
	map<string,int> M;
	for(int i = 0; i< n;i++) scanf("%d",&a[i]);
	sort(a,a+n);
	for(int i = 0;i < m;i++){
		cin >> s;
		if(M.count(s) == -1){
			M[s] = 1;
		}else{
			M[s]++;
		}
	}
	vector<int> v;
	for(map<string,int>::iterator it = M.begin();it != M.end();it++){
		//cout << it->first << " "  << it->second << endl;
		v.push_back(it->second);
	}
	int good = 0;
	sort(v.begin(),v.end(),greater<int>() );
	int j = 0;
	for(int i = 0; i < v.size();i++){
		good += v[i] * a[j];
		j++;	
	}
	int bad = 0;
	sort(a,a+n,greater<int>());
	j = 0;
	for(int i = 0;i < v.size();i++){
		bad += a[j] * v[i];
		j++;
	}
	cout << good << " " << bad << endl;
	return 0;
}

剩下的题:
组赛
D是树状数组三维排序
E是贼恶心的思维题

以后必补

代码转载自:https://pan.quark.cn/s/9cde95ebe57a 横道图,亦称为甘特图,是一种可视化的项目管理手段,用于呈现项目的进度安排和时间框架。 在信息技术领域,特别是在项目执行与软件开发范畴内,横道图被普遍采用来监控作业、配置资源以及保障项目能按时交付。 此类图表借助水平条带图示来标示各个任务的起止时间点,使项目成员与管理者可以明确掌握项目的整体发展状况。 周期表或可指代计算机科学中的“作业调度周期表”或“资源配置周期表”。 在计算机系统中,作业调度是一项核心功能,它规定了哪个进程或线程能够在中央处理器上执行以及执行的具体时长。 周期表有助于系统管理者洞察作业的执行频率和资源使用状况,进而提升系统的运作效能和响应能力。 不仅如此,周期表也可能意指数据处理或研究中的周期性文档,如在金融分析中按期更新的市场信息文档。 在压缩文件“横道图,周期表.zip”内含的“横道图,周期表.doc”文件,很可能是对某个项目或任务管理的详尽阐述,涵盖利用横道图来制定和展示项目的时间进程,以及可能牵涉的周期性作业调度或资源配置情形。 文件或许包含以下部分:1. **项目简介**:阐述项目的目标、范畴、预期成效及参与项目的团队成员。 2. **横道图详述**:具体列出了项目中的各项任务,每个任务的启动与终止时间,以及它们之间的关联性。 横道图通常涵盖关键节点,这些节点是项目中的重要事件,象征重要阶段的实现。 3. **任务配置**:明确了每个任务的责任归属,使项目成员明晰自己的职责和截止日期。 4. **进展更新**:若文件是动态维护的,可能会记录项目的实际进展与计划进展的对比,有助于识别延误并调整计划。 5. **周期表探讨**:深入说明了周期性作业的调度,如定期的会议、报告递交、...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值