认真审题啊大哥!!!!
第一道填空 能数就数 仔细一点 发现规律 多数几遍 上下左右换方法检查一下。
从几个几个的开始找规律
奇淫技巧
1 打表 空间换时间 把要用的结果事先算出来,之后查询直接取这些结果
2 先暴力计算小范围数据的结果 然后找规律。
3 pat 左边p*右边t
怎么获得每个A左边的P:设定一个数组LeftNumP,从左到右遍历字符串,若当前位i是P,那么leftNumP【i】就等于leftNumP[i-1]+1。如果当前位i不是P,那么leftNumP[i]=leftNumP[i-1]
获得T:直接定义一个变量numT,如果是T,加一,如果是A,直接计算结果ans,ans加上现在leftnumP和numT的乘积。这样遍历完了就能得到ans。
gets(str);//读入字符串
int len = strlen(str);排序
#include <algorithm>
using namespace std;
bool cmp(int a,int b){//递减
return a>b;
}
2.结构体数组
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- struct node{
- int x,y;
- }ssd[10];
- bool cmp(node a,node b){
- return a.x>b.x;//按x值排序
- }
- int main(){
- ssd[0].x = 2;
- ssd[0].y = 1;//{2,1}
- ssd[1].x = 1;
- ssd[1].y = 3;//{1,3}
- ssd[2].x = 3;
- ssd[2].y = 1;//{3,1}
- sort(ssd,ssd+3,cmp);
- for(int i=0;i<3;i++){
- printf("%d %d\n",ssd[i].x,ssd[i].y);
- }
- return 0;
- }
- bool cmp(Student a,Student b){
- if(a.score!=b.score) return a.score>b.score;//从大到小排
- else return strcmp(a.id,b.id)<0;//分数一样的按准考证号排 ,小于号就是字典序小的在前面
- }
整数转数组
void toarray(int n,int num[]){//将n的每一位存到num数组里
for(int i=0;i<4;i++){
num[i]=n%10;
n/=10;
}
}
数组转整数
void tonumber(int num[]){
int sum=0;
for(int i=0;i<4;i++){
sum = sum*10+num[i];
}
return sum;
}
求解最大公约数
int gcd(int a,int b){
return !b?a:gcd(b,a%b);
}
int gcd(int a,int b){
if(b==0) return a;
else return gcd(b,a%b);
}
求解最小公倍数
d最大公约数
a/d*b
分数早上整理
struct Fraction{
int up,down;//分子,分母
};
三项规则:
1。 down分母非负, 令分子为负。
2。 分数为0,规定分子为0,分母为1。
3. 分数最简化 没有除一以外的公约数。 约分 :分子分母同除最大公约数d
输出 :
struct Fraction{
int up,down;//分子,分母
};
void show(Fraction r){
if(r.down==1) printf("%lld",r.up);//整数
else if (abs(r.up)>r.down){//假分数
printf("%d %d/%d",r.up/r.down,abs(r.up)%r.down,r.down);
} else{
printf("%d/%d",r.up,r.down);//真分数
}
}
递归 要记得回溯!!!还原
找相似性 递归边界 出口
技巧:填参数 注用每次调用的层次 参数不同。
n个球 任意取出m个 分两种情况 一种 :我取一号球 那剩下的球中取m-1个
我不取 m
求反串 递归
杨辉三角
m个A n个B 组成多少排列
第一个位置是A 剩下m-1A n个B 第一个位置是B m A n-1B
整数划分
分割成小部分 和一个大部分
某财务漏了几笔
浮点数的应用
啤酒与饮料
0.2+0.1!=0.3
因为计算机是二进制表示
扩大十倍
比酒量
改写成整数 1/a+1/b=1 通分
浮点数不能精确比较
定义有理数结构体 分子 分母 加减乘除
有效数字 任意精度 除不尽 上下文 mathcontext 怎么舍入 四舍五入
车轮轨迹
整数的性质
素数
第100002个素数
!!!!!筛法 把2的倍数筛掉 把3的倍数筛掉
!!!a的n次幂 对P取模 快速幂
(a%p + b%p)%p =(a+b)%p (a*b)%p = (a%p*b%p)%p
不定方程
方程个数和未知数要一样
一次不定方程 枚举 x<100 y<100 if满足什么
ax+by=c
ax = c-by 求特解 能被a整除的c-by 求出x和y
特解x0 y0
x=x+bt y= y-at
t= 0 1 2 3
买不到的数目
ax+by=c xy整数 ab互质
花朵数
a^21+b^21+c^21+……=abcd……
先算好0-9的21次方
六角幻方
博弈问题
![](https://i-blog.csdnimg.cn/blog_migrate/3187e2b0a2ea44c1a3ecd3707b0861d7.png)
!!!买不到的数目
!!!高僧斗法 博弈问题 对方必输的解法
尼姆游戏 若干堆硬币,二人轮流取 把硬币变成两堆相等的一对就输了
没有平局 二进制规律 3 11
4 100
5 101 列向 1的数目为偶数 对方必输
!!转换二进制? 任何无偏二人游戏转成尼姆游戏。
把小和尚位置间的空隙:尼姆堆 偶数两两组合 奇数 在最高阶补一个
概率问题求解
概率模拟
三十个人的班级生日 0-365随机产生数字 有没有碰撞
int N =1000*100
int n 碰撞次数
int x[365]
p = math.random()*365 循环三十次 产生三十次随机数 碰撞了就出
if x[i]=1 break;
![](https://i-blog.csdnimg.cn/blog_migrate/f55002ecf2f05075a24cee2f3d54c3cc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9be181d17304d96e47dca516330ab168.png)
每次概率不一样 估算就行
四张扑克牌 1-10 +-*/ 24点
接收四个整数 产生随机的组合方式 计算 等于24 break
中缀后缀表达式 看见数字压栈 逆波兰表达式
栈存数字
博弈问题
盒子取球 1 3 7 8 f(局面=当前所剩球的数目)
if >1&&f(n-1) 对方输了 我就赢了
if >3&&f(n-1) 对方输了 我就赢了
井字棋 三个棋子在一条直线
for对所有可走的位置
试---局面y
结果t =fy
if t=负 胜
t=平 tag=平
二叉树
递归定义法
int v
bitree l;
bitree r;
红黑树
每个结点要么红的要么黑的
根节点黑的
每个叶节点黑的
每一个结点红的 他的儿子都是黑的
1 插入根节点
2 插入结点