• Wunder Fund Round 2016 (Div. 1 + Div. 2 combined)


    现在水平真的不够、只能够做做水题

    A. Slime Combining

    题意:就是给n个1给你、两个相同的数可以合并成一个数,比如说有两个相同的v,合并后的值就是v+1

    思路:直接模拟栈

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<stack>
     4 using namespace std;
     5 int num[10000];
     6 int main()
     7 {
     8     int n;
     9     while(cin >> n){
    10     stack<int>p;
    11     p.push(1);
    12     for(int i=1;i<n;++i){
    13         p.push(1);
    14         int x,y;
    15         while(p.size()>=2){
    16             x=p.top();p.pop();
    17             y=p.top();p.pop();
    18             if(x==y)
    19                 p.push(x+1);
    20             else{
    21                 p.push(y);p.push(x);
    22                 break;
    23             }
    24         }
    25     }
    26         int k=0;
    27         while(!p.empty()){
    28             num[k++]=p.top();
    29             p.pop();
    30         }
    31         for(int i=k-1;i>=0;--i)
    32             if(i==k-1)    cout << num[i];
    33             else        cout <<  " " << num[i];    
    34         cout << endl;
    35     }
    36 } 

    B. Guess the Permutation

    这题还想了好久、其实想通了就很简单了

    题意:给你一个正方形的数值阵,每一个数值阵中的值map[i][j]=min(a[i],a[j]),也就是值是两者中较小的一个,数组a是一个序列,让你通过这个数值阵去还原数组a

    思路:每一行中如果不同的元素个数等于n个,那么这个序列除了0以为其他的数值就是数组a中的序列数,剩下的只要把0改成n就可以了

       还一种思路(被人家教育了)就是每一行中的最大值其实就是数组a[i]的值、但需要注意n-1的n,(思考)

      

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<set>
     6 using namespace std;
     7 const int qq=55;
     8 int map[qq][qq];
     9 int main()
    10 {    
    11     set<int>p[qq];
    12     int n;scanf("%d",&n);
    13     for(int j,i=1;i<=n;++i){
    14         for(j=1;j<=n;++j){
    15             scanf("%d",&map[i][j]);
    16             p[i].insert(map[i][j]);
    17         }
    18     }
    19     int ans;
    20     for(int i=1;i<=n;++i)
    21         if(p[i].size()==n){
    22             ans=i;break;
    23         }
    24     for(int i=1;i<=n;++i){
    25         if(i==1)
    26             if(map[ans][i]!=0)    printf("%d",map[ans][i]);
    27             else                printf("%d",n);
    28         else
    29             if(map[ans][i]!=0)    printf(" %d",map[ans][i]);
    30             else                printf(" %d",n);
    31     }
    32     printf("
    ");
    33 }
    34     
    #include<iostream>
    using namespace std;
    int main()
    {
        int n,f=1;
        cin>>n;
        for(int i=0;i<n;i++){
            int m=0;
        for(int j=0;j<n;j++)
        {
        int x;
            cin>>x;
            m=max(m,x);
        }
        if(m==n-1 && f)
        {
            f=0;
            m+=1;
        }
        cout<<m<<" ";
        }
        
        return 0;
    }

     说白了B题就是找规律、- - 以后不能这么傻了

        

  • 相关阅读:
    git分支合并
    php错误处理
    php面试全套
    php面试的那些“黑话”
    快速在命令窗口打开当前路径
    @Autowired注解的使用方法
    jsp页面获取表单的值
    jsp打印九九乘法表
    Google hack
    java中的集合collection
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5177401.html
Copyright © 2020-2023  润新知