• 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

  • 相关阅读:
    eclipse真机调试显示Target unknown的解决方法
    教你看懂GERBER中的钻孔(.txt)文件
    Quartus ii 12.0 和ModelSim 10.1 SE安装及连接
    Android的学习——ubuntu下android5.1源码的make编译
    ubuntu 14.04 下找不到命令,路径出错
    【转载】VMware虚拟机修改硬盘容量大小
    Fedora10下建立linux系统的窗口没有地址栏
    [转]SecureCRT连接主机时,无法从键盘输入
    在FASTBuild中使用Distribution
    在FASTBuild中使用Caching
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3032731.html
Copyright © 2020-2023  润新知