• 江西理工大学南昌校区cool code竞赛


    无耻的复制大佬的代码

    1001

    怎么写模拟都过不去,只能用数学方式写了

    合理的摆放就两种,一种平分,一种一个小的和两个大的放在一块

    我们取最小值

     1 #pragma comment(linker, "/STACK:1024000000,1024000000")
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cmath>
     5 #include<string>
     6 #include<queue>
     7 #include<algorithm>
     8 #include<stack>
     9 #include<cstring>
    10 #include<vector>
    11 #include<list>
    12 #include<set>
    13 #include<map>
    14 using namespace std;
    15 #define ll long long
    16 #define pi (4*atan(1.0))
    17 #define eps 1e-14
    18 #define bug(x)  cout<<"bug"<<x<<endl;
    19 const int N=1e5+10,M=1e6+10,inf=2147483647;
    20 const ll INF=1e18+10,mod=2147493647;
    21 ll a[10];
    22 int main()
    23 {
    24     while(~scanf("%d%d%d",&a[0],&a[1],&a[2]))
    25     {
    26         sort(a,a+3);
    27         if(a[2]>=(a[1]+a[0])*2)
    28             printf("%d
    ",a[0]+a[1]);
    29         else
    30             printf("%d
    ",(a[0]+a[1]+a[2])/3);
    31     }
    32     return 0;
    33 }

    1002

    没啥好说的,注意等于0的情况

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<stack>
    #include<cstring>
    #include<vector>
    #include<list>
    #include<set>
    #include<map>
    using namespace std;
    #define ll long long
    #define pi (4*atan(1.0))
    #define eps 1e-14
    #define bug(x)  cout<<"bug"<<x<<endl;
    const int N=1e5+10,M=1e6+10,inf=2147483647;
    const ll INF=1e18+10,mod=2147493647;
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            if(n==0)
                printf("1
    ");
            else
                printf("6
    ");
        }
        return 0;
    }

    1003

    如果做过HDU1222题估计会好很多,结论就是gcd(2*n-2,k)==1时,所有格子可以踩中

    HDU1222是一个圈啦,这里不是,我们要看成一个圈,比如12321,我们取1232为循环,就是2*3-2(2*n-2)

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #include <math.h>
     5 #include <iostream>   // C++头文件,C++完全兼容C
     6 #include <algorithm>  // C++头文件,C++完全兼容C
     7 #include <time.h>
     8 #define fre  freopen("out.txt","w",stdout)   //以文件代替控制台输入,比赛时很常用,能缩短输入测试样例的时间
     9 #define INF 0x3f3f3f3f
    10 #define inf 1e60
    11 using namespace std;  // C++头文件,C++完全兼容C
    12 const int maxn = 200;
    13 int a[maxn];
    14 int b[3];
    15 int ans,n,k;
    16  
    17 int main()
    18 {
    19     while(cin>>n)
    20     {
    21         for(int i=2; i<=2*n; i++)
    22         {
    23             if(__gcd(2*n-2,i)==1)
    24             {
    25                 cout<<i<<endl;
    26                 break;
    27             }
    28         }
    29     }
    30  
    31     return 0;
    32 }

    1004

    我们想一想十进制怎么求末尾0,嗯嗯,当然是找被10整除的个数喽

    这里情况一样的啦,我们就一直除以3,一直除以3,找被3整除的个数

    #include <stdio.h>
    #define freout  freopen("out.txt","w",stdout)
    #define frein   freopen("in.txt","r",stdin)
    int main ()
    {
     //   frein;
      //  freout;
        long long n;
        while(~scanf("%lld", &n))
        {
            long long sum = 0;
            long long tmp = 3;
            while (n >= tmp)
            {
                sum += (n / tmp);
                tmp *= 3;
            }
            printf("%lld
    ", sum);
        }
     
        return 0;
    }

    1005

    大概知道了如果数组中只存在两种数字,必定是符合要求的

    三种如何判断,最小的数字必须增加一个数,最大的数字必须减少一个数字,他们要和中间数字相同,那么是a[3]-a[2]==a[2]-a[1]的关系

    我们需要做的就是去重计算出他的种类,排序判断

     1 #pragma comment(linker, "/STACK:1024000000,1024000000")
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cmath>
     5 #include<string>
     6 #include<queue>
     7 #include<algorithm>
     8 #include<stack>
     9 #include<cstring>
    10 #include<vector>
    11 #include<list>
    12 #include<set>
    13 #include<map>
    14 using namespace std;
    15 #define ll long long
    16 #define pi (4*atan(1.0))
    17 #define eps 1e-14
    18 #define bug(x)  cout<<"bug"<<x<<endl;
    19 const int N=1e5+10,M=1e6+10,inf=2147483647;
    20 const ll INF=1e18+10,mod=2147493647;
    21 ll a[N];
    22 int main()
    23 {
    24     int n;
    25     while(~scanf("%d",&n))
    26     {
    27         for(int i=1; i<=n; i++)
    28             scanf("%lld",&a[i]);
    29         sort(a+1,a+1+n);
    30         int cnt=unique(a+1,a+1+n)-a;
    31         //cout<<cnt<<endl;
    32         if(cnt>4)
    33             printf("ecjtujxnu
    ");
    34         else
    35         {
    36             if(cnt<=3)
    37                 printf("jxust
    ");
    38             else if(a[3]-a[2]==a[2]-a[1])
    39                 printf("jxust
    ");
    40             else
    41                 printf("ecjtujxnu
    ");
    42         }
    43     }
    44     return 0;
    45 }

    1006(原题http://qscoj.cn/problem/17/

    对每个数进行二分,就是这样,某位大牛的代码(当然你先得把最小值都弄好了)

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<stack>
    #include<cstring>
    #include<vector>
    #include<list>
    #include<set>
    #include<map>
    using namespace std;
    #define ll long long
    #define pi (4*atan(1.0))
    #define eps 1e-14
    #define bug(x)  cout<<"bug"<<x<<endl;
    const int N=1e5+10,M=1e6+10,inf=2147483647;
    const ll INF=1e18+10,mod=2147493647;
    int a[N];
    int r[N];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            for(int i=1;i<=n;i++)
                scanf("%d",&a[i]);
            r[n]=a[n];
            for(int i=n-1;i>=1;i--)
                r[i]=min(r[i+1],a[i]);
            for(int i=1;i<=n;i++)
            {
                int st=i+1;
                int en=n,ans=-1;
                while(st<=en)
                {
                    int mid=(st+en)>>1;
                    if(a[i]>r[mid])
                    {
                        st=mid+1;
                        ans=mid;
                    }
                    else
                        en=mid-1;
                }
                if(ans==-1)
                    printf("-1");
                else
                    printf("%d",ans-i-1);
                printf("%c",((i==n)?'
    ':' '));
            }
        }
        return 0;
    }

    实在不会还有这种的

    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <algorithm>
    #define MAX 200002
    using namespace std;
     
    int a[MAX],ans[MAX];
    vector<int> v,num;
    #define freout  freopen("out.txt","w",stdout)
    #define frein   freopen("in.txt","r",stdin)
    int main()
    {
         
        int n;
        while(~scanf("%d",&n)){
            for(int i=0;i<n;i++) scanf("%d",&a[i]);
            v.clear();
            num.clear();
            for(int i=n-1;i>=0;i--){
                if(v.size()==0 || v.back()>=a[i]){
                    v.push_back(a[i]); num.push_back(i);
                    ans[i]=-1;
                }else{
                    int j = (lower_bound(v.rbegin(),v.rend(),a[i]) - v.rbegin());
                  //  printf("%d %d
    ",a[i],j);
                    j = (int)v.size() - j ;
                    //printf("%d %d
    ",num[j+1],j);
                    ans[i] = num[j] - i - 1;
                }
            }
            for(int i=0;i<n;i++){
                if(i) printf(" ");
                printf("%d",ans[i]);
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    详解并发和并行意义
    MoleHill Getting Started AGAL(转)
    解决setInterval计时器不准的问题
    Flash视频播放器开发经验总结
    利用pushState开发无刷页面切换
    用小乐图客抓取人人网照片
    如何在Flash中新窗口打开页面而不被拦截
    响应式开发总结
    用Asroute解决复杂状态切换问题
    对iframe跨域通信的封装
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/6506040.html
Copyright © 2020-2023  润新知