鬱悶的1012

今晚無聊,用Java做左下http://acm.pku.edu.cn/JudgeOnline/problem?id=1012,總是超時,剛開始時以爲Java效率太差,用c++做多一次,fail again。最後無恥地打表,呵呵,還是AC了。無言……發泄一下!

附源程序:

Java

import java.util.*;
public class Main {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Scanner scan = new Scanner(System.in);
  while(scan.hasNext()){
   int k = Integer.parseInt(scan.next());
   if(k == 0)break;
   boolean work = false;
   int i = k+1;
   do{
    work = isSatisfied(k,i++);
   }while(!work);
   System.out.println(i-1);
  }
 }
 private static boolean isSatisfied(int k,int m){
  int total = 2 * k;
  LinkedList ll = new LinkedList();
  for(int i = 0;i < total;i++){
   ll.addLast(i);
  }
  int start = 0;
  for(int i = 0;i<k;i++){
   int end = (start + m - 1)%ll.size();
   int t = (Integer)ll.remove(end);
   if(t+1<=k){
    return false;
   }
   start = end>ll.size()-1?0:end;
  }
  return true;
 }
}

c++:

#include<iostream>
using namespace std;
#define MAXK 13
int IsSatisfied(int k,int m);
int main(){
 //cout<<IsSatisfied(10,93312);
 //return 1;
 int c;
 do{
  cin>>c;
  if(!c)break;
  int i = c;
  while(1){
   cout<<i<<endl;
   if(IsSatisfied(c,i++) > 0){
    cout<<i-1<<endl;
    break;
   }
  }
 }while(1);
 return 0;
}

int exed[2*MAXK];
int list[2*MAXK];

int IsSatisfied(int k,int m){
 int total = 2*k;
 int i;
 for(i=0;i<total;i++){
  exed[i]=0;
  list[i]=(i+1)%total;
 }
 int pos = 0;
 int pre;
 for(i = 0; i < k;i++){
  for(int j = 0; j < m-1;j++){
   pre = pos;
   pos = list[pre];
  }
  if(pos < k)return -1;
  //cout<<pos<<endl;
  list[pre] = list[pos];
  pos = list[pos];
 }
 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章