【日常学习】【搜索递推和其他】10.21.2015校内测试总结
哭瞎了···昨天夜里写了一半多的博客因为卡机就这么没了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;
}
//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
//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
//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校内测试总结相关推荐
- P1466 集合 Subset Sums 搜索+递推+背包三种做法
题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子 ...
- 【学习笔记】线性递推数列
1.11.11.1 定义:对于无限数列{a0,a1,a2,...}\{a_0,a_1,a_2,...\}{a0,a1,a2,...}和有限非空数列{r0,r1,r2,...,rm−1}\{r_0 ...
- UVA - 10253 Series-Parallel Networks(递推式、记忆化搜索写法)
题目:UVA-10253 题目翻译(来自蓝书): 串并联网络有两个端点,一个叫源,一个叫汇,递归定义如下: (1) 一条单独的边是串并联网络. (2) 若G1和G2是串并联网络,把它们的源和源接在一起 ...
- 数字三角形——递归、递推、记忆化搜索
数字三角形 描述: 有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数. 问题: 从第一行的数开始,每次可以往左 ...
- 常系数齐次线性递推学习笔记
定义 对于数列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∑kai ...
- [线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程
线性递推数列 线性递推 对于无限数列 {a0,a1,...}\{a_0,a_1,...\}{a0,a1,...} 和有限非空数列 {r0,r1,...,rm−1}\{r_{0},r_1,...,r ...
- HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )
题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...
- 自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比。
自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比. 参考运行截图: ...
- 【学习小记】常系数齐次线性递推
问题引入 给出数列 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 ...
最新文章
- 可以使任何人获得管理员权限的Windows 10系统漏洞
- 分组交换中的时延、丢失和吞吐量
- OpenStack部署笔记和安装WindowsXP镜像
- CodeForces - 1350B Orac and Models(dp)
- go vs python 对接外部web api_python--web--让python提供api服务--aiohttp-Go语言中文社区
- [转]敏捷开发之Scrum扫盲,及敏捷开发中XP与SCRUM的区别
- python怎么输入两行_python交互模式下输入换行/输入多行命令的方法
- 如何将视频设置为网页背景
- linux的基础知识——进程组
- linux的vim多选择,真的有(很多)linux大牛用vim写项目吗?
- 科技感大屏展示设计,数据可视化设计
- HBuilder创建app 基础
- Eclipse 使用
- 关于DYNPRO程序的系统迁移与版本不匹配问题之一
- 「leetcode」491.递增子序列【回溯算法】详细图解!
- stm32 读取sd卡图片显示_全面测试雷克沙1667x 性能,你懂什么叫超高速SD卡吗
- php 获取小数精度,php小数精度问题
- mysql世界国家省市地区的信息中英文
- ffmpeg之libx264编译安装方法及一键shell脚本
- 6374. 【NOIP2019模拟2019.10.04】结界[生与死的境界]
热门文章
- Js 删除 指定Domin 指定 path 下的 cookie中指定的内容
- html隐藏qq右上角三个点,qq聊天出现这“3个小标志”,你们多半“坠入爱河”,隐藏不住...
- 算法——二进制小数转换
- 调用后台接口返回报错前端隐藏提示_从零开始的Android新项目9 - 前端用后台接口设计...
- 上海翊科完成B轮融资,启明创投独家投资
- web存储(Storage)
- 部署gerrit+mysql+ngnix
- html检测手机是否摇动,HTML5摇一摇(上)—如何判断设备摇动
- 黑马点评--达人探店
- RDIFramework.NET代码生成器全新V3.5版本发布-重大升级