https://atcoder.jp/contests/abc106/tasks/abc106_b

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,b[200005];
int a,ab,abc,t=1;
//int dp[100005][100005];
int p[]={0,3*5*7,3*5*9,3*5*11,3*7*9,3*5*13};
signed main()
{
	sort(p,p+6);
	//for(int i=0;i<6;i++)cout<<p[i]<<"&";
	cin>>n;
	for(int i=5;i>=0;i--)
	{
		if(n>=p[i]){cout<<i;return 0;}
	}
	//cout<<0;
}
//差分就对了
//ans就是0-0的个数
//sum为1到下一个为1的个数
//……
//a[i]=m-1,a[j]=m-1,说明差分值为0,求个数;
【問題概要】 縦 $H$ 行、横 $W$ 列のマスがあります。 上から $i$ 行目、左から $j$ 列目のマスを $(i,j)$ とします。 最初、すべてのマスは白色であり、マス $(i,j)$ は $C_{i,j}$ という文字が書かれています。 あなたは、以下の操作を好きな回数だけ行うことができます。 操作: 黒色を塗られたマス $(i,j)$ を選び、以下のいずれかの操作を行う。 (1) $C_{i,j}$ を $1$ 減らす。 (2) $C_{i,j}$ を $1$ 増やす。 ただし、この操作を行う際には、必ずしも $C_{i,j}$ が $0$ 以上である必要はありません。 操作後、すべてのマスが白色になっている場合、操作回数の最小値を求めてください。 【制約】 ・$1 \leq H,W \leq 50$ ・$0 \leq C_{i,j} \leq 10^{9}$ ・$C_{i,j}$ は整数である。 ・少なくとも $1$ つのマスには文字が書かれている。 【入力】 入力は以下の形式で標準入力から与えられる。 $H$ $W$ $C_{1,1}$ $C_{1,2}$ ... $C_{1,W}$ $C_{2,1}$ $C_{2,2}$ ... $C_{2,W}$ ... $C_{H,1}$ $C_{H,2}$ ... $C_{H,W}$ 【出力】 操作回数の最小値を出力せよ。 【入力例】 3 3 3 1 4 1 5 9 2 6 5 【出力例】 2 【入力例】 3 3 1 1 1 1 1 1 1 1 1 【出力例】 0 【入力例】 4 4 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 【出力例】 2 【入力例】 5 5 0 0 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 【出力例】 0 【解法】 まず、全体の合計を求めます。 次に、全体の合計が $0$ の場合、操作回数は $0$ となります。 全体の合計が $1$ 以上の場合、以下の操作を行います。 1. 全体の合計を $2$ で割り、切り捨てた値を $S$ とします。 2. 全体の合計が奇数の場合、$S$ を $1$ 増やします。 3. 以下の操作を繰り返します。 1. 最大値を取るマスを選び、そのマスの値を $2$ 減らします。 2. 上記操作によって、全体の合計が $S$ 以下になる場合、操作回数を出力して終了します。 上記操作によって、全体の合計が $S$ 以下になることが証明できます。 また、上記操作によって操作回数が最小になることが証明できます。 【コード】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值