二分查找/暴力 Codeforces Round #166 (Div. 2) B. Prime Matrix
/*
二分查找/暴力:先埃氏筛选预处理,然后暴力对于每一行每一列的不是素数的二分查找最近的素数,更新最小值
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN = 5e2 + ;
const int MAXM = 1e6 + ;
const int INF = 0x3f3f3f3f;
int a[MAXN][MAXN];
int mn_r[MAXN];
int mn_c[MAXN];
bool is_prime[MAXM];
int prime[MAXM];
int n, m, x, y;
int tot; void solve(void)
{
for (int i=; i<=1e6; ++i) is_prime[i] = true;
is_prime[] = false;
for (int i=; i<=1e6; ++i)
{
if (is_prime[i])
{
prime[++tot] = i;
for (int j=i*; j<=1e6; j+=i) is_prime[j] = false;
}
}
} bool check_r(void)
{
memset (mn_r, , sizeof (mn_r));
bool ok = true;
for (int i=; i<=n; ++i)
{
for (int j=; j<=m; ++j)
{
if (!is_prime[a[i][j]])
{
ok = false; mn_r[j]++;
}
}
} return ok;
} bool check_c(void)
{
memset (mn_c, , sizeof (mn_c));
bool ok = true;
for (int j=; j<=m; ++j)
{
for (int i=; i<=n; ++i)
{
if (!is_prime[a[i][j]])
{
ok = false; mn_c[j]++;
}
}
} return ok;
} int sum_r(void)
{
int ans = INF; int tmp = ;
for (int i=; i<=n; ++i)
{
tmp = ; bool ok = true;
for (int j=; j<=m; ++j)
{
if (!is_prime[a[i][j]])
{
int p = lower_bound (prime+, prime++tot, a[i][j]) - prime;
if (p <= tot) tmp += prime[p] - a[i][j];
else {ok = false; break;}
}
}
if (ok) ans = min (ans, tmp);
} return ans;
} int sum_c(void)
{
int ans = INF; int tmp = ;
for (int j=; j<=m; ++j)
{
tmp = ; bool ok = true;
for (int i=; i<=n; ++i)
{
if (!is_prime[a[i][j]])
{
int p = lower_bound (prime+, prime++tot, a[i][j]) - prime;
if (p <= tot) tmp += prime[p] - a[i][j];
else {ok = false; break;}
}
}
if (ok) ans = min (ans, tmp);
} return ans;
} int main(void) //Codeforces Round #166 (Div. 2) B. Prime Matrix
{
// freopen ("B.in", "r", stdin); solve ();
while (scanf ("%d%d", &n, &m) == )
{
for (int i=; i<=n; ++i)
{
for (int j=; j<=m; ++j)
scanf ("%d", &a[i][j]);
} if (check_r () || check_c ()) {puts (""); continue;}
else printf ("%d\n", min (sum_r (), sum_c ()));
} return ;
}
二分查找/暴力 Codeforces Round #166 (Div. 2) B. Prime Matrix的更多相关文章
- 数论/暴力 Codeforces Round #305 (Div. 2) C. Mike and Frog
题目传送门 /* 数论/暴力:找出第一次到a1,a2的次数,再找到完整周期p1,p2,然后以2*m为范围 t1,t2为各自起点开始“赛跑”,谁落后谁加一个周期,等到t1 == t2结束 详细解释:ht ...
- 暴力 Codeforces Round #305 (Div. 2) B. Mike and Fun
题目传送门 /* 暴力:每次更新该行的num[],然后暴力找出最优解就可以了:) */ #include <cstdio> #include <cstring> #includ ...
- 暴力 Codeforces Round #183 (Div. 2) A. Pythagorean Theorem II
题目传送门 /* 暴力:O (n^2) */ #include <cstdio> #include <algorithm> #include <cstring> # ...
- 数学/找规律/暴力 Codeforces Round #306 (Div. 2) C. Divisibility by Eight
题目传送门 /* 数学/暴力:只要一个数的最后三位能被8整除,那么它就是答案:用到sprintf把数字转移成字符读入 */ #include <cstdio> #include <a ...
- 构造+暴力 Codeforces Round #283 (Div. 2) B. Secret Combination
题目传送门 /* 构造+暴力:按照题目意思,只要10次加1就变回原来的数字,暴力枚举所有数字,string大法好! */ /************************************** ...
- Codeforces Round #166 (Div. 2) A. Beautiful Year【暴力枚举/逆向思维/大于当前数且每个位数不同】
A. Beautiful Year time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces Round #540 (Div. 3) C. Palindromic Matrix 【暴力】
任意门:http://codeforces.com/contest/1118/problem/C C. Palindromic Matrix time limit per test 2 seconds ...
- 【二分答案】Codeforces Round #402 (Div. 2) D. String Game
二分要删除几个,然后暴力判定. #include<cstdio> #include<cstring> using namespace std; int a[200010],n, ...
- codeforces水题100道 第十三题 Codeforces Round #166 (Div. 2) A. Beautiful Year (brute force)
题目链接:http://www.codeforces.com/problemset/problem/271/A题意:给你一个四位数,求比这个数大的最小的满足四个位的数字不同的四位数.C++代码: #i ...
随机推荐
- Python中文GBK编码解决实例
http://eatsalt.blog.163.com/blog/static/879402662009420508748/ #coding:gbk l=['我'.decode('gbk'),'我'. ...
- css中高度比img多出4px的问题
一句话概括:为什么<a>标签比里面的img高度多出4px 的问题,主要还是由于 img是inline element, it's height is caculated different ...
- SQL - 创建一个学生表,要求有主键约束和非空约束
CREATE TABLE [dbo].[Student] ( [ID] [int] NOT NULL, [Name] [nchar](10) NOT NULL, [Age] [int] NOT NUL ...
- js实现的美女瀑布流效果代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- php事务操作示例
<?php //数据库连接 $conn = mysql_connect('localhost', 'root', '');mysql_select_db('test', $conn); /* 支 ...
- IDEA失效的解决办法
1.根据下图进行操作即可解决
- 清理一下电脑垃圾,打开Eclipse发现左边的所有项目消失了
使用360清理一下电脑垃圾,打开Eclipse发现左边的所有项目消失了,但在相应的workspace能够找到项目,这个问题已经是第三次遇到了(预计是被360清理掉Eclipse的一些部署或配置文件所导 ...
- java 编码设置
- Android无法自动创建USB打印机节点/dev/usb/lp0【转】
本文转载自:http://blog.csdn.net/u013686019/article/details/50165059 Android: 4.4.4 一.问题分析 当把USB打印机插入Andro ...
- 集成到Buildroot中的Helloword程序【转】
本文转载自:http://www.openloongson.org/forum.php?mod=viewthread&tid=85 本帖最后由 gt945 于 2015-7-5 17:06 编 ...