ログイン
編集不可のページディスカッション情報添付ファイル
"rei05/C言語"の差分

MMA
19と30のリビジョン間の差分 (その間の編集: 11回)
2012-05-16 20:51:10時点のリビジョン19
サイズ: 1734
編集者: rei05
コメント:
2012-06-08 17:12:40時点のリビジョン30
サイズ: 1464
編集者: rei05
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 2: 行 2:
== AOJ解答 ==
 . 最終的にAcceptedとなった回答です。
行 3: 行 5:
== AOJ解答 ==  . ここはこうした方がいいなど改善すべき点がありましたら是非ご教授お願いします。
行 5: 行 7:
  最終的にAcceptedとなった回答です。
 ここはこうした方がいいなど改善すべき点がありましたら是非ご教授お願いします。

 * [[http://wiki.mma.club.uec.ac.jp/rei05/C言語/10020|10020]]
 * [[http://wiki.mma.club.uec.ac.jp/rei05/C言語/10021|10021]]
 * [[http://wiki.mma.club.uec.ac.jp/rei05/C言語/10022|10022]]
 * [[http://wiki.mma.club.uec.ac.jp/rei05/C言語/10023|10023]]
 * [[http://wiki.mma.club.uec.ac.jp/rei05/C言語/10024|10024]]
 * [[http://wiki.mma.club.uec.ac.jp/rei05/C言語/10025|10025]]
 * [[/10020]]
 * [[/10021]]
 * [[/10022]]
 * [[/10023]]
 * [[/10024]]
 * [[/10025]]
 * [[/10026]]
 * [[/10027]]
 * [[/10028]]
 * [[/10030]]
 * [[/10031]]
行 16: 行 20:
=== 未解決 ===
 * AOJ10029番 Time Limit Exceeded
  * http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10029
行 17: 行 24:
=== 解決済み ===
行 19: 行 25:
 * AOJ10020番 Wrong Answer
  * [[http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10020]]
行 22: 行 26:
{{{
#include<stdio.h>
 * [[/Discussion]]
  * クイックソートで書いてみましたがTime Limit Exceeded。おかしな箇所を教えてください。-- [[rei05]] <<DateTime(2012-06-01T16:54:19+0900)>>
行 25: 行 29:
int main(){ {{{#!highlight haskell
#include <stdio.h>
行 27: 行 32:
int num,i,pri;
char ch,counter[26]={0}; //counterはintでいいんですね
void Sort(int num[],int left,int right);
行 30: 行 34:
while(scanf("%c",&ch)!=EOF){ //入力終了条件を\nからEOFに修正
  scanf("%c",&ch); //←この行は不要
  if('a'<=ch&&ch<='z'){
    num=ch-'a';
    counter[num]++;
  }else if('A'<=ch&&ch<='Z'){
    num=ch-'A';
    counter[num]++;
  }
int main()
{
 int n,i;
 scanf("%d",&n);
 int num[n];

 for(i=0;i<n;i++)
  scanf("%d",&num[i]);

 Sort(num,0,n-1);

 for(i=0;i<n;i++)
  printf("%d ",num[i]);
 printf("\n");

 return(0);
行 41: 行 52:
for(i=0;i<=25;i++){
  pri=counter[i];
  printf("%c : %d\n",i+'a',pri);
}
void Sort(int num[],int left,int right)
{
 int i,j,temp;
 int center=(left+right)/2;
行 46: 行 57:
return(0);  while(1){
  i=left;
  j=right;

  while(num[i]<num[center])
   i++;
  while(num[center]<num[j])
   j--;
  if(i==j)
   break;
  if(num[i]==num[j]){
   i++;
   if(i==j)
    break;
  }

  temp=num[i];
  num[i]=num[j];
  num[j]=temp;
 }

 if(center-left>=2)
  Sort(num,left,center-1);
 if(right-center>=2)
  Sort(num,center+1,right);
行 49: 行 84:

 * counterをリセットしないと2回目以降の結果がバグると思いますよん-- [[alstamber]] <<DateTime(2012-05-08T22:09:37+0900)>>
 * すみません具体的にどこをどう直せば良いですか?問題文を見る限り動かすのは1回でいいと思うのですが。-- [[rei05]] <<DateTime(2012-05-09T01:00:33+0900)>>
 * 上記のブログを参考にしたところ1行消して正解でした。-- [[rei05]] <<DateTime(2012-05-09T19:07:08+0900)>>

C言語

AOJ解答

Help Me!

未解決

   1 #include  <stdio.h>
   2 
   3 void Sort(int num[],int left,int right); 
   4 
   5 int main()
   6 {
   7         int n,i;
   8         scanf("%d",&n);
   9         int num[n];
  10 
  11         for(i=0;i<n;i++)
  12                 scanf("%d",&num[i]);
  13 
  14         Sort(num,0,n-1);
  15 
  16         for(i=0;i<n;i++)
  17                 printf("%d ",num[i]);
  18         printf("\n");
  19 
  20         return(0);
  21 }
  22 
  23 void Sort(int num[],int left,int right)
  24 {
  25         int i,j,temp;
  26         int center=(left+right)/2;
  27 
  28         while(1){
  29                 i=left;
  30                 j=right;
  31 
  32                 while(num[i]<num[center])
  33                         i++;
  34                 while(num[center]<num[j])
  35                         j--;
  36                 if(i==j)
  37                         break;
  38                 if(num[i]==num[j]){
  39                         i++;
  40                         if(i==j)
  41                                 break;
  42                 }
  43 
  44                 temp=num[i];
  45                 num[i]=num[j];
  46                 num[j]=temp;
  47         }
  48 
  49         if(center-left>=2)
  50                 Sort(num,left,center-1);
  51         if(right-center>=2)
  52                 Sort(num,center+1,right);
  53 }

rei05/C言語 (最終更新日時 2012-07-16 17:50:37 更新者 nomeaning)