随笔-68  评论-10  文章-0  trackbacks-0
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=69
#include <iostream>
#include 
<list>
#include 
<iterator>
#include 
<iomanip>
using namespace std;

int N, k, m;
list
<int> dole;

int main()
{
    
while(cin >> N >> k >> m)
    
{
        
if(!(N || k || m)) break;
        dole.clear();
        
for(int i = 1; i <= N; ++i)
        dole.push_back(i);
        list
<int>::iterator is, ie;
        
is = dole.begin();
        ie 
= dole.end();
        
--ie;
        
while(true)
        
{
            
for(int i = 1; i < k; ++i)
            
{
                
++is;
                
if(is == dole.end()) is = dole.begin();
            }

            
for(int i = 1; i < m; ++i)
            
{
                
if(ie == dole.begin())
                
{
                    ie 
= dole.end();
                }

                
--ie;
            }

            
if(is == ie)
            
{
                cout 
<< setw(3<< *is;
                
if(dole.size() != 1)
                
{
                    cout 
<< ',';
                    
is = dole.erase(is);

                    
if(is == dole.begin())
                    
{
                        ie 
= dole.end();
                        
--ie;
                    }

                    
else
                    
{
                        ie 
= is;
                        
--ie;
                    }

                    
if(is == dole.end()) is = dole.begin();
                }

                
else
                
{
                    cout 
<< endl;
                    
break;
                }

            }

            
else
            
{
                cout 
<< setw(3<< *is << setw(3<< *ie;
                list
<int>::iterator it1 = is;
                list
<int>::iterator it2 = ie;
                
if(dole.size() != 2)
                
{
                    cout 
<< ',';
                    
++is;
                    
while(is == it2) ++is;
                    
++ie;
                    
while(ie == it1) ++ie;
                    dole.erase(it1);
                    dole.erase(it2);

                    
if(is == dole.end()) is = dole.begin();
                    
if(ie == dole.begin())
                    
{
                        ie 
= dole.end();
                        
--ie;
                    }

                    
else --ie;
                }

                
else
                
{
                    cout 
<< endl;
                    
break;
                }

            }

        }

    }

    
return 0;
}

posted on 2011-11-19 22:12 wuxu 阅读(227) 评论(0)  编辑 收藏 引用 所属分类: 模拟

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理