zoukankan      html  css  js  c++  java
  • hdu 1571(下沙小面的(1))

    充分的用到题目的五条法则:

         过的了测试数据应该就能过了!!

    #include<stdio.h>
    #include<vector>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    vector<int>v;
    vector<int>::iterator it;
    int main()
    {
        int T,N,i,j,k,x;
        int st,ed;
        int a[32][32];
        char s[5];
        int dis;
        while(scanf("%d",&T)!=EOF&&T!=0)
        {
            v.clear();
            memset(a,0,sizeof(a));
            dis=0;//车的路程
            for(i=0;i<T;i++)
            for(j=0;j<T;j++)
            scanf("%d",&a[i][j]);
            scanf("%d",&N);
            st=0;//起始点
            for(i=0;i<N;i++)
            {
                scanf("%s",s);
                if(s[0]=='U')
                {
    
                    scanf("%d",&x);
                    if(x!=st)v.push_back(x);//记录乘客目的地,不载现在的地点
                }
                else if(v.size()==6||(s[0]=='G'&&v.size()>0))
                {
                    ed=v.front();//记录终点
                    //it=v.begin();
                    //for(;it!=v.end();it++){ }
                       // printf("%d ",*it);//printf("\n%d\n",ed),
                    //if(*it==ed)v.erase(it);//数组减小,删除
                     //v.erase(remove(v.begin(),v.end(),it),v.end());
                     v.erase(remove(v.begin(), v.end(),ed), v.end());        // 真的删除所有
                    //printf("\t@@%d %d %d**",st,ed,a[st][ed]);
                    dis+=a[st][ed];
                    //printf("%d %d\n",a[st][ed],dis);
                    st=ed;//一趟完成,记录新的起点
                }
            }
            printf("%d\n",dis);
        }
        return 0;
    }

    那些打斜杠的地方就是 调试的艰辛啊!!!!!!!!!!!!

    主要还是STL用的不好!!!!!!!!!!!!!!!!!!!

           s.erase(it)删除由迭代器it 所指向的元素。

    ● 在循环内做某些事情(除了删除对象之外):如果容器是标准序列容器,写一个循环来遍历容器元素,每当调用erase时记得都用它的返回值更新你的迭代器。

        for(vector<int>::iterator it=arr.begin(); it!=arr.end(); )
        {
            if(* it == 8)
                it = arr.erase(it);
            else
                ++it;
        }

        /*
            for(vector<int>::iterator it=arr.begin(); it!=arr.end(); it ++)
            {
                if(* it == 8)
                {
                    arr.erase(it);     //在erase后,it失效,并不是指向vector的下一个元素,it成了一个“野指针”。
                }
            }
        */

    v.erase(remove(v.begin(), v.end(), 99), v.end());包含在<algorithm>中                               // 真的删除所有99

  • 相关阅读:
    System.Runtime.InteropServices.COMException (0x800706BA) 解决方法
    Win7 不能安装 msi 解决办法
    note 1 对象和数据类型
    note 0 Python介绍及Python IDE环境安装 Spyder with Anaconda
    无法获得锁 /var/lib/dpkg/lock
    keil5 MDK 链接报错 Error: L6410W 解决
    手动卸载CAD 删除残留文件 清理遗留的文件
    keil5 MDK warning:registered ARM compiler version not found in path
    干掉hao123劫持浏览器主页
    Win7 无法访问Installer服务
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3032731.html
Copyright © 2011-2022 走看看