jzyzoj题目选做
Posted mark-x
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jzyzoj题目选做相关的知识,希望对你有一定的参考价值。
1025
P1815
一道贪心,喵?
好吧其实就是个贪心,最大值比较简单,最小值不太好搞看看代码自己理解
#include <bits/stdc++.h>
#define LL long long
using namespace std;
inline int read()
{
register int x = 0;
register char ch = getchar();
while( ch < '0' || ch > '9' ) ch = getchar();
while( ch >= '0' && ch <= '9' )
{
x = ( x << 3 ) + ( x << 1 ) + ch - '0';
ch = getchar();
}
return x;
}
int main()
{
LL n , x , y , k , xx , yy , w;
LL ans ;
while( scanf( "%lld" , & x ) == 1 )
{
xx = x , y = yy = read() , n = read();
//特判
if( n == 1 )
{
if( x > y ) puts("3 3");
else if( x == y ) puts("1 1");
else puts("0 0");
continue;
}
//max
w = n - 1;
k = min( n - 1 , x ) , x -= k , w -= k , ans = k * 3 ;
if( x > y ) ans += 3;
else if( x == y ) ans += 1;
ans += w;
printf("%lld " , ans );
//min
if( xx > yy )
{
n -- , ans = 3 ; //把所有的 x 都放到一个格子里,保证只赢一次
k = min( yy , n ) , ans += n - k; //再给剩下的格子尽可能的放 y
printf( "%lld
" , ans );
continue;
}
if( xx == yy )
{
if( n >= 3 && yy >= 3 )
{
// 同 xx > yy
n -- , ans = 3 ;
k = min( yy , n ) , ans += n - k;
printf( "%lld
" , ans );
}
else printf( "%lld
" , n ); //直接全部平局
continue;
}
// 对于xx<yy的情况
n -- ;
ans = 3 + n - ( min( n , yy ) ); // 把所有的 x 放在一个格子里,剩下的格子每个放一个 y
yy -= xx;
ans = min( ans , 1 + n - min( n , yy ) ); // 在一个格子里抵消掉所有的 x 后面的全部放 y
yy --;
ans = min( ans , n - min( n , yy ) ); // 在保证不会赢的情况下,尽可能的放 y
printf( "%lld
" , ans );
}
return 0;
}
以上是关于jzyzoj题目选做的主要内容,如果未能解决你的问题,请参考以下文章
JZYZOJ 1542 [haoi2015]str 矩阵乘法 dp
JZYZOJ1378 [noi2002]M号机器人 欧拉函数