**的比赛规则
& e$ y: S5 p+ w0 i2 C4 I& y
; }% e' e% J9 y为了促进各部门员工的交流,百度 (baidu) 举办了一场全公司范围内的 " 拳皇友谊赛 " ,负责组织这场比赛的是百度的超级 " 拳皇 " 迷 W.Z. W.Z 不想用传统的淘汰赛或者循环赛的方式,而是自己制定了一个比赛规则。 : K( B* H8 z% J- |
3 B* n: i) q& n, g% ~由于一些员工(比如同部门或者相临部门员工)平时接触的机会比较多,为了促进不同部门之间的交流, W.Z 希望员工自己组成不同组。不同组之间的每两个人都会进行一场友谊赛而同一组内的人则之间不会打任何比赛。 - l, y; b1 a5 T) `- W. H
1 V" j# J; G$ b7 h5 r- I$ O
比如 4 个人,编号为 1--4, 如果分为两个组并且 1,2 一个组, 3 , 4 一个组,那么一共需要打四场比赛: 1 vs 3,1 vs 4,2 vs 3,2 vs 4. 而如果是 1,2,3 一组, 4 单独一组,那么一共需要打三场比赛 : 1 vs 4,2 vs 4,3 vs 4. ; @6 x) S7 Q% _# |7 R6 \ L% c
% C7 k& O# e, ~- _% c7 G+ F
很快 W.Z 意识到,这样的比赛规则可能会让比赛的场数非常多。 W.Z 想知道如果有 N 个人 , 通过上面这种比赛规则,总比赛场数有可能为 K 场吗?比如 3 个人,如果只分到一组则不需要比赛,如果分到两组则需要 2 场比赛 , 如果分为三组则需要 3 场比赛。但是无论怎么分都不可能只需要 1 场比赛。 ) z2 G' ]$ [8 r( h
/ P) G2 j, C& s1 A( u相信作为编程高手的你一定知道该怎么回答这个问题了吧? 那么现在请你帮助 W.Z 吧。
- E( ]5 U' S: ^" u, z% Z3 |% m! n, {; U3 C
输入
\5 s9 Z1 K8 I( V; |- c# c8 Q% U. U: i c
每行为一组数据,包含两个数字 N, K 。 (0<N<=500, K>=0) 1 `3 ?/ G4 A8 q/ p! O" g
T& O. h5 i4 K( F9 t% y& A: q
输出 - M, F& @" c1 i$ K9 @5 f
Q4 y6 U3 [8 n$ B9 ]
对输入的 N,K 如果 N 个员工通过一定的分组方式可能会一共需要 K 场比赛,则输出 "YES", 否则输出 "NO", 每组数据占一行。 4 F7 G! g+ b% S: w4 a4 Y; g
! Y& u& R* u) e0 n. q
所有的输入输出均为标准输入输出。 + U4 p( j4 q7 [# d. f( l: ^0 _
0 q3 y( P( K6 J; e. c8 m! J例子 1 N8 C9 n7 s) o4 e2 X
9 b l8 P) w7 k3 K
输入样例
: l+ q$ U# y" u) z* _3 e4 V+ V- e, s4 c! H9 v/ Q; r0 l- T* d) e+ G9 z
2 0
. ^% Z% E; a, {
. t8 \. k- I' A8 D; e- _0 q* s2 1 3 K" O L1 N* m) B2 m
" ?; G) N; I7 F1 H x3 1 & d% N4 @" \5 L/ _5 y
. k0 o2 d& i8 i4 [$ p) }1 \* B! I3 2
% b' E2 c W' L# A$ ? 2 R3 B# i6 q. l% p/ Z, q
w4 V, p) `& t) V: A* H; `5 z
输出样例 / D" j' A! g# X' T/ z
8 {4 {3 d2 T6 R mYES " ~/ f+ H1 W* e" g4 t! A- C
8 Z% d9 T0 ^* {; t
YES
+ n; B5 }7 `$ p" x# e* r9 ]$ t/ l0 S
% D: `+ S* r4 j( yNO
0 w1 ?# b7 Z. T7 P _2 h
2 e# B/ F; D9 g. N, T2 ` p) IYES
4 E4 s' n, a, k4 { H E4 Qexample1: 3 w8 p6 |1 G1 o+ N$ L- ^, E
#include <cstdlib>
0 e* P; D6 ~. N$ F#include <iostream>
. I' r2 [, R) F6 }5 m#include <fstream>
) q+ }6 d3 Z1 j3 P9 ^#include <cmath>
3 S4 Y N! T2 ]$ cusing namespace std;+ t/ Y# ]0 U6 L2 k3 a
% w1 G4 Q" P9 Z$ ~2 J% Y* v R. o9 x* p" P# k1 e0 @
bool bt(int N,int K,int min,int count)- [: K b/ f' @! n) S- K P
{
, ]: k) K3 O3 m, c- ?, \ //cout<<N<<"|"<<min<<"|"<<count<<endl;
: R6 m4 M- y9 d/ h7 O for(int i=min;i<=(N+1)/2;i++)//zhu1 i$ k0 p/ J' R2 `- u
{
* Q4 p- d$ s5 _8 b int tmpc=count;
/ [$ i" S3 V N4 c' A3 ?$ Q for(int j=0;j<i;j++)3 m c- U% V% Z0 \: g6 V' J
tmpc+=N-i;% ^% n8 j3 p o
if(tmpc==K)return true;
$ h7 w0 V8 p8 m | //zhu2 N-i
* D( P4 \ H0 j0 S3 C1 G, M' U if(bt(N-i,K,i,tmpc))return true;
2 i" |. i0 x7 |# X. B& P }
! `' A6 ~% r% Q# U return false;) J& U% D/ B5 C$ F
}
; |. F' {" d$ }6 rint main(int argc, char *argv[])
# u# C$ q7 k9 \+ Z1 i/ b' C{
" y* r4 ^: @( \% J9 C+ \+ @" W9 r1 d //ifstream inf("input.txt");. G3 S% h: w; [# B/ v7 Q$ S
string str;3 i( x9 w3 H& q* `2 r: K
int N,K;
, v" o( R0 \8 N; ~- s* G int count;
, N @- o5 I5 E$ K+ z: W1 B //getline(inf,str);
! V3 F( R: `9 o$ ?' H. v getline(cin,str);
" V; n' w' y1 `( [ sscanf(str.c_str(),"%d %d",&N,&K); # u, j! a5 T7 _6 A# s5 t
if(bt(N,K,1,0))cout<<"YES"<<endl;
- |1 K. A N- b& M9 j else cout<<"NO"<<endl;
* E4 {' H6 Q; e5 u7 @3 c system("PAUSE");* X' a; E" E$ a9 n2 A1 t) o
return EXIT_SUCCESS;* u! M2 [6 e' C4 n- x/ V* Y
}
( e: K6 l$ @6 r4 u( M, m9 ?example2: //============================================================================
+ ^* k; H) p4 x+ y( y5 K// Name : 1.cpp
6 P% L0 S: F t// Author : Xusen Yin0 S( z. y$ f; R% \/ v, K+ ]; h
// Version :
1 @2 C) j; a R# m Z5 v x h// Copyright : Your copyright notice$ P: A6 H) ] R9 s0 q
// Description : **的规则) o- x) _% _/ z# [8 O5 n
//=========================================================================& F4 J j _0 l( L: H
#include <iostream>
. c+ d* X' O: S b4 `: l& R' E#include <bitset>
; z! f+ K7 K6 G& d+ Husing namespace std;
! v! S6 W7 j% i1 I0 d#define MAX 128
7 w! e" d& G; M8 Z( o! Q" pint main(){
/ {1 o0 I8 m- O: ^1 ^6 O int n = 0,k = 0;% x1 {7 l% P, p4 N
bitset<MAX> bAssert;. f/ B8 a# X# O# q0 }
cout << "请输入 N K (以 -1 , -1结束):" << endl;/ l7 q2 W3 A% ?, F
size_t j = 0;3 b% c$ }( @7 S$ ?" _. }
while(1){
, ?" \, Y' ^4 a% q cin >> n >> k;3 l. q0 D8 Q$ e& _6 c
if(n == -1 || k == -1)
2 j) i9 C5 l, O7 p break;
* G; l$ A* A; N- L6 Z) S+ r for(int i = 0 ; i <= n/2 ; i++)+ |2 J' Y, z* H( [( N( E
if(i * (n - i) == k){+ o {& G2 ]% L6 h
//是OK的
) Z; u. F3 i" \$ | bAssert.set(j);
# s! w4 s3 L6 y% A' a% N break;. P" V; G, G! I: _
}
5 J, J3 F+ r1 E5 i j++;
& i- q- R6 B# V }7 j _. r7 T$ f
for(size_t i = 0 ; i <= bAssert.count() ; i++){7 v, M6 V. m2 i& ^2 ^) p
if(bAssert.test(i))
$ O, V$ ~7 n& c1 g2 r; ?+ R cout << "YES" << endl;7 ^# w: ~9 W5 t- k
else( s: S v- A6 \$ s
cout << "NO" <<endl;' }) c1 a; b; e* T
}
; a! p ]- G8 C/ f return 0;* R y0 w6 r$ e3 Z* C
}
& B4 P2 |6 f; w! }. q
! h. y& Z; V) B0 k Vexample3:! Z( [7 V1 E8 U1 h; k3 m' K; \
import java.io.IOException;/ e" U9 q( Y' n) I. N* s) d
import java.util.Random;! ~9 h c4 r- a5 S/ M
6 \2 W3 z8 M+ ~5 X$ n
public class BtRaceRule
& l! B, \9 T T! F e( j) A0 }; ^{
8 y$ o F4 {6 q+ [9 I4 u& s4 ~ private static int p_number;//人数
2 E5 N, L- B8 j" o9 T$ F private static int r_number;// 比赛场数4 l8 I6 W, i7 l' `: R
public static void logic(int n,int m)
* R0 Y- U& Z- t6 B1 [" X {
0 ?/ E- R: O' b9 { int flag = 0;
3 z* I4 U3 J M+ u$ `8 H for(int i=0;i<=n/2;i++)3 B6 G! N; v3 F& |
{
% y# A7 h+ _1 W# Z0 u3 T0 t0 T& Y int j = n-i;
4 h9 v/ ]( f% ~ if(i*j==m)7 W- F( o, a H, Q6 S7 D/ x$ I+ C
{8 E7 y" `! o( T% W2 Y" c( g
flag = 1;
! n7 X% @3 }2 {& u }
$ u) M+ S; h, W$ T }
4 x. [9 h7 Q. ?8 N if(flag==1)
& A. q. ~5 k( W+ I7 A {
% [4 z2 u- d7 t' o$ I/ d" E System.out.println("Yes");
& v9 v) S& k' V( u }. U7 f+ b7 \. T7 _8 r3 m0 U
else
$ c1 u2 c8 L4 p8 C* @5 C6 n {
4 [( p$ M m( I- A/ ^' j x1 j( E" c System.out.println("No");
7 C2 c' g8 Y/ h% K- v" E }
7 }5 i5 {! i2 j4 }% {2 U6 m }
& {( b- \$ J$ x& m2 H p public static void main(String[] args) throws IOException
2 P# l: J- I$ R% A5 i {* d ?# E3 [- J4 D9 V0 z
BtRaceRule[] rule = new BtRaceRule[10];. P6 s# e) P& T. `; @
GetData data = new GetData();6 c; B. Z; C5 G7 v R2 j
System.out.println("输入比赛人数和可能的比赛场数:");" b# ?% C: Z+ h6 m/ Q# _
Random r = new Random();
# G" n" D9 m( N7 M for(int i=0;i<rule.length;i++)- P' R6 Q/ p# n& ~
{* E5 W- o- `7 O7 a2 \- C4 }
rule.p_number=Math.abs(data.integer());
) t* g7 F) j0 P/ r3 f; N6 p, K
0 q4 z V( N& w# @* O rule.r_number=Math.abs(data.integer());+ b1 @) W: [3 e& ~( L; E! I
* M F. }6 ?7 x" n$ X) f, m$ N3 Z System.out.println(rule.p_number+" "+rule.r_number);2 u3 j/ I8 l# G! X [- N) l) G
//输出一组分组和可能的比赛次数" C3 ` j$ o8 a2 B
logic(rule.p_number,rule.r_number);
' F" s& {. U7 {* Q //逻辑判断,并输出结果 yes or no 3 B! C5 A$ t }( [/ [
}
( d3 G/ d8 B. B" e1 j; n }; h3 [3 w( Z: G1 Y, M
} |