HDOJ 2176 돌 쌓 기 게임

돌멩이 놀이
Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2461    Accepted Submission(s): 1443
Problem Description
m. 돌 을 쌓 고 두 사람 이 돌아 가면 서 얻 습 니 다. 한 더미 에서 만 얻 을 수 있 습 니 다. 완 성 된 사람 이 이 길 수 있 습 니 다. 선 취 자 는 수출 No. 선 취 자 는 수출 Yes 를 이 긴 다음 에 수출 을 어떻게 합 니까? 예 를 들 어 5 더미 5, 7, 8, 9, 10 선 취 자 는 이 길 수 있 습 니 다. 선 취 자 는 첫 번 째 로 얻 을 때 8 개 있 는 더미 에서 7 개 를 가 져 가 고 나머지 1 개 를 가 져 갈 수도 있 습 니 다. 9 개 있 는 더미 에서 9 개 를 가 져 가 고 나머지 0 개 를 가 져 갈 수도 있 습 니 다. 10 개 있 는 더미 에서 7 개 를 가 져 가 고 3 개 를 남
 
Input
여러 그룹 을 입력 하 십시오. 각 그룹의 첫 번 째 줄 은 m, m < = 20000 입 니 다. 뒤의 m 개 비 0 정수 m = 0 으로 종료 합 니 다.
 
Output
선 취 자 마이너스 출력 No. 선 취 자가 출력 Yes 를 이 긴 다음 선 취 자의 첫 번 째 취 자 를 출력 하 는 모든 방법 입 니 다. 한 개의 돌 더미 에서 몇 개 를 취하 고 b 개 를 남 긴 후에 이기 면 a b 를 출력 합 니 다. Sample 출력 을 참조 하 십시오.
 
Sample Input

   
   
   
   
2 45 45 3 3 6 9 5 5 7 8 9 10 0

 
Sample Output

   
   
   
   
No Yes 9 5 Yes 8 1 9 0 10 3

 
   듣 자 하 니, cin 과 cout 는 시간 을 초과 할 수 있 고, 감히 사용 할 수 없 으 며, ac 후에 또 cin 과 cout 를 사용 하여 시간 을 초과 하지 않 는 다 는 것 을 발견 하 였 다.
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int m,a[200005],n;
    while(cin >> m,m)
    {
        int sum=0;
        for(int i=0;i<m;i++)
        {
            cin>>a[i];//scanf("%d",&a[i]);
            sum^=a[i];
        }
        if(!sum)
        {
             cout<<"No"<<endl;
             continue;
        }
         cout <<"Yes"<<endl;
         int t;
         for(int i=0;i<m;i++)
         {
             t=sum^a[i];
             if(t<=a[i])
                cout<<a[i]<<' '<<t<<endl;
         }
    }
    return 0;
}

좋은 웹페이지 즐겨찾기