zoukankan      html  css  js  c++  java
  • 暑假提高组集训Day1 T1

    说实话,今天的题真的有点难!

    ~备受打击~

    我们先来看一看第一题吧

     看起来好像不太简单,其实并不难

    下面来提供两种方法吧

    1.做法一

    //签到题 
    /*

    那么这一题就是告诉你n个点的坐标,把它们分别放到 0,0 0,1 0,2  ... 0,n-1
    每一次可以把一个点向上下左右移动单位长度
    那么我们可以先把他们到横轴的距离先累加起来
    相当于都移动到了横轴上
    我们可以贪心地想一下
    已经到位的点肯定最好就不要动啦
    然后把剩下的点的x坐标进行排序
    然后插到空儿里
    */
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int Leftx[1000005];
    int vis[1000005];
    int main()
    {
    //  freopen("checkin.in","r",stdin);
    //  freopen("checkin.out","w",stdout);
        unsigned long long ans=0;
        scanf("%d",&n);
        int t=0,x,y;
        for(int i=0;i<n;i++){
            scanf("%d%d",&x,&y);//输入
            ans+=abs(y);//先把它们放到x轴上,就相当于加上 纵坐标y与横轴之间的距离
            if(!(x>=0&&x<n))
                Leftx[++t]=x;//如果不在0~n-1的范围内,就把它们存起来
            else
                vis[x]=1;//否则标记起来
        }
        sort(Leftx+1,Leftx+t+1);//把剩下的点按照x坐标进行排序
        int T=0;
        for(int i=0;i<n;i++){
            if(vis[i])
                continue;
            T++;//接下来就是挨个插到空儿里
            ans+=abs(i-Leftx[T]);//算法竞赛入门经典第二版
        }
        cout<<ans;
        return 0;

    }

     2.做法二

    其实就是把每一个点先进行排序,然后按顺序放进去,把每一个点要移动的距离累加起来

    心得:提高组Day1T1 其实并不难

    像这一道题就是一道贪心 模拟一下就能很轻松地解决~

    p.s.下一道题就很坑了!!!

  • 相关阅读:
    [框架] DAO的作用以及和其他层的关联
    [框架] SSH所需要的jar包列表
    DLBBS工作总结
    只不过是R.java文件的特性出错信息:R.java was modified manually! Reverting to generated version!
    [jQuery] jQuery函数
    WebTeam多层系统框架(请高手提意见)
    对象基础知识
    Android 4.0 的软件测试
    顺序存储数据结构java实现
    xp下清除多余的鼠标右键菜单
  • 原文地址:https://www.cnblogs.com/Tidoblogs/p/11215577.html
Copyright © 2011-2022 走看看