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那边也是这么练的,不会出现问题,难道是本地打印机的原因,而这个是网络打印机。不太清楚。。。。