1. ACM UVA-10959

    bfs

    int ans[1000];
    int main(int argc, char const* argv[])
    {
        int t;
        bool first = true;
        while(~scanf("%d",&t)){
            while(t--){
                vector<int> P[1000];
                bool visit[1000] = {false};
                if(!first){
                    printf("\n");
                }
                int p,d;
                scanf("%d %d",&p,&d);
                while(d--){
                    int p1,p2;
                    scanf("%d %d ...

    Read more...


  2. ACM UVA-10986

    這題用Dijkstra+priority_queue即可解出。queue中可能會有重複的node id,不過無妨,如果拜訪過的話會被pop出來。

    //ignore header files
    struct Node{
        int id;
        unsigned int dis;
        bool operator<(Node n) const{
            return dis>n.dis;
        }
    };
    struct Edge{
        int id;
        int w;
    };
    using namespace std;
    int main(int argc, char *argv[])
    {
        int c;
        string s;
        vector<int> q;
    
    
        while(scanf("%d ...

    Read more...


  3. ACM UVA-11059

    max product

    int main()
    
    {
        long long int num,data,max=1,round=0;
        vector<int> v;
        vector<long long int> Max;
        while(cin>>num)
    
        {      
              round++; 
              for(int i=0;i<num;i++)
              {
                      cin>>data;
                      v.push_back(data);
              }
    
              for(unsigned int i=0;i<v.size();i++)
              {
              for(unsigned int j ...

    Read more...


  4. ACM UVA-11069

    這題也是DP題,我們一定得從第一個節點或者是第二個節點開始,因為假設我們從第三個節點開始選的話,不管怎樣我們都可以加入第一個節點而不跟其它節點相鄰,所以分成兩個情況,第一個情況是選第一個節點,那麼我們就不能選第二個節點,所以問題就變成從第三個節點之後有幾個答案(也就是扣掉前面兩個節點,f[n-2]),第二個情況是選擇第二個節點,那麼我們就不能選第三個節點,所以問題就變成從第四個節點開始有幾個答案(也就是扣掉前面三個節點,f[n-3])。

    所以關係式應為f[n] = f[n-2]+f[n-3]

    其中f[n-2]的意思是從第三個節點開始算有幾個答案,可以把它想成我們的問題少了前面那兩個節點,就是變成子問題的意思啦! f[n-3]也是一樣,代表從第四個節點開始算的話會有幾個答案。

    Read more...


  5. ACM UVA-11310

    dp

    int main(int argc, char const* argv[])
    {
        unsigned long long ans[41];
        ans[0] = 1;
        ans[1] = 1;
        ans[2] = 5;
        for(int i = 3;i <= 40;i++){
            ans[i] = ans[i-1]+4*ans[i-2]+2*ans[i-3];
        }
        int t;
        while(~scanf("%d",&t)){
            while(t ...

    Read more...


  6. ACM UVA-11401

    dp

    typedef unsigned long long ull;
    ull ans[1000001];
    ull f[1000001];
    int main(int argc, char const* argv[])
    {
        int n;
        f[3] = 0;
        ans[3] = 0;
        f[4] = 1;
        ans[4] = 1;
        for(int i = 5;i <= 1000000;i++){
            f[i] = f[i-1]+((i/2)-1);
            ans[i ...

    Read more...


  7. ACM UVA-11526

    題目

    using namespace std;
    int main(int argc, char const* argv[])
    {
        int t;
        while(~scanf("%d",&t)){
            while(t--){
                int n;
                scanf("%d",&n);
                int sq = sqrt(n);
                long long ans = 0;
                for(int i = 1;i <= sq;i++){
                   int count = n/i-(n/(i+1));
                   if(i == n/i ...

    Read more...


  8. ACM UVA-11565

    解方程式

    int main(int argc, char const* argv[])
    {
        int n;
        while (~scanf("%d",&n)) {
            int A,B,C;
            while (n--) {
                scanf("%d %d %d",&A,&B,&C);
                bool b;
                for(int x = -B;x < B;x++){
                    int yz;
                    if(x != 0 && B%x == 0){
                        yz = B/abs(x);
                        b = false ...

    Read more...


  9. ACM UVA-11579

    這個好像叫做海龍公式的樣子...。

    //ignore header files
    int main(int argc, char const* argv[])
    {
        int n;
        scanf("%d",&n);
        double s[10005];
        while(n--){
            int m;
            scanf("%d",&m);
            for(int i = 0;i<m;i++){
                double e;
                scanf("%lf",&e);
                s[i] = e;
            }
            sort(s,s+m);
            double max = 0; 
            for(int ...

    Read more...


  10. ACM UVA-11876

    binary search

    #define max 1000001
    int N[max];
    int seq[max];
    int binarySearch(int search,int n,bool w){
        int left = 0,right = n-1;
        while(left  <=  right){
            int mid = (left+right)/2;
            if(seq[mid] == search){
                return mid;
            }else if(seq[mid]>search){
                right = mid-1;
            }
            else if (seq ...

    Read more...


« Page 11 / 13 »