UVaOJ 196 - Spreadsheet

UVa Online Judge 西班牙Valladolid 在线判官 和 uDebug使用简单教程 udebug使用在后面 https://uva.onlinejudge.org/ 1、这是主界面,如果你还没有账号,那么就点击图中的register。 2、然后就是填写信息,邮箱要用gmail,信息填写完成后点击下方的register 3、之后打开邮箱查看接受的邮件,并点击其中的链接完成注册确认,之后会转到uva oj,如果页面显示 your account is now acti... 阅读详情


——by A Code Rabbit


Description

输入一张电子表格,请你把单元格填上的函数计算出来,填上数字输出。

函数的形式都是,其他单元格上的数字相加,并且保证没有求不出来的函数。


Types

Date Structure :: Graphs


Analysis

把单元格当作点,单元格之间的关系当作边,变成一张图。

这题的求解就变成了,去遍历一张图的每一个点,而函数单元格要在其参数走到之后才能走到。

所以拓扑排序,或者是暴力什么的,都可以。

但是要注意,虽然不知道测试数据怎么样,但是题目的数据规模有点吓人,是1000 * 1000的点。

如此多的点无法用一张邻接表来存储,需要把函数单元格映射到链表上,用链表来存储图的边。

这题的难点就是在输入表格的时候,如何用二维数组映射链表来存储(其实就是广义表)。

不过简单的地方就是,OJ上好似没有特别恶心的测试点(POJ上甚至明显WA的代码都可能AC)。


Solution

// UVaOJ 196
// Spreadsheet
// by A Code Rabbit

#include <cstdio>
#include <cstring>
#include <cctype>

const int LIMITS = 1234;
const int LIMITS_NODE = 1000000;

int t;

struct Cell {
    int value;
    int index;
};

Cell spreadsheet[LIMITS][LIMITS];
int n, m;

struct Node {
    int x;
    int y;
    int succ;
};

Node node[LIMITS_NODE];
int num_node;

bool IsLetter(char ch);
void Process(int x, int y, char* str);
int GetValue(int x, int y);

int main() {
    scanf("%d", &t);
    while (t--) {
        // INIT.
        num_node = 0;
        // Inputs.
        scanf("%d%d", &n, &m);
        getchar();
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                char str[100];
                scanf("%s", str);
                Process(i, j, str);
            }
            getchar();
        }
        // Get the values of cells of the spreadsheet.
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (spreadsheet[i][j].index != -1) {
                    GetValue(i, j);
                }
            }
        }
        // Outputs.
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n - 1; ++j) {
                printf("%d ", spreadsheet[i][j].value);
            }
            printf("%d\n", spreadsheet[i][n]);
        }
    }

    return 0;
}

void Process(int x, int y, char* str) {
    if (str[0] != '=') {
        sscanf(str, "%d", &spreadsheet[x][y].value);
        spreadsheet[x][y].index = -1;
    } else {
        spreadsheet[x][y].index = num_node;
        int pos = 1;
        while (pos < strlen(str)) {
            if (isalnum(str[pos])) {
                Node& new_node = node[num_node];
                new_node.x = 0;
                new_node.y = 0;
                while (isalpha(str[pos])) {
                    new_node.y = new_node.y * 26 + str[pos] - 'A' + 1;
                    pos++;
                }
                while (isdigit(str[pos])) {
                    new_node.x = new_node.x * 10 + str[pos] - '0';
                    pos++;
                }
                
            }
            node[num_node].succ = num_node + 1;
            ++num_node;
            ++pos;
        }
        node[num_node - 1].succ = -1;
    }
}

int GetValue(int x, int y) {
    if (spreadsheet[x][y].index == -1) {
        return spreadsheet[x][y].value;
    } else {
        int sum = 0;
        int index = spreadsheet[x][y].index;
        while (index != -1) {
            sum += GetValue(node[index].x, node[index].y);
            index = node[index].succ;
        }
        spreadsheet[x][y].value = sum;
        spreadsheet[x][y].index = -1;
        return sum;
    }
}


下载PDF

参考资料:无


探索计算机算法与问题解决:UVa在线评判系统解析 本文以UVa在线评判系统中的问题列表为例,深入探讨了计算机算法和问题解决的多样性。通过对不同问题的描述和分类,我们不仅能了解到算法在实际应用中的广泛性,还能体会到算法设计和问题解决的思维过程。 阅读详情

相关推荐

uvaoj 习题题目

主要是uvaoj习题相关题目 练习题目

如何高效地使用 UVa OJ 来进行练习?

由于UVa OJ的创建者Miguel Ángel Revilla教授已于2018年4月去世,而且UVa OJ过于老旧,兼之又是国外网站,打开非常缓慢,导致练习时阅读题目非常不便。不过由于国内IOI和ACM/ICPC的逐渐普及,有许多手段可以缓解这种情况,以下介绍三种方法。 (1)UVa Arena(https://github.com/dipu-bd/UVA-Arena)。一款由编程爱好者Sudipto Chandra Dipu开发的软件,专门用来支持UVa OJ,可以通过此软件一次性下载UVa OJ上的所

寂静山林 1万+

uva OJ 题目分类

世界著名大学UVA OJ平台上的题目部分分类,分的不好请原谅。

UVa Online Judge(UVA OJ)

UVa Online Judge(UVA OJ)

青少年趣味编程 2842

STM32F4XX软件模拟I2C实现MPU6050姿态数据采集

本文详细介绍了在STM32F4XX平台上通过软件模拟I2C驱动MPU6050传感器实现姿态数据采集的完整方案。内容涵盖软件I2C的GPIO配置、核心通信函数实现、MPU6050寄存器配置详解以及数据读取处理流程,为硬件资源受限的嵌入式应用提供了灵活的解决方案,并分享了调试技巧与常见问题处理方法。

butter的博客 677

Win10下Altera USB-Blaster驱动安装详解:禁用数字签名与排查指南

在嵌入式开发和FPGA调试过程中,驱动安装是工程师绕不开的环节,尤其是当操作系统对驱动签名有严格限制时,硬件往往无法被正常识别。数字签名是系统验证驱动程序来源和完整性的重要机制,Win10出于安全考虑,默认拒绝加载未经签名的驱动,这正是Altera USB-Blaster下载器在设备管理器中显示未知设备或黄色感叹号的根本原因。通过理解设备管理器的排查逻辑,掌握临时禁用驱动强制签名或开启测试模式的方法,配合正确的驱动文件路径选择与手动安装操作,即可解决Quartus无法检测到下载器的问题。这一流程同样适用于许

weixin_29164497的博客 245

ACM

(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO2012年09月17日 22:17:50 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成。打牢基础,厚积薄发。 一、UVaOJ http://uva.onlinejudge.org  西班牙Valladolid大学的程

linshixina的专栏 1519

Transformer入门(一)——结构

Transformer入门介绍篇,分别介绍了Transformer的总体结构与每个模块的实现原理

yeen123的博客 9424

关于OJ系列文章的说明

什么是UVa OJ? UVa OJ(英文)是西班牙巴利亚多利德大学提供的一套在线评判系统(OJ)。它提供多达近3000道ACM算法题,而且还在增加。任何人在免费注册后都可以浏览题目和提交自己的解答程序。服务器会自动编译你提交的代码,用特殊的数据(不是题目中的Test Case)进行测试,并立即做出评判。如果程序在限定条件内运行出符合要求的结果,系统会给出运行时间和下列结果: 正确(Acce...

weixin_30332241的博客 337

win11 labelme 汉化菜单

【代码】win11 labelme 汉化菜单。

一直记录 1169

【OpenClaw从入门到精通】第23篇:OpenClaw办公自动化实战—报表生成+文档批量处理+跨系统同步(2026实操进阶版)

本文聚焦OpenClaw在办公自动化场景的进阶应用,针对职场中高频且重复的报表生成、文档批量处理、跨系统数据同步三大痛点,提供从环境搭建、原理讲解到完整代码实现的全流程实操指南。方案基于Python生态工具链(pandas、Playwright、PyPDF2等)与OpenClaw的低代码编排能力,兼顾新手入门与进阶提升——新手可直接复用代码快速落地,进阶读者可学习流程编排逻辑进行二次开发。所有案例均基于真实办公场景设计,部分虚拟场景已明确标注,代码经本地环境验证可复现。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 965

【UVaOJ】196 - Spreadsheet

Spreadsheet  In 1979, Dan Bricklin and Bob Frankston wrote VisiCalc, the first spreadsheet application. It became a huge success and, at that time, was the killer application for the Apple

sduzh的专栏 791

用 OP-TEE 给 AI 模型“上锁”:密文存储、TEE 解密放行、推理后销毁(实战可落地)

本文提出一种基于OP-TEE的AI模型保护方案,通过两级密钥体系确保模型静态存储为密文,运行时仅在TEE内解密。方案采用KEK+DEK架构,DEK永不出TEE,支持分块解密与可验证擦除。该方案能有效防御静态分析、应用层逆向等威胁,但需承认其物理级攻击的局限性。文章详细描述了端到端架构、文件格式设计及TA实现要点,包括密钥管理、分块解密策略和销毁机制,为设备侧AI部署提供了工程可行的安全解决方案。

Interview_TC的博客 288

在线评测系统介绍

在线评测系统(Online Judge,OJ)为平时练习和网上竞赛提供了一个很好的平台。历史最悠久、最著名的OJ:西班牙Valladolid大学的UVaOJ, 网址为http://uva.onlinejudge.org/ (5) 。除了收录了早期的ACM/ICPC区域比赛题目之外,这里还 经常邀请世界顶尖的命题者共同组织网上竞赛,吸引了大量来自世界各地的高手同场竞技。 其他著名的OJ包括国内

lemisky的博客 4110

SAP S/4HANA Cloud 管理员业务角色创建实战:基于 SAP_BR_ADMINISTRATOR 模板的一站式指南

摘要:SAP S/4HANA Cloud新系统初始登录时常见Fiori Launchpad无磁贴的问题,这是由于缺乏合适的业务角色分配。本文介绍了通过预交付的SAP_BR_ADMINISTRATOR模板创建管理员角色的完整流程,包括业务用户、业务角色和业务目录的核心概念解析。重点说明了直接使用模板的风险,并提供了从模板创建自定义管理员角色的详细步骤(4.1-4.3),以及权限限制设置的注意事项。文中还分享了一个实际项目案例,强调正确配置管理员角色对后续权限体系建设的关键作用。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200

深度强化学习调参技巧:以DQN、DDPG、TD3、PPO、SAC等算法为例

深度强化学习调参技巧:以D3QN、DDPG、TD3、PPO、SAC算法为例

丨汀、的博客 3442

uva oj起步

参加完HW软件训练营,10天培训下来收获了很多。感触最深的是:实践少,错误多。究其原因:自身代码量不足,编的少导致编程时bug不断。来同组科班出身的复旦交大的同学代码能力明显高我n个数量级。       作为学电子半路出家我,压力山大。。。没有过硬的编程能力以后的开发之路只怕是越来越窄。 虽然暂时落后,但我坚信勤能补拙,努力点慢慢的我可以超过他们。      身边的同学推荐我UVA oj来提

shuzjd的专栏 6060

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

UVaOJ

#include #include #include using namespace std; struct node { int r,c; }matrix[200]; char s[1000]; int main() { int n,i,sum; char ch; scanf("%d",&n); node temp,temp2; bo

u010012764的专栏 1357

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

UVaOJ 112道题目-入门

1、110102/10189 Minesweeper (扫雷) 题意:给出N*M的方块内容,计算每个安全方块内的四周八个点共有多少地雷 扫描四周八个点时可以用到方向数组 #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using ...

weixin_30302609的博客 314

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

转载:ACM题目难度分级列表

# ID Title Solved by Difficulty 1 100 The 3n + 1 problem 26485 1 2 102 Ecological Bin Packing 10608 2 3 10071 Back to High School Physics 9554 3 4 10055 Has...

weixin_30781775的博客 4981

通过vjudge刷Uva的题目(解决Uva网站打开慢的问题)

最近在跟着算法竞赛入门经典刷题,发现Uva网站打开超级慢,进个主页面都需要好几秒。后来发现可以通过vjudge网站刷Uva的题目,很是方便,在这mark一下,顺便做一下推荐。 vjudge网址:https://vjudge.net,点击后会进入vjudge网站主页,如下图: 可以发现vjudge支持包括POJ、Uva、ZOJ等等一系列OJ网站的题目评测。第一次通过该网站刷题需要先注册一个账...

日沉云起的博客 2万+

本周UVaOJ训练

由于前半个学期有各种各样的课,没有多少时间刷多少题。这周做了两道基础题目,不过还是得到了不少wa…… 第一题是UVa的401 palindrome 这道题不仅要判断回文串,还要判断题目里面自己定义的自己跟自己成镜像关系。所谓镜像关系就是像A,如果把A反过来看,还是A。 #include #include #include using namespace std; char firstmst

char256 1089

(转)(Step1-500题)UVaOJ(算法比赛入门经典+挑衅编程)+USACO

下面给出的题目有近500题,作为ACMer Training Step1,用1年到1年半时候完成。 打牢根蒂根基,厚积薄发, 。   一、UVaOJ http://uva.onlinejudge.org       西班牙Valladolid大学的法度在线评测体系,是汗青最悠长、最有名的OJ。   二、《算法比赛入门经典》 刘汝佳  (UVaOJ  351道题)

Kizuki 2408

UVa OJ

AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume 0. Getting Started1.10055 - Hashmat the Brave Warrior题目大意:输入两个数(在long范围内),求它们之差的绝对值。#include using namespace std; in

selfcontroler 1301

Uva oj (算法入门经典) 排序与检索系列水题系列

Uva10420 - List of Conquests 题意就是首先给出一个n,表示字符的行数,下面n行字母,开头一个单词国家名字,后面一串人名,要你统计出每个国家人出现的次数,并按字母序输出。   用map容器写的,map容器本身的特性,很好用,代码: #include #include #include #include using namespace std; int main

大神养成中..... 1771

UVaOJ 101 - The Blocks Problem

——by A Code Rabbit Description 平台上摆放着个 n 个积木(编号由 0 到 n – 1),初始位置为 0 到 n - 1。 你要模拟一个机械手臂的操作,机械手臂有四种指令: move a onto b:将 a 和 b 上的积木都放回初始位置,然后把 a 放在 b 上(a、b 紧贴着)。move a over b:将 a 上的积木

A Code Rabbit 816
上一篇: UVaOJ 10305 - Ordering Tasks
下一篇: HDOJ 1575 - Tr A
Ra_WinDing
博客等级 码龄15年 50粉丝 125原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值