• [1641] 错误的算法

  • 时间限制: 5000 ms 内存限制: 65535 K
  • 问题描述
  • 有道题目是这样的:

    输入一个 n 行 m 列网格,找一个格子,使得它所在的行和列中所有格子的数之和最大。如果答
    案不唯一,输出任意解即可。比如,在下面的例子中,最优解是(1,3),即第一行和的三列的交
    点(行从上到下编号为 1~n,列从左到右编号为 1~m),所有 7个数之和为 35。

    快要比赛的时候,有一个裁判想到了这样一个算法: 

    首先找一行 r(1<=r<=n) 使得该行所有数之和最大,然后找一列 c(1<=c<=m) 使得该列 所有数之和最大,最后直接输出(r,c)。如果有多个满足条件的 r,输出最小的 r。对 于 同样处理。

    显然,这个算法是错的,但它竟然通过了大部分测试数据!你能找出那些让这个错误算法得到 正确结果的“弱”数据,以便裁判们改进这些数据吗?

  • 输入
  • 输入包含不超过 100 组数据。每组数据第一行为两个整数 n, m (1<=n<=500, 1<=m<=500),即行 数和列数。以下 n 行每行包含 m 个 1~100 的整数。输入的总大小不超过 2MB。
  • 输出
  • 对于每组数据,如果错误算法能得到正确结果,输出"Weak",否则输出"Strong"。
  • 样例输入
  • 4 4
    5 5 5 5
    1 1 5 1
    1 1 5 1
    1 1 5 1
    5 4
    2 5 1 1
    1 1 9 1
    1 1 1 1
    1 1 1 1
    1 1 1 1
  • 样例输出
  • Case 1: Weak
    Case 2: Strong

昨晚做到十二点,经过聚聚的耐心教导(好吧我还是没听懂)后来去睡觉时又想了一会儿,知道了大神所说的不需要求正确解的意义(只要求正确解对应的SUM即可)。因为粗心忽略了题中的条件解可以为多个。因此只需证明题中裁判算法所给的解只是运气成分,碰巧正确而已。尼玛早上起来打开笔记本改了下代码果然AC了。我药丸啊

1、用题中所给条件算出裁判要的解。

2、用正确算法算出最优解们所符合的那个行列SUM值最大和MAX。

3、用裁判的解代入计算SUM的公式,要是错误,说明裁判的解错(Strong)。否则则是Weak。

代码:

#include<iostream>
#include<stdio.h>
using namespace std;
int list[510][510];
int hang,lie;
int sum1(int x,int y)
{
int i,j,sum=0;
for(i=x-1;i>=1;i--)
{
sum+=list[i][y];
}
for(i=x+1;i<=hang;i++)
{
sum+=list[i][y];
}
for(i=y-1;i>=1;i--)
{
sum+=list[x][i];
}
for(i=y+1;i<=lie;i++)
{
sum+=list[x][i];
}
return (sum+list[x][y]);
}
int main(void)
{
int i,j,ar,ac,sum,inr,inc,max,co=0,tsum,rc;
while(cin>>hang>>lie)
{
co++;
for (i=1 ;i<=hang ;i++)
{
for (j=1; j<=lie; j++)
cin>>list[i][j];
}
max=0;
inr=1;
for (i=1 ;i<=hang ;i++)
{
sum=0;
for (j=1; j<=lie; j++)
{
sum+=list[i][j];
}
if(sum>max)
{
max=sum;
inr=i;
}
}
max=0;
inc=1;
for (j=1 ;j<=lie ;j++)
{
sum=0;
for (i=1; i<=hang; i++)
{
sum+=list[i][j];
}
if(sum>max)
{
max=sum;
inc=j;
}
}
max=0;
for(i=1;i<=hang;i++)
{
for(j=1;j<=lie;j++)
{
tsum=sum1(i,j);
if(tsum>max)
{
max=tsum;
}
}
}
if(sum1(inr,inc)==max)
{
printf("Case %d: Weak\n",co);
}
else
{
printf("Case %d: Strong\n",co);
}
memset(list,0,sizeof(list));
}
return 0;
}

NOJ 1641 错误的算法(模拟)的更多相关文章

  1. CSU 1779: 错误的算法【矩阵/模拟】

    Description 有道题目是这样的: 输入一个 n 行 m 列网格,找一个格子,使得它所在的行和列中所有格子的数之和最大.如果答 案不唯一,输出任意解即可.比如,在下面的例子中,最优解是(1,3 ...

  2. 虚存管理页面置换算法 — FIFO和RUL算法模拟实现

    本篇博文为追忆以前写过的算法系列第一篇(20081021) 温故知新 目的: 为了解决内存容量有限与多作业执行的冲突.运用了虚拟存储技术.能从逻辑上对内存进行扩充,达到扩充内存的效果.分页存储管理是实 ...

  3. python蒙特卡洛算法模拟赌博模型

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  4. 【BZOJ4837】LRU算法 [模拟]

    LRU算法 Time Limit: 6 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 小Q同学在学习操作系统中内存管理的 ...

  5. 【基础算法模拟+例题】-C++

    在漫长的刷题练习过程中,几乎所有稍微熟练一点的OIer都会,但是都几乎没有经过系统的学习,今天,我们就来讲讲模拟算法,也是为了复习emm. 定义? 定义?模拟还有什么定义吗? 那什么是模拟呢? 就是按 ...

  6. Kruskal算法模拟讲解

    Kruskal 算法是一个求最小生成树的算法,即求最小的开销等 算法可以这样,要求得最小生成树,那么n个节点只能包括n-1条边 所以我们应该转换为寻找这最短的n-1条边,因此,可以先对所有的 边进行从 ...

  7. Dijkstra算法模拟讲解

    dijkstra算法,是一个求单源最短路径算法 其算法的特点为: 层层逼进,有点类似宽度搜索的感觉 其需要的数据结构为:                  int map[N][N] 所有点之间的权表 ...

  8. 操作系统,银行家算法模拟实现(Windows 环境 C++)

    计算机操作系统课设需要,写了两个下午的银行家算法(陷在bug里出不来耽误了很多时间),参考计算机操作系统(汤子瀛) 实现过程中不涉及难度较大的算法,仅根据银行家算法的思想和步骤进行实现.以下为详细步骤 ...

  9. 【基础算法-模拟-例题-*校长的问题】-C++

    为什么在题目前面打上星号呢? 这道题的正解不是模拟! 正解树状数组! 正解树状数组! 正解树状数组! 重要的事情说够三遍了! 但是,歪解模拟因为数据水都能AC! 因为这道题放在模拟专题中,所以我们就讨 ...

随机推荐

  1. Maven无法引入自定义构件依赖的解决方案

    一般情况下,使用如下命令即可将自定义构件安装到本地仓库,供其他项目使用. mvn clean install 但是也有例外,今天我就分享一下我遇到问题,供相同遭遇的同学参考下. 我使用了父POM统一管 ...

  2. 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)

    在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除 ...

  3. jquery easy ui 1.3.4 内容组件(2)

    2.1.panel(面板) panel面板是easyui里面非常基础的一个内容组件,在我们后期学的tabs (选项卡).accordion(手风琴)这两种内容组件都依赖于panel组件.构建一个pan ...

  4. jQuery 重新温习 遗忘知识点

    解决jQuery和其他库的冲突 当把jQuery和其他JavaScript库(例如Prototype.MooTools或YUI)一起使用时 <script> jQuery.noConfli ...

  5. C#控制管理VisualSVN Server 分类: C# 2014-05-29 15:51 796人阅读 评论(0) 收藏

    VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...

  6. poj 1276 多重背包

    735 3 4 125 6 5 3 350 //735的最大额,3种,4个125,6个5,3个350 633 4 500 30 6 100 1 5 0 1 735 0 0 3 10 100 10 50 ...

  7. matlab练习程序(矩形变换为单连通形状)

    变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...

  8. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Que

    看错误提示就知道是因为SQL Server的Ad Hoc Distributed Queries组件被禁用了,这里我用的SQL Server版本是2005,只需要开启Ad Hoc Distribute ...

  9. Android Studio 1.0首次安装遇到的问题,无法下载SDK

    相信,在安装Android Studio的过程中会遇到很多问题,特别是第一次启动下载不了sdk.郁闷了吧. 可以去官网下载,也可以点击这里下载Android Studio和sdk. 一.不下载SDK启 ...

  10. asp.net控件开发基础(1)(转)原文更多内容

    asp.net本身提供了很多控件,提供给我们这些比较懒惰的人使用,我认为控件的作用就在此,因为我们不想重复工作,所以要创建它,这个本身便是一个需求的关系,所以学习控件开发很有意思. wrox网站上有本 ...