latex notes

加上删除线,加上包\usepackage{ulem}
\sout{}, 但是会重定义\emph 为下划线,到时候是会去掉这些删除线的,所以也没必要取消这种重定义

http://blog.sina.com.cn/s/blog_676069b10101jrob.html 重定义dvi2pdf快捷键,和dvips冲突,把这个注释掉,因为不怎么用到

Latex Ctrl+Shf+L
dvi2odf Ctrl+Shf+D

现在有一个问题就是源基因组这个work的数据和文章非常混乱,数据需要再整理一遍。要花时间整理一下,就像数据一样,整理不好的话查找比较费时,要用好的DS来存储

C输入,上次瞿神说的scanf %s 不接受空格 结束符理解出错了,以为是结束符可以处理空格。
后来发现又遇到错误了,scanf()%s 这么解释:如果遇到whitespace 直接跳过,知道第一个合法字符串,然后遇到第一个whitespace结束,whitespace留在缓冲区内,
其实。也就是说scanf(“%s” ) cin输入字符串的时候,必须读到non-whitespace 才罢休,否则一直准备输入,然后你一直敲换行符。而其他的getline gets fgets之类的则会一遇到whitespace就接受,然后认为读完了。所以在第一行n,后面是一行带空格的字符串需要一次读入的时候,必须要处理缓冲区中多出的\n, 瞿神
用getchar, 当然任何一遇到whitespace就结束的 gets getline之类的都是可以的,也都是等价的,然后后面用getline gets之类的就可以了。

正如fawkes大神,scanf gets来输入字符串足矣,scanf(“%s”)处理whitespace分隔的字符串,gets输入一行,但是可能会有缓冲区溢出的风险,用fgets会比较安全,因为指定了字符串的
大小,但是一般都不会太讲究字符串大小,但是fgets会多加一个\n, 所以要当心,所以还是gets足以了。一般自己小的程序自己控制好没有什么风险。但是对于处理代码注释的那道题来说刚好合适,因为正好要需要记录每行的换行符。

所以scanf(“%s”) cin不接受whitespace作为读入的字符串,必须读到non-white才罢休,然后以后面的whitespace结束, 所以这种不要
处理Notorious的cin因为只peek 输入缓冲区的whitespace而留在那里的whitespace, 而其他的例如 scanf(%c) getline都会接受的。
因此int 换行加字符串的问题用scanf(%s), cin不需要额外处理那个多出的\n, 但是如果要读一整行数据这个又不行,必须用gets之类的,因此又要处理\n, 只能getchar之类的。
这种情况反而出现的非常多的。

然后就是strcmp函数比较两个字符串大小,刚好符合题意,a>b, strcmp(a,b)>0, a=b strcmp(a,b)=0, a<b strcmp(a,b)<0
其实相对还是cpp的string更熟悉些,封装比较好,也方便,但是C的效率高,因为叫底层。

今天瞿神也说了strcpy不如memcpy效率高,因为后者是直接操作内存的字节数。但是要加一个参数表示copy的字节数,这样其实更容易清楚整个过程。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
char soulang[95],tarlang[95];
char numstr[1000];
char result[1000];
int T;
int main()
{
    //freopen("in.txt","r",stdin);
    scanf("%d",&T);
    int casei=1;
    while(T--)
    {
        scanf("%s%s%s",&numstr,&soulang,&tarlang);
        int numlen=strlen(numstr),soulen=strlen(soulang),tarlen=strlen(tarlang);
        int numdig=0,wei=numlen-1;
        for(int i=0;i<numlen;i++)
        {
            for(int j=0;j<soulen;j++)
            {
                if(numstr[i]==soulang[j])
                {
                    numdig+=j*pow((double)soulen,numlen-i-1);
                    //wei--;
                    break;
                }
            }
        }
        //result="";
        int resulti=0;
        //cout<<"numdig: "<<numdig<<endl;
        if(numdig==0)
            result[0]=tarlang[0],result[1]='\0',resulti=1;
        else
        {
        while(numdig!=0)
        {
            result[resulti]=tarlang[numdig%tarlen];
            numdig/=tarlen;
            resulti++;
        }
            result[resulti]='\0';
        }
        for(int i=0;i<resulti/2;i++)
        {
            char tmp=result[i];
            result[i]=result[resulti-i-1];
            result[resulti-i-1]=tmp;
        }
        printf("Case #%d: %s\n",casei++,result);
    }
    return 0;
}

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;

char str[100+1],laststr[100+1];
int T,n,cost;
bool bigger()
{
    return strcmp(str,laststr)>0;
}

int main()
{
    freopen("in.txt","r",stdin);
    scanf("%d",&T);
    int casei=1;
    while(T--)
    {
        scanf("%d",&n);
        //gets(laststr);
        getchar();
        cost=0;
        for(int i=0;i<n;i++)
        {
            if(i==0)
                //scanf("%s",laststr);
                gets(laststr);
            else
            {
                //scanf("%s",&str);
                gets(str);
                //printf("%s\n",str);
                if(bigger())
                    strcpy(laststr,str);
                else
                    cost++;
            }
        }
        printf("Case #%d: %d\n",casei++,cost);
    }
    return 0;
}

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <vector>
using namespace std;

int a[1000];
vector<int> ji,ou;
int T,n,x;
void bubble()
{
    //for(int i=0;i<ou.size();i++)
    //    cout<<ou[i]<<" ";
    //for(int i=0;i<ji.size();i++)
    //    cout<<ji[i]<<" ";    
    for(int i=0;i<(int)ou.size()-1;i++)
    {
        for(int j=0;j<(int)ou.size()-i-1;j++)
        {
            if(a[ou[j]]<a[ou[j+1]])
                swap(a[ou[j]],a[ou[j+1]]);
        }
    }
    for(int i=0;i<(int)ji.size()-1;i++)
    {
        for(int j=0;j<(int)ji.size()-i-1;j++)
        {
            if(a[ji[j]]>a[ji[j+1]])
                swap(a[ji[j]],a[ji[j+1]]);
        }
    }
}

int main()
{
    //freopen("in.txt","r",stdin);
    scanf("%d",&T);
    int casei=1;
    while(T--)
    {
        ji.clear();
        ou.clear();
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        for(int i=0;i<n;i++)
        {
            if(a[i]%2==0)
                ou.push_back(i);
            else
                ji.push_back(i);
        }
        bubble();
        printf("Case #%d:",casei++);
        for(int i=0;i<n;i++)
            printf(" %d",a[i]);
        puts("");
    }
    return 0;
}

comp函数这么理解,bool comp(int i, int j) 表示是否i 应该放在j前面,return i<j 表示i<j时,i在j前面,所以是非递减排列。

A题需要估算最大的整数的字符串长度,当进制2位,log2(10^9) 也就是10亿对数,10^9<1G=2^30, 因此log数小于30的。1G略大于10亿,int的最大值就是2^31-1, 也即21开头
的10位十进制数。

ACII码先大写,后小写,strcmp(“A”, “a”)=-32; 因为A比a小

今天写sort的时候,遇上了 从未遇到的问题,comp函数调用不需要加(), 而是直接函数名,太久没写sort了。

后来发现这么一个定制的排序的comp函数似乎不好写,因为sort的comp函数 不允许修改传入的参数,因此对于参数为引用传递直接报错,以此防患于未然。
但是我设计的是有swap的,因此就跪了。

bool asc( pair<int, int> i, pair<int, int> j)
{
    if(i.first<j.first)
        return true;
    else
    {
        swap(i.second, j.second);
        return false;
    }
}

bool desc( pair<int, int> i, pair<int, int> j)
{
    if(i.first>j.first)
        return true;
    else
    {
        swap(i.second, j.second);
        return false;
    }
    //return ou[i].first>ou[j].first;
}

void bubblelib()
{
    sort(ji.begin(),ji.end(), asc);
    //cout<<"ji:"<<endl;
    //for(int i=0;i<ji.size();i++)
    //    cout<<ji[i].first<<":"<<ji[i].second<<" ";
    sort(ou.begin(),ou.end(),desc);
    //cout<<endl<<"ou:"<<endl;
    //for(int i=0;i<ou.size();i++)
    //    cout<<ou[i].first<<":"<<ou[i].second<<" ";

    for(int i=0;i<ji.size();i++)
        a[ji[i].second]=ji[i].first;
    for(int i=0;i<ou.size();i++)
        a[ou[i].second]=ou[i].first;

}

群里说有点像Shell排序
http://acdream.info/contest?cid=1095#problem-D

今天print发现offline了,其他人可以打印,于是发现自己的问题,想到这个是网络打印机,从网络里面连上的,可能和之前的不一样。于是发现是自己断过网,但是重新连出现
http://article.pchome.net/content-554834.html
于是重启了print服务就可以了。

之前admis的添加打印机方式不会出现断网后重新连的问题,NTU那边也是这么练的,不会出现问题,难道是本地打印机的原因,而这个是网络打印机。不太清楚。。。。

Posted by richard爱闹 - 8月 22 2014
如需转载,请注明: 本文来自 Richard