ACM代码模板
功能介绍
写了I/O函数,支持以下几种方式
read(num); //读入一个数num(任意整数类型,下同)
read(num1,num2,num3,num4); //读入任意多个数
read(arr,n); //对一个整数数组arr读入n个值,[0,n-1]
read(arr,first,last); //对一个整数数组arr读入区间last-first+1个值,[first,last]
read(s); //读入一个字符串数组(string和char数组都支持)
print(num); //输出一个数num
print(num1,num2,num3,num4); //输出任意多个数,中间用空格隔开
print(arr,n); //对一个整数数组arr输出n个值,[0,n-1],中间用空格隔开
print(arr,first,last); //对一个整数数组arr输出last-first+1个值,[first,last],中间用空格隔开
10 //read()有返回值,遇到EOF返回0。多组数据时可以放心使用while(read(n)){}
//至于字符串的输出没有进行优化,测试显示直接cout或者printf比较快
关于define nc getchar,是因为用到了fread,本地调试时候请不要注释,否则无法从键盘读入数据,提交时注释这句话即可。
支持以下几个函数
gcd(a,b); //求两数gcd(任意整数类型,下同)
lowbit(x); //求一个整数的lowbit
mishu(x); //判断一个数是不是2的幂
q_mul(a,b,p); //求(a*b)%p的值,防止溢出,O(logN)
f_mul(a,b,p); //求(a*b)%p的值,防止溢出,O(1),可能丢失精度
q_pow(a,b,p); //求(a^b)%p的值,不防溢出,O(logN)
s_pow(a,b,p); //求(a^b)%p的值,防溢出,O(logN*logN)
ex_gcd(a,b,x,y); //扩展GCD
com(m,n); //求C(m,n)
isprime(num); //判断一个数是否质数
其他一些宏定义自行查看即可了解,大部分的东西我都尽可能的进行了优化,之前有个很冗长的,现在修改成这样了,基本也就是最终版本。
//XDDDDDDi
#include <bits/stdc++.h>
using namespace std;
#define PB push_back
#define MT make_tuple
#define MP make_pair
#define pii pair<int,int>
#define pdd pair<double,double>
#define F first
#define S second #define MOD 1000000007
#define PI (acos(-1.0))
#define EPS 1e-6
#define MMT(s,a) memset(s, a, sizeof s)
#define GO(i,a,b) for(int i = (a); i < (b); ++i)
#define GOE(i,a,b) for(int i = (a); i <= (b); ++i)
#define OG(i,a,b) for(int i = (a); i > (b); --i)
#define OGE(i,a,b) for(int i = (a); i >= (b); --i) typedef unsigned long long ull;
typedef long long ll;
typedef double db;
typedef long double ldb;
typedef stringstream sstm;
int fx[][] = {{,},{-,},{,},{,-},{,},{,-},{-,-},{-,}}; template<typename T> using maxHeap = priority_queue<T, vector<T>, less<T> >;
template<typename T> using minHeap = priority_queue<T, vector<T>, greater<T> >; inline char nc(){ static char buf[], *p1 = buf, *p2 = buf; return p1 == p2 && (p2 = (p1 = buf) + fread(buf,,,stdin),p1 == p2) ? EOF : *p1++; }
#define nc getchar
template<typename T> inline int read(T& sum){ char ch = nc(); if(ch == EOF || ch == -) return ; int tf = ; sum = ; while((ch < '' || ch > '') && (ch != '-')) ch = nc(); tf = ((ch == '-') && (ch = nc())); while(ch >= '' && ch <= '') sum = sum* + (ch-), ch = nc(); (tf) && (sum = -sum); return ; }
template<typename T,typename... Arg> inline int read(T& sum,Arg&... args){ int ret = read(sum); if(!ret) return ; return read(args...); }
template<typename T1,typename T2> inline void read(T1* a,T2 num){ for(int i = ; i < num; i++){read(a[i]);} }
template<typename T1,typename T2> inline void read(T1* a,T2 bn,T2 ed){ for(;bn <= ed; bn++){read(a[bn]);} }
inline void read(char* s){ char ch = nc(); int num = ; while(ch != ' ' && ch != '\n' && ch != '\r' && ch != EOF){s[num++] = ch;ch = nc();} s[num] = '\0'; }
inline void read(string& s){ static char tp[]; char ch = nc(); int num = ; while(ch != ' ' && ch != '\n' && ch != '\r' && ch != EOF){tp[num++] = ch;ch = nc();} tp[num] = '\0'; s = (string)tp; }
template<typename T> inline void print(T k){ int num = ,ch[]; if(k == ){ putchar(''); return ; } (k<)&&(putchar('-'),k = -k); while(k>) ch[++num] = k%, k /= ; while(num) putchar(ch[num--]+); }
template<typename T,typename... Arg> inline void print(T k,Arg... args){ print(k),putchar(' '); print(args...);}
template<typename T1,typename T2> inline void print(T1* a,T2 num){ print(a[]); for(int i = ; i < num; i++){putchar(' '),print(a[i]);} }
template<typename T1,typename T2> inline void print(T1* a,T2 bn,T2 ed){ print(a[bn++]); for(;bn <= ed; bn++){putchar(' '),print(a[bn]);} }
/*math*/
template<typename T> inline T gcd(T a, T b){ return b== ? a : gcd(b,a%b); }
template<typename T> inline T lowbit(T x){ return x&(-x); }
template<typename T> inline bool mishu(T x){ return x>?(x&(x-))==:false; }
template<typename T1,typename T2, typename T3> inline ll q_mul(T1 a,T2 b,T3 p){ ll w = ; while(b){ if(b&) w = (w+a)%p; b>>=; a = (a+a)%p; } return w; }
template<typename T,typename T2> inline ll f_mul(T a,T b,T2 p){ return (a*b - (ll)((long double)a/p*b)*p+p)%p; }
template<typename T1,typename T2, typename T3> inline ll q_pow(T1 a,T2 b,T3 p){ ll w = ; while(b){ if(b&) w = (w*a)%p; b>>=; a = (a*a)%p;} return w; }
template<typename T1,typename T2, typename T3> inline ll s_pow(T1 a,T2 b,T3 p){ ll w = ; while(b){ if(b&) w = q_mul(w,a,p); b>>=; a = q_mul(a,a,p);} return w; }
template<typename T> inline ll ex_gcd(T a, T b, T& x, T& y){ if(b == ){ x = , y = ; return (ll)a; } ll r = exgcd(b,a%b,y,x); y -= a/b*x; return r;/*gcd*/ }
template<typename T1,typename T2> inline ll com(T1 m, T2 n) { int k = ;ll ans = ; while(k <= n){ ans=((m-k+)*ans)/k;k++;} return ans; }
template<typename T> inline bool isprime(T n){ if(n <= ) return n>; if(n% != && n% != ) return ; T n_s = floor(sqrt((db)(n))); for(int i = ; i <= n_s; i += ){ if(n%i == || n%(i+) == ) return ; } return ; }
/* ----------------------------------------------------------------------------------------------------------------------------------------------------------------- */ int main() { return ;
}
ACM代码模板的更多相关文章
- ACM、OI、OJ题目常用代码模板
仓库源码地址:https://github.com/richenyunqi/code-templates 本仓库主要提供 ACM.OI.OJ.PAT.CSP 题目中常见算法和数据结构的实现,它们都以基 ...
- 关于ACM,关于CSU
原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...
- 制作代码模板的 LaTex 模板
Tex 真的是一个用起来非常舒服的排版工具(对于排版要求高的人来说),去比赛前一天放弃了markdown转pdf来生成代码模板,现学Tex(其实美赛已经用过了:P). 推荐一个链接:TeX - Bea ...
- 2079 ACM 选课时间 背包 或 母函数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2079 题意:同样的学分 ,有多少种组合数,注意同样学分,课程没有区别 思路:两种方法 背包 母函数 背包: ...
- 「浙江理工大学ACM入队200题系列」问题 E: 零基础学C/C++78——求奇数的乘积
本题是浙江理工大学ACM入队200题第八套中的E题 我们先来看一下这题的题面. 题面 输入 输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你 ...
- SCNU ACM 2016新生赛决赛 解题报告
新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- acm结束了
最后一场比赛打完了.之前为了记录一些题目,开了这个博客,现在结束了acm,这个博客之后也不再更新了. 大家继续加油!
- 关于ACM的总结
看了不少大神的退役帖,今天终于要本弱装一波逼祭奠一下我关于ACM的回忆. 从大二上开始接触到大三下结束,接近两年的时间,对于大神们来说两年的确算不上时间,然而对于本弱来说就是大学的一半时光.大一的懵懂 ...
随机推荐
- C/C++ 数据类型
C/C++ 数据类型 C语言包含5个基本数据类型: void, integer, float, double, 和 char. 类型 描述 字节数 取值范围 void 空类型 1 int 整型 4 - ...
- 【原创】display:flex布局大全
全都是自己写的 希望大家可以点个赞 谢谢! Html代码(没时间精简 请多包涵) <!DOCTYPE html> <html lang="en"> < ...
- Spring Boot 与 Mybatis、Mysql整合使用的例子
第一步: 创建一个SpringBoot的工程,在其中的Maven依赖配置中添加对JDBC.MyBatis.Mysql Driver的依赖具体如下: <!-- JDBC --> <de ...
- 盘一盘 NIO (二)—— Channel解析
Channel是个啥? Channel,顾名思义,它就是一个通道.NIO中的所有IO都是从 Channel 开始的. Channel通道和流非常类似,主要有以下几点区别: 1.流是单向的,通道是双向的 ...
- mysql的数据类型汇总
数字型 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0, ...
- 深刻剖析spring三种注入方式以及使用注解的原理
概述 注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作.如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO ...
- Springboot源码分析之事务拦截和管理
摘要: 在springboot的自动装配事务里面,InfrastructureAdvisorAutoProxyCreator ,TransactionInterceptor,PlatformTrans ...
- Javaweb Session机制(有待补充)
Javaweb Session机制 一.前言 session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话是从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个ses ...
- Oracle - Sequences
创建计数器 --最小值1,最大值999999999999999999999999999,从1开始,每次自增1,缓存20 --SQL语句: -- Create sequence create seque ...
- hdu-6681 Rikka with Cake
题目链接 hdu-6681 Problem Description Rikka's birthday is on June 12th. The story of this problem happen ...