1430
コメント:
|
1449
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 2: | 行 2: |
== AOJ解答 == . 最終的にAcceptedとなった回答です。 |
|
行 3: | 行 5: |
== AOJ解答 == * [[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]] |
. ここはこうした方がいいなど改善すべき点がありましたら是非ご教授お願いします。 * [[/10020]] * [[/10021]] * [[/10022]] * [[/10023]] * [[/10024]] * [[/10025]] * [[/10026]] * [[/10027]] * [[/10028]] * [[/10030]] |
行 10: | 行 19: |
=== 未解決 === * AOJ10029番 Time Limit Exceeded * http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10029 |
|
行 11: | 行 23: |
=== 解決済み === | |
行 13: | 行 24: |
* AOJ10020番 Wrong Answer * [[http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=10020]] |
|
行 16: | 行 25: |
{{{ #include<stdio.h> |
* [[/Discussion]] * クイックソートで書いてみましたがTime Limit Exceeded。おかしな箇所を教えてください。-- [[rei05]] <<DateTime(2012-06-01T16:54:19+0900)>> |
行 19: | 行 28: |
int main(){ | {{{#!highlight haskell #include <stdio.h> |
行 21: | 行 31: |
int num,i,pri; char ch,counter[26]={0}; //counterはintでいいんですね |
void Sort(int num[],int left,int right); |
行 24: | 行 33: |
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); |
行 35: | 行 51: |
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; |
行 40: | 行 56: |
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); |
行 43: | 行 83: |
* 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解答
- 最終的にAcceptedとなった回答です。
- ここはこうした方がいいなど改善すべき点がありましたら是非ご教授お願いします。
Help Me!
未解決
- AOJ10029番 Time Limit Exceeded
クイックソートで書いてみましたがTime Limit Exceeded。おかしな箇所を教えてください。-- rei05 2012-06-01 16:54:19
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 }