哭瞎了···昨天夜里写了一半多的博客因为卡机就这么没了TUT今天重新写,浪费我多少时间TUT

第一题 RQNOJ358 线段

画个图就知道是两点间距离的二倍···(我太傻竟没看出来)

但是!这是小圆圆心在大圆外的情况,如果在大圆内部,画图可知正解是大圆直径

然而···出题人竟然没发现这一点于是只用了第一种解法没加特判···

所以说蠢萌的出题人···

代码

标准解(OJAC)

//chord
//copyright by ametake
#include#include#include#includeusing namespace std;
int xa,ya,xb,yb,ra,rb;
double ans;
int main()
{
freopen("chord.in","r",stdin);
freopen("chord.out","w",stdout);
//freopen("1.txt","r",stdin);
//freopen("2.txt","w",stdout);
scanf("%d%d%d",&xa,&ya,&ra);
scanf("%d%d%d",&xb,&yb,&rb);
ans=sqrt((double)(xb-xa)*(double)(xb-xa)+(double)(yb-ya)*(double)(yb-ya));
ans*=2;
printf("%.6f\n",ans);
return 0;
}

正解

//chord
//copyright by ametake
#include#include#include#includeusing namespace std;
int xa,ya,xb,yb,ra,rb;
double ans;
int main()
{
freopen("chord.in","r",stdin);
freopen("chord.out","w",stdout);
//freopen("1.txt","r",stdin);
//freopen("2.txt","w",stdout);
scanf("%d%d%d",&xa,&ya,&ra);
scanf("%d%d%d",&xb,&yb,&rb);
ans=sqrt((double)(xb-xa)*(double)(xb-xa)+(double)(yb-ya)*(double)(yb-ya));
int r=max(ra,rb);
if (ans<=r) ans=r;
ans*=2;
printf("%.6f\n",ans);
return 0;
}
第二题 循环 NOIP2005PJ4
谁说PJ能AK的···
这是一个递推题,要写高精。
如果暴搜,乘幂上限到五百多能拿三十分···
但也只能三十分,因为其他点答案都是十的几十次方···
暴搜程序
(幸亏我点了保存可恶的CSDN写到第二题又给我卡死了!!!可恶!!!)
(就在我说这句话后当我粘上代码第三次卡死了)
//circle
//copyright by ametake
//思路 从基数开始一个个尝试基数的倍数 第一次快速幂 之后高精乘即可 每次检验
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>using namespace std;const int sx=600;
const int maxn=100+10;
//const int power=1;
const int base=10;
const int jishu[10]={1,1,4,4,2,1,1,4,4,2};int a[maxn],ans[maxn],c[maxn];
char cc[maxn];
int now[maxn],jj[maxn];
int k;void multi(int *aa,int *b)
{memset(c,0,sizeof(c));int len1=aa[0];int len2=b[0];c[0]=min(100,aa[0]+b[0]-1);for (int i=1;i<=len1;i++){for (int j=1;j<=min(len2+i-1,100-i+1);j++){c[i+j-1]+=aa[i]*b[j];c[i+j]+=c[i+j-1]/base;c[i+j-1]%=base;}}if (c[c[0]+1]) if (c[0]<100) c[0]++;memcpy(aa,c,sizeof(c));
}bool check()
{memcpy(ans,now,sizeof(now));multi(ans,a);bool noo=false;for (int i=1;i<=k;i++) if (ans[i]!=a[i]) noo=true;if (noo) return false;else return true;
}int main()
{//freopen("1.txt","r",stdin);//freopen("2.txt","w",stdout);freopen("circle.in","r",stdin);freopen("circle.out","w",stdout);scanf("%s",cc);scanf("%d",&k);int p=0;//p是基数,a是最原始数组,now是当前数组,由a求幂而来且指数一定为基数的倍数,ans是检验时用的要再乘一遍a now[0]=k;a[0]=k;if (k>strlen(cc)){printf("-1\n");return 0;}for (int i=strlen(cc);i>=1;i--){a[++p]=cc[i-1]-'0';now[p]=cc[i-1]-'0';if (p==k) break;}p=jishu[now[1]];//从此a不动 if (p>1) multi(now,now);if (p==4) multi(now,now);memcpy(jj,now,sizeof(now));//jj是基底数组 每次乘它 if (check()){printf("%d\n",p);return 0;} else{for (int i=2;i<=sx/p;i++){multi(now,jj);if (check()){printf("%d\n",p*i);return 0;} }}printf("-1\n");return 0;
}

这道题正解至今不明白为什么是十次,只是知道每次对于某一位向前递推最后求乘积···这个大家自己去网上搜吧

第三题 altitude
没找到原题,反正也无所谓
直接暴力枚举可过
//altitude
//copyright by ametake
#include#include#includeusing namespace std;
const int maxn=100+10;
int a[maxn][maxn];
int n,s,k;
inline int read()
{
int f=1,a=0;
char ch=getchar();
while (ch<'0'||ch>'9')
{
if (ch=='-') f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9')
{
a=a*10+ch-48;
ch=getchar();
}
a*=f;
return a;
}
int main()
{
//freopen("1.txt","r",stdin);
//freopen("2.txt","w",stdout);
freopen("altitude.in","r",stdin);
freopen("altitude.out","w",stdout);
n=read();
s=read();
k=read();
int x,y;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
a[i][j]=read();
}
}
for (int i=1;i<=k;i++)
{
x=read();
y=read();
int mi=0x3f3f3f;
int ma=0;
for (int i=x;i<=x+s-1;i++)
{
for (int j=y;j<=y+s-1;j++)
{
ma=max(a[i][j],ma);
mi=min(a[i][j],mi);
}
}
printf("%d\n",ma-mi);
}
return 0;
}

也可以用DP做,但时间复杂度更大,因为DP球了所有的状态

参见显摆代码 这里不放了
第四题 sudoku
近似于codevs数独挑战 其实只是读入方式变了而已
暴搜即可 一道典型的棋盘暴搜题 和八皇后一样的判断 其实可以参见靶形数独 我感觉我几乎是比着黄学长靶形数独写的
//sudoku
//copyright by ametake
#include#include#include#define dfsnext(x,y) {y==9?dfs(x+1,1):dfs(x,y+1);}
using namespace std;
int a[10][10];//ËÑË÷Êý×é
bool b[10][10];//ÊÇ·ñÓÐԭʼÊý×Ö ÓÐÊÇtrue true²»ÄÜÌîÊý
bool h[10][10],l[10][10],lit[10][10];//true²»ÄÜÌî
bool ok=false;
bool can(int x,int y,int num)
{
if (h[x][num]) return false;
if (l[y][num]) return false;
if (lit[(x-1)/3*3+(y-1)/3+1][num]) return false;
h[x][num]=true;
l[y][num]=true;
lit[(x-1)/3*3+(y-1)/3+1][num]=true;
a[x][y]=num;
return true;
}
void del(int x,int y,int num)
{
h[x][num]=l[y][num]=lit[(x-1)/3*3+(y-1)/3+1][num]=false;
a[x][y]=0;
}
void print()
{
for (int i=1;i<=9;i++)
{
for (int j=1;j<=9;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
}
void dfs(int x,int y)
{
if (ok) return;
if (x==10&&y==1)
{
ok=true;
print();
return;
}
if (b[x][y]) dfsnext(x,y);
if (!b[x][y])
{
for (int i=1;i<=9;i++)
{
if (can(x,y,i))
{
dfsnext(x,y);
if (ok) break;
del(x,y,i);
}
}
}
}
int main()
{
freopen("sudoku.in","r",stdin);
freopen("sudoku.out","w",stdout);
char s[10];
for (int i=1;i<=9;i++)
{
scanf("%s",s);
for (int j=1;j<=9;j++)
{
if (s[j-1]=='?') a[i][j]=0;
else
{
a[i][j]=s[j-1]-'0';
h[i][s[j-1]-'0']=true;
l[j][s[j-1]-'0']=true;
lit[(i-1)/3*3+(j-1)/3+1][s[j-1]-'0']=true;
b[i][j]=true;
}
}
}
dfs(1,1);
return 0;
}
总结:思维能力和代码实现能力仍需增强 基础部分尤其是深广搜还要再练 算法还应该更扎实 加油啊
——连重阳节都过去了
——雾霾天,外面灰蒙蒙的一片,好像要下雨一样
——江涵秋影雁初飞,与客携壶上翠微

【日常学习】【搜索递推和其他】10.21.2015校内测试总结相关推荐

  1. P1466 集合 Subset Sums 搜索+递推+背包三种做法

    题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子 ...

  2. 【学习笔记】线性递推数列

    1.11.11.1 定义:对于无限数列{a0,a1,a2,...}\{a_0,a_1,a_2,...\}{a0​,a1​,a2​,...}和有限非空数列{r0,r1,r2,...,rm−1}\{r_0 ...

  3. UVA - 10253 Series-Parallel Networks(递推式、记忆化搜索写法)

    题目:UVA-10253 题目翻译(来自蓝书): 串并联网络有两个端点,一个叫源,一个叫汇,递归定义如下: (1) 一条单独的边是串并联网络. (2) 若G1和G2是串并联网络,把它们的源和源接在一起 ...

  4. 数字三角形——递归、递推、记忆化搜索

    数字三角形 描述:          有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数. 问题:              从第一行的数开始,每次可以往左 ...

  5. 常系数齐次线性递推学习笔记

    定义 对于数列fff,如果有递推式 fn=∑i=1kai×fn−i(n≥k)f_n=\sum_{i=1}^k a_i\times f_{n-i} \quad (n\geq k)fn​=i=1∑k​ai ...

  6. [线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程

    线性递推数列 线性递推 对于无限数列 {a0,a1,...}\{a_0,a_1,...\}{a0​,a1​,...} 和有限非空数列 {r0,r1,...,rm−1}\{r_{0},r_1,...,r ...

  7. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

    题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...

  8. 自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比。

    自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比. 参考运行截图: ...

  9. 【学习小记】常系数齐次线性递推

    问题引入 给出数列 g g g,满足当 n > m n>m n>m时 g n = ∑ i = 1 m g n − i × a i g_n=\sum\limits_{i=1}^{m}g ...

最新文章

  1. 可以使任何人获得管理员权限的Windows 10系统漏洞
  2. 分组交换中的时延、丢失和吞吐量
  3. OpenStack部署笔记和安装WindowsXP镜像
  4. CodeForces - 1350B Orac and Models(dp)
  5. go vs python 对接外部web api_python--web--让python提供api服务--aiohttp-Go语言中文社区
  6. [转]敏捷开发之Scrum扫盲,及敏捷开发中XP与SCRUM的区别
  7. python怎么输入两行_python交互模式下输入换行/输入多行命令的方法
  8. 如何将视频设置为网页背景
  9. linux的基础知识——进程组
  10. linux的vim多选择,真的有(很多)linux大牛用vim写项目吗?
  11. 科技感大屏展示设计,数据可视化设计
  12. HBuilder创建app 基础
  13. Eclipse 使用
  14. 关于DYNPRO程序的系统迁移与版本不匹配问题之一
  15. 「leetcode」491.递增子序列【回溯算法】详细图解!
  16. stm32 读取sd卡图片显示_全面测试雷克沙1667x 性能,你懂什么叫超高速SD卡吗
  17. php 获取小数精度,php小数精度问题
  18. mysql世界国家省市地区的信息中英文
  19. ffmpeg之libx264编译安装方法及一键shell脚本
  20. 6374. 【NOIP2019模拟2019.10.04】结界[生与死的境界]

热门文章

  1. Js 删除 指定Domin 指定 path 下的 cookie中指定的内容
  2. html隐藏qq右上角三个点,qq聊天出现这“3个小标志”,你们多半“坠入爱河”,隐藏不住...
  3. 算法——二进制小数转换
  4. 调用后台接口返回报错前端隐藏提示_从零开始的Android新项目9 - 前端用后台接口设计...
  5. 上海翊科完成B轮融资,启明创投独家投资
  6. web存储(Storage)
  7. 部署gerrit+mysql+ngnix
  8. html检测手机是否摇动,HTML5摇一摇(上)—如何判断设备摇动
  9. 黑马点评--达人探店
  10. RDIFramework.NET代码生成器全新V3.5版本发布-重大升级