hdu刷题1
1002 大数加法
#include<iostream>
#include<cstring>
using namespace std;
int main()
{ char a[],b[];
int c[];
int n;
cin>>n;
for(int w=;w<=n;w++)
{
int i=,k=,j=;
memset(c,,sizeof(c));
cin>>a>>b;
int l1=strlen(a);
int l2=strlen(b);
l1--,l2--; while()
{ c[k]=c[k]+(a[l1]+b[l2]-''-'');
l1--;
l2--;
k++;
if(l1==-||l2==-) break;
}
if(l1==-&&l2!=-)
{
while(l2!=-){
c[k]=c[k]+(b[l2]-'');
k++;
l2--;
}
}
else if(l1!=-&&l2==-)
{
while(l1!=-){
c[k]=c[k]+(a[l1]-'');
k++;
l1--;
}
}
for(i=;i<k;i++)
{
if(c[i]>=&&i!=k-)
{
c[i+]+=c[i]/;
c[i]%=;
}
else if(c[i]>=&&i==k-)
{
c[i+]+=c[i]/;
c[i]%=;
k++;
}
} cout<<"Case "<<w<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
if(w!=n)
{
for(i=k-;i>=;i--)
{
cout<<c[i];
}
cout<<endl;
cout<<endl;
}
else{
for(i=k-;i>=;i--)
{
cout<<c[i];
}
cout<<endl;
}
}
}
1003 简单采用了dp的思想吧,这一个与上一个有关系,关键是找到这个关系
#include<iostream>
#include<string.h>
using namespace std;
int a[];
int dp[];
int main()
{ int t;
cin>>t;
for(int i=;i<=t;i++)
{
int n;
cin>>n;
for(int j=;j<=n;j++) cin>>a[j]; memset(dp,,sizeof(dp));
int s=,l=,r=;
int maxsum=a[];
dp[]=a[];
for(int k=;k<=n;k++)
{
if(dp[k-]>=)
dp[k]=dp[k-]+a[k];
else
{
dp[k]=a[k];
s=k;
}
if(dp[k]>maxsum)
{
maxsum=dp[k];
l=s;
r=k;
}
}
printf("Case %d:\n",i);
printf("%d %d %d\n", maxsum, l, r);
if(i!=t) printf("\n");
}
}
1005 定义 f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
给出A B 和N 求f(n) 思路就是找规律 如果循环中出现了两个连续的1 则说明循环出现
#include<bits/stdc++.h>
using namespace std;
int x[];
int main()
{ int a,b,c;
while(cin>>a>>b>>c)
{
if(a==&&b==&&c==) break;
memset(x,,sizeof(x));
x[]=,x[]=;
int i;
for(i=;i<=;i++)
{
x[i]=(x[i-]*a+x[i-]*b)%;
if(x[i]==&&x[i-]==) break;
}
c=c%(i-);
x[] = x[i-];
cout<<x[c]<<endl; }
}
1007
给n个点的坐标,求距离最近的一对点之间距离的一半。
第一行是一个数n表示有n个点,接下来n行是n个点的x坐标和y坐标。实数。
emmmm 这个分治思想比较好吧
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
struct node {
double x;
double y;
}p[]; int a[]; double cmpx(node a,node b) {
return a.x<b.x;
} double cmpy(int a,int b) {
return p[a].y<p[b].y;
} double dis(node a,node b) {
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
} double find(int l,int r){
if(r==l+) //如果只有一个或者两个点直接求最短长度
return dis(p[l],p[r]);
if(l+==r)
return min(dis(p[l],p[r]),min(dis(p[l],p[l+]),dis(p[l+],p[r]))); //递归求解
int mid=(l+r)>>; //从中间分开,进行分治
double ans=min(find(l,mid),find(mid+,r)); //寻找左右两边最小值
int i,j,cnt=;
for(i=l;i<=r;i++){ //统计距离中点距离小于ans的点
if(p[i].x>=p[mid].x-ans&&p[i].x<=p[mid].x+ans)
a[cnt++]=i;
}
sort(a,a+cnt,cmpy); //对y轴进行排序
for(i=;i<cnt;i++){ //查找是否存在最小的点
for(j=i+;j<cnt;j++){
if(p[a[j]].y-p[a[i]].y>=ans) break;
ans=min(ans,dis(p[a[i]],p[a[j]]));
}
}
return ans;
} int main(){
int i; while(scanf("%d",&n)!=EOF){
if(!n) break;
for(i=;i<n;i++)
scanf("%lf %lf",&p[i].x,&p[i].y);
sort(p,p+n,cmpx);
printf("%.2lf%\n",find(,n-)/);
}
return ;
}
1010
深搜再加上奇偶剪枝
#include<iostream>
#include<string.h>
using namespace std;
char a[][];
int n,m,t;
int dx[]={,,,-};
int dy[]={,-,,};
int sx,sy,ex,ey;
int f=;
int abs(int x)
{
return x<?-a:x;
}
void dfs(int x,int y,int tt)
{
if(x==ex&&y==ey&&tt==t)
{
f=;
return ;
} int temp=(t-tt)-(abs(x-ex)+abs(y-ey));//在这一点(我能走的步数)减去(这一点我到终点的最小步数)如果不是偶数或者小于零,则不能走到
if(temp<||temp&) return ;
for(int i=;i<;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(a[xx][yy]!='X'&&xx>=&&xx<n&&yy>=&&yy<m)
{
a[xx][yy]='X';
DFS(xx,yy,tt+);
a[xx][yy]='.';
if(flag)return ;
}
}
}
int main()
{
while(cin>>n>>m>>t)
{
if(n==&&m==) break;
int wall=;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
cin>>a[i][j];
if(a[i][j]=='S') sx=i,sy=j;
else if(a[i][j]=='D') ex=i,ey=j;
else if(a[i][j]=='X') wall++;
}
}
if(n*m-wall<=t)
{
cout<<"NO"<endl;
continue;
}
f=;
a[sx][sy]='X';
dfs(sx,sy,);
if(f==) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return ;
}
1011
树形dp
#include<iostream>
#include<string.h>
using namespace std;
int dp[][];
int a[][];
int value[];
int p[];
int v,n,vis[];
int max(int a1,int a2)
{
return a1>a2?a1:a2;
}
int dfs(int now,int pre)//now 是当前节点 pre是上一个节点
{
int tem=(value[now]+)/; //tem是这个节点需要的士兵
for(int k=tem;k<=v;k++)
{
dp[now][k]=p[now]; //dp[now][tem++]=p[now] 意思是不管这个节点派多少大于tem士兵 得到的p都是一样
}
for(int i=;i<=n;i++) //遍历每个节点
{
if(a[now][i]==&&i!=pre) //如果是now连着的下一个地点 并且下一个地点不是自己
{
dfs(i,now); //再次搜索。。。搜到底了时
for(int j=v;j>=tem;j--)//j是排出的士兵数
{
for(int k=;k<=j-tem;k++)//j-tem是
{
dp[now][j]=max(dp[now][j],dp[now][j-k]+dp[i][k]);//k的范围为1-(j-tem),因为你至少要留下tem个士兵来攻打当前节点,i为该节点的子节点
}
}
}
}
return ;
}
int main()
{
while(cin>>n>>v)
{
if(n==-&&v==-) break; for(int i=;i<=n;i++)
cin>>value[i]>>p[i]; memset(a,,sizeof(a)); for(int j=;j<n-;j++)
{
int t1,t2;
cin>>t1>>t2;
a[t1][t2]=;
a[t2][t1]=;
}
if(v==)
{
cout<<""<<endl;
continue;
}
memset(dp,,sizeof(dp));
dfs(,-);
cout<<dp[][v]<<endl;
}
return ;
}
1016
输入n 输出一个素数环,就是相邻数为素数的一个环
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int p[];
int a[],vis[];
int ans[];
int cnt;
int n;
void dfs(int s,int step)
{
if(step==n)
{
if(p[+ans[n-]]==)
{
for(int i=;i<n;i++)
{
if(i==) cout<<ans[i];
else cout<<" "<<ans[i];
}
cout<<endl;
return;
}
else return ;
}
for(int i=;i<=n;i++)
{
if(!vis[i]&&p[i+s]==)
{
vis[i]=;
ans[step]=i;
dfs(i,step+);
vis[i]=;
}
}
}
int main()
{
memset(p,,sizeof(p));
p[]=;
for(int i=;i<=;i++)
{
if(p[i]==)
{
for(int j=i*;j<;j+=i)
p[j]=;
}
}
// for(int i=1;i<=20;i++) cout<<p[i]<<endl;
int ii=;
while(cin>>n){
for(int i=;i<=n;i++) a[i]=i;
printf("Case %d:\n",ii);
ans[]=;
vis[]=;
dfs(,);
ii++;
cout<<endl;
} }
1018
输入一个数,然后输出这个数阶乘有多少位
竟然还有log10(x)....123456=1.23456×10^5 两边同时求对数log10(123456)=5+0.x.....
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n,test,ans=;
double t;
cin>>test;
while(test--)
{
cin>>n;
t=;
for(int i=;i<=n;i++)
{
t+=log10(i*1.0);
}
ans+=(int)t+;
cout<<ans<<endl;
ans=;
}
return ;
}
hdu刷题1的更多相关文章
- 教你用python写:HDU刷题神器
声明:本文以学习为目的,请不要影响他人正常判题 HDU刷题神器,早已被前辈们做出来了,不过没有见过用python写的.大一的时候见识了学长写这个,当时还是一脸懵逼,只知道这玩意儿好屌-.时隔一年,决定 ...
- hdu 刷题记录
1007 最近点对问题,采用分治法策略搞定 #include<iostream> #include<cmath> #include<algorithm> using ...
- hdu刷题2
hdu1021 给n,看费波纳列数能否被3整除 算是找规律吧,以后碰到这种题就打打表找找规律吧 #include <stdio.h> int main(void) { int n; whi ...
- HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页)
前言: 在写这篇文章之前,首先感谢给我思路以及帮助过我的学长们 以下4篇博客都是学长原创,其中有很多有用的,值得学习的东西,希望能够帮到大家! 1.手把手教你用C++ 写ACM自动刷题神器(冲入HDU ...
- 手把手教你用C++ 写ACM自动刷题神器(冲入HDU首页)
转载注明原地址:http://blog.csdn.net/nk_test/article/details/49497017 少年,作为苦练ACM,通宵刷题的你 是不是想着有一天能够荣登各大OJ榜首,俯 ...
- 【刷题】HDU 2222 Keywords Search
Problem Description In the modern time, Search engine came into the life of everybody like Google, B ...
- NOIp2018停课刷题记录
Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...
- LeetCode刷题系列
LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...
- ife任务刷题总结(一)-css reset与清除浮动
本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...
随机推荐
- Ajax,跨域,nrm
一.ajax 原理 和 使用 ajax,即在不重新加载整个网页的情况下,对网页的某部分进行更新. 下面演示ajax 的实现原理 配置: cd ajax 参考:http://www.expressjs. ...
- react使用echarts地图实现中国地图大区展示
日常项目中经常会用到百度地图或者echarts图标展示,今天给大家展示的是如何在react开发项目中使用百度echars的地图展示,把中国地图分为东北大区.华东大区.华南大区.华西大区.华中大区以及华 ...
- react系列(五)在React中使用Redux
上一篇展示了Redux的基本使用,可以看到Redux非常简单易用,不限于React,也可以在Angular.Vue等框架中使用,只要需要Redux的设计思想的地方,就可以使用它. 这篇主要讲解在Rea ...
- ORACLE学习之三
DDL 数据定义语言 CREATE ALTER DROP DML 数据操作语言 INSERT UPDATE DELETE DQL 数据查询语言 SELECT TCL 事务控制语言 COMMIT ROL ...
- js检测是否可以访问公网服务器
wifi认证开发过程所用到的,源码如下: 注:检测AC是否放行成功,是否可以访问公网阿里云服务器 功能调用: checkNet().then(function(res) { if(res) { //连 ...
- java实现验证码功能主要代码
package com.baojuan.servlet; import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;i ...
- Vagrant 总结
引言 本文将讨论Vagrant基础应用,高级应用,基于Vagrant 的虚拟机优化,Vagrant的优势及区别等四部分 参考资料: [阿里云教程中心]Docker学习总结之Docker与Vag ...
- php函数strtotime结合date时间修饰语的使用
下面简单介绍在项目开发中date时间函数和strtotime所遇到的问题,以及解决办法. 原文地址:小时刻个人技术博客 > http://small.aiweimeng.top/index.ph ...
- yii学习笔记(6),数据库操作(增删改)
数据库增删改操作通过活动记录实例来完成 插入记录 /* ----------添加记录---------- */ // 创建活动记录对象 $article = new Article(); $artic ...
- oracle 用户尝试登录失败锁定策略及修改
-- 修改密码的有效期策略, 永不过期SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;Profile altered ...