小算法-知识技巧
LOI_Sherlock
日拱一卒,功不唐捐。
展开
-
字符串转化为数组
输入为字符数组时:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char a[1010];int b[1010];int n;int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)原创 2017-08-07 16:06:02 · 361 阅读 · 0 评论 -
【codevs 1204】寻找子串位置
题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。输入描述 Input Description 仅一行包含两个字符串a和b输出描述 Output Description 仅一行一个整数样例输入 Sample Input abcd bc样例输出 Sample Output 2数据范围及提示 Data Size & Hint 字原创 2017-09-23 08:24:14 · 463 阅读 · 0 评论 -
双端队列的用法
//来自学长课件 容器——containers deque(double-ended queue)-双端队列这是一个神奇的容器,stack和queue都是通过它实现的。 可以从队首和队尾进行插入和删除操作。 还可以访问队中元素。头文件 deque<类型>d; 可以用d[i]访问元素。 常用于SPFA的SLF优化。函数: push_back(x)/push_front(x)原创 2017-09-25 21:27:23 · 2038 阅读 · 0 评论 -
全排列(STL)
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[101],n;int main(){ cin>>n; for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); fo原创 2017-10-25 14:20:07 · 284 阅读 · 0 评论 -
【小算法】求约数个数
约数个数及证明从小学数学开始? 什么是约数:如果一个整数能被两个整数整除,那么这两个数是这个数的约数。一个数的约数的个数=这个数的所有质因子的次数+1的乘积。 例如:48=2^4*3 48的约数的个数=(4+1)*(1+1)=10证明:(来自权限chairman) 2^0*3^0 2^0*3^1 2^0*3^2 …… 2^1*3^0 2^1*3^1 …原创 2017-10-31 21:22:05 · 4498 阅读 · 0 评论 -
【学习记录】传递闭包
传递闭包大概就是。。 先将一张图用一个矩阵表示出来,矩阵中的a[i][j]=1表示i~j有一条直接相连的边。这样就得到一个0/1矩阵。传递闭包算法的目的就是根据以上的初始矩阵,探索出最终的矩阵,表示根据初始的直接连接关系,从初始矩阵扩展出一个包括间接连接关系的最终矩阵。这个最终矩阵就是传递闭包矩阵。 概念参考:QWQ这里阐述了传递闭包与矩阵乘法的关系,看不懂先留着:QWQQ很容易想到传递闭包可以原创 2017-10-30 07:31:02 · 2850 阅读 · 0 评论 -
【codevs 1506】传话
题目描述 Description 一个朋友网络,如果a认识b,那么如果a第一次收到某个消息,那么会把这个消息传给b,以及所有a认识的人。如果a认识b,b不一定认识a。所有人从1到n编号,给出所有“认识”关系,问如果i发布一条新消息,那么会不会经过若干次传话后,这个消息传回给了i,1<=i<=n。输入描述 Input Description 第一行是n和m,表示人数和认识关系数。接下来的m行,每行原创 2017-10-29 21:49:48 · 839 阅读 · 0 评论 -
【总结】
1、scanf读入字符串: scanf(“%s”,c.c_str());2、读入输出用scanf和printf,弃掉cin,cout。3、在algorithm库里有个abs()函数,可以计算绝对值。4、关于输入输出:scanf/printf比cin/cout快很多,手读比scanf/printf快很多。gets()读入字符串到回车结束,puts()输出字符串并换行。有资料说gets()不能用,原创 2017-10-09 17:15:54 · 308 阅读 · 0 评论 -
【codevs 1456】隐藏口令
题目描述 Description 有时候程序员有很奇怪的方法来隐藏他们的口令。Billy”Hacker”Geits会选择一个字符串S(由L个小写字母组成,5<=L<=100,000),然后他把S顺时针绕成一个圈,每次取一个做开头字母并顺时针依次取字母而组成一个字符串。这样将得到一些字符串,他把它们排序后取出第一个字符串。把这个字符串的第一个字母在原字符串中的位置做为口令。 第一个字母所在的位置是原创 2017-10-19 19:21:47 · 734 阅读 · 0 评论 -
位运算
& ====按位与==== 同1则1| ====按位或====只要有一个为1,则为1^ ====异或====两值相异则为1~ ====取反====1变为0,0变为1“<<”====左移“>>”====右移原创 2017-10-07 20:01:15 · 210 阅读 · 0 评论 -
论怎样判断字母是大写还是小写
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char a;int main(){ cin>>a; int i=a-48; if(i>=17&&i<=42) cout<<"大"<<'\n'; else if(i>=49&&原创 2017-09-29 10:04:42 · 1208 阅读 · 0 评论 -
初始化
长见识 所以,初始化为最大值的时候用0x3f3f3f3f。如果循环里这样写: for(int i=first[u];i!=-1;i=nxt[i])那么主函数里first数组要初始化为-1. memset(first,0xff,sizeof(first));如果这样写。。 for(int i=first[u];i;i=nxt[i])不需要初始化。 zz了原创 2017-09-13 19:02:06 · 257 阅读 · 0 评论 -
字符转化为数字
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n;char a;int main(){ cin>>a; n=a; cout<<n-'a';//如果是字母,-'a';如果是数字,-'0' return 0;}原创 2017-08-07 15:55:05 · 660 阅读 · 0 评论 -
部分排序
自己发明的 不喜勿喷#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[101],b[101];int n;int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) {原创 2017-08-07 14:30:53 · 871 阅读 · 0 评论 -
读入输出优化
#include<iostream>#include<cstdio>using namespace std;int x;void read(int &a){ int ans=0; char c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') ans*=10,ans+=c-'0原创 2017-09-02 21:46:58 · 234 阅读 · 0 评论