2012年12月26日 星期三

研究所
台大:
1.英文(A):成績不計入考試總分計算,惟成績未達該科本校到考生前80%者,不予錄取。
2.數學(含線性代數、離散數學) 
3.計算機系統(含計算機結構、作業系統)
4.軟體設計(含資料結構、演算法)
台大資工:
         線代:投資報酬率低,簡單的很簡單 難的很難,
              算子(黃子嘉第八章)和求反矩陣的方法要熟一點
         離散:要廣,幾乎都不能放棄,代數簡單的要會,
              圖論證明要記,其他的證明能記就記

         計組:往年滿正常的,今年很奇怪,建議之後算盤本第0張要看一下...
              台大教授上課投影片能拿則拿 考題能拿則拿

         OS  :分散式系統考很多...(要特別準備台大OS,這個最好不要放棄)
              台大教授上課投影片能拿則拿 考題能拿則拿
               (聽說今年OS是非題,滿多上課投影片有)

        ALGO & DS: 97年考一堆ALGO,今年考滿多DS,建議明年是不要賭,
                   有時間的話,ALGO重要的地方都要會


2012年12月24日 星期一

ITSA20

 
#include<stdio.h>
int main(){
    int n,i,j,cas=1;
    while(scanf("%d",&n)!=EOF){
        long long s[20],max=0,tmp;
        for(i=0;i<n;i++) scanf("%lld",&s[i]);
        for(i=0;i<n;i++){
            tmp=1;
            //max=(max<tmp)? tmp:max;
            for(j=i;j<n;j++){
                tmp*=s[j];
                max=(max<tmp)? tmp:max;
            }
        }
        printf( "Case #%d: The maximum product is %lld.\n\n", cas++, max );
    }
return 0;
}

ITSA19

 
#include<stdio.h>
int main(){
    long long x,fun[200000];
    char str[200000];
    while(~scanf("%lld",&x)){
        int top=0,num=0,i,j,op=1;
        getchar();
        gets(str);
        for(i=0;str[i];i++){
            if(str[i]!=' '){
            if(str[i]=='-') op=-1,i++;
                num*=10;
                num+=str[i]-'0';
            }
            else{
                fun[top++]=num*op;

                num=0;
                op=1;
            }
        }
        fun[top++]=num*op;
        long long sum=0,r=1;
        for(i=top-2,j=1;i>=0;j++,i--){
            sum+=j*fun[i]*r;
            r*=x;
        }
        printf("%lld\n",sum);
    }
return 0;
}

ITSA18

 
#include<stdio.h>
int main(){
int n,a=0,b=1,c=1,fib[20000],top=0;
while(c<=100000000){
fib[top++]=c;
c=a+b;
a=b;
b=c;
}
scanf("%d",&n);
while(n--){
    int num,i;
    scanf("%d",&num);
    printf("%d = ",num);
    for(i=top-1;fib[i]>num;i--);
    while(i>0){
        if(num-fib[i]>=0){
                printf("1");
                num-=fib[i];
        }
        else
        printf("0");
        i--;
    }
    printf(" (fib)\n");
}
return 0;
}

ITSA17

 
#include<stdio.h>
int main(){

int n;
    while(scanf("%d", &n)&&n){

    int i;
    int count=0;
    printf("%d : ",n);
    for(i=2;i<=n;i=i+1)
    {
      if(n%i==0)
      {
        while(n%i==0)
        {
          n=n/i;

        }
        count=count+1;
      }
    }

     printf("%d\n", count);
    }
return 0;
}

ITSA16

 
#include <stdio.h>
#include <string.h>

void solve(int o[], int base) {
    int a[500] = {};
    int i, j, k, len;
    int cnt = 0;
    len = 299;
    while(o[len] == 0)  len--;
    do {
        for(i = 0, j = len; i < j; i++, j--)
            if(o[i] != o[j])
                break;
        if(i >= j)
            break;
        cnt++;
        for(i = 0; i <= len; i++)
            a[i] = o[i]+o[len-i];
        for(i = 0; i <= len+10; i++) {
            if(a[i] >= base) {
                a[i+1] += a[i]/base;
                a[i] %= base;
            }
            o[i] = a[i];
        }
        len += 10;
        while(o[len] == 0)  len--;
    } while(1);
    printf("%d", cnt);
}
int main() {
    char s[105];
    while(scanf("%s", &s) == 1) {
        int i, j, k, len = strlen(s), base = 0;
        for(i = 0; i < len; i++) {
            if(s[i] <= '9')
                s[i] -= '0';
            else
                s[i] -= 'A'-10;
            if(s[i] > base)
                base = s[i];
        }
        if(base == 0)   base = 1;
        for(i = 15; i > base; i--) {
            if(i != 15) printf(" ");
            int o[500] = {};
            for(j = len-1, k = 0; j >= 0; j--, k++)
                o[k] = s[j];
            solve(o, i);
        }
        for(i = base; i >= 2; i--) {
            if(i != 15) printf(" ");
            printf("?");
        }
        puts("");
    }
    return 0;
}

ITSA15

 
#include <stdio.h>
int main()
{
    int T, m, n, q, x, y, i;
    char map[101][101];
    scanf("%d", &T);
    while(T--){
        scanf("%d%d%d", &m, &n, &q);
        for(i = 0; i < m; i++)
            scanf("%s", map[i]);
        printf("%d %d %d\n", m, n, q);
        while(q--){
            scanf("%d%d", &x, &y);
            for(i = 1; ; i++){
                int xx = x-i, yy = y-i, dx = x+i, dy = y+i, judge = 0;
                if(xx < 0 || yy < 0 || dx >= m || dy >= n)    {printf("%d\n", 2*i-1); break;}
                for(int a = xx; a < xx+i*2+1 && !judge; a++)
                    for(int b = yy; b < yy+i*2+1 && !judge; b++)
                        if(map[a][b] != map[x][y])   judge = 1;
                if(judge)   {printf("%d\n", 2*i-1); break;}
            }
        }
    }
    return 0;
}