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

  • 相关阅读:
    MIPS、ARM、X86三大架构 (待写)
    NDIS驱动(待补充)
    iptables参数详解
    SSL协议详解
    shell脚本自学系列(3):shell编程基本语法简介
    shell脚本自学系列(x):十三个写好shell脚本的技巧分享
    软件质量模型的6大特性和27个子特性
    spring boot 热部署
    mysql 查询表死锁 和结束死锁的表步骤以及锁表等级
    高cpu分析
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3032731.html
Copyright © 2011-2022 走看看