• ACM-ICPC(11/8)


    URAL 1005
    给定一些石头的重量,要求分成两个部分最相近。二进制暴力枚举。
    #include <bits/stdc++.h>
    
    using namespace std;
    
    int w[25];
    
    int main()
    {
       // freopen("in.txt","r",stdin);
        int n;
        scanf("%d",&n);
    
        int sum = 0;
        for(int i = 0; i < n; i++) {
            scanf("%d",&w[i]);
            sum +=w[i];
        }
    
        int ans = sum;
        for(int s = 0; s < 1<<n; s++) {
            int tmp = 0;
            for(int i = 0; i < n; i++) {
                if(s&(1<<i)) tmp+=w[i];
            }
            ans = min(ans,abs(2*tmp-sum));
        }
    
        cout<<ans<<endl;
    
    
        return 0;
    }
    View Code

    URAL 1009

    k进制,n位数,要求没有前导0,并且没有两个连续的0.

    数据范围很小,暴力竟然超时了,队友的公式找了半天。要崩~~~

    还好找出来了。

    n = 1   ans = k-1

    n = 2   ans = k*k -k

    n = 3   ans = (k-1)*(ans2+ans1)

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int ans;
    int n,k;
    void dfs(int u,int x) {
    
        if(u==n) {
            ans++;
            return ;
        }
    
        if(x==0) {
            for(int i = 1; i <k; i++)
                dfs(u+1,i);
        }
        else {
            for(int i = 0;i<k; i++)
            {
                dfs(u+1,i);
            }
        }
    }
    
    int a[20];
    
    int main()
    {
        scanf("%d%d",&n,&k);
    
        a[1] = k - 1;
        a[2] = k*k - k;
        for(int i = 3; i <= n; i++)
            a[i] = (k-1)*(a[i-1]+a[i-2]);
        printf("%d
    ",a[n]);
    
    
        return 0;
    }
    View Code

    URAL 1011

    售票员的人数是p%~q%不包含边界。求城市最少人数。

    精度卡到炸~~~

    #include <cstdio>
    #include <cmath>
    
    const double eps = 1e-9;
    
    int main() {
        double p, q;
        int ans;
        scanf("%lf%lf", &p, &q);
    
        for (ans = 1; ; ++ans) {
            double least = ans * p / 100.0;
            int realLeast = (int) ceil(least);
            double most = ans * q / 100.0;
            int realMost = (int) floor(most);
            if (realMost >= realLeast && most - realMost > eps && realLeast - least > eps)
                break;
        }
    
        printf("%d
    ", ans);
    
        return 0;
    }
    View Code

    URAL 1010

    横坐标1~n,纵坐标给出,求两个点,两点之间的点都在下方,两点的斜率绝对值最大。

    其实就是相邻的点。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    long long a[100005];
    
    int main()
    {
        int n;
        scanf("%d",&n);
    
        for(int i = 1; i <= n;i++) cin>>a[i];
    
        long long ans = 0;
        int p;
        for(int i = 1; i <= n-1; i++) {
            if(abs(a[i+1]-a[i])>ans) {
                p = i;
                ans = abs(a[i+1] - a[i]);
            }
        }
    
        printf("%d %d
    ",p,p+1);
    
        return 0;
    }
    View Code
  • 相关阅读:
    SQLServer 错误: 15404,维护计划无法执行
    Axis2 服务器端抛出ServiceClass object does not implement问题解决方法
    领域驱动设计 软件核心复杂性应对之道 读书笔记
    华为实施微服务架构的五大军规
    DDD领域驱动设计基本理论知识总结
    TransactionScope使用说明
    错误:该行已经属于另一个表
    SQL基础之 时间戳
    采用左右值编码来存储无限分级树形结构的数据库表设计
    违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 解决办法
  • 原文地址:https://www.cnblogs.com/TreeDream/p/7806724.html
Copyright © 2020-2023  润新知