西科大 算法分析1 完整代码.docx

上传人:b****7 文档编号:10620819 上传时间:2023-02-21 格式:DOCX 页数:23 大小:17.68KB
下载 相关 举报
西科大 算法分析1 完整代码.docx_第1页
第1页 / 共23页
西科大 算法分析1 完整代码.docx_第2页
第2页 / 共23页
西科大 算法分析1 完整代码.docx_第3页
第3页 / 共23页
西科大 算法分析1 完整代码.docx_第4页
第4页 / 共23页
西科大 算法分析1 完整代码.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

西科大 算法分析1 完整代码.docx

《西科大 算法分析1 完整代码.docx》由会员分享,可在线阅读,更多相关《西科大 算法分析1 完整代码.docx(23页珍藏版)》请在冰豆网上搜索。

西科大 算法分析1 完整代码.docx

西科大算法分析1完整代码

数字模式的识别

#include

#include

intb[4000001];

intmain(){

intmax,max_i;

intn,t,i;

while(scanf("%d",&n)==1){

memset(b,0,4000001);

while(n--!

=0){

scanf("%d",&t);

++b[t+2000000];

}

max=b[0];max_i=0;

for(i=1;i<=4000000;++i){

if(b[i]>max){

max=b[i];max_i=i;

}

}

printf("%d\n",max_i-2000000);

}

return0;

}

凸包面积

 

#include

#include

#include

#include

#definemax106

usingnamespacestd;

structpoint

{

intx,y;

};

pointspot[max],p0;

//p1p2距离

intdis(constpoint&p1,constpoint&p2)

{

return(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);

}

//p1在p1p2左侧

boolcompares(constpoint&p1,constpoint&p2)

{

intt;

t=(p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);

if(t>0||(t==0&&dis(p1,p0)

returntrue;

else

returnfalse;

}

doublearea(pointp1,pointp2,pointp3)//计算三角形面积;

{

doubles;

s=(p1.x*(p2.y-p3.y)+p2.x*(p3.y-p1.y)+p3.x*(p1.y-p2.y))/2.0;

returns;

}

intmain()

{

intn,i,x,y,p,m;

stacks;

cin>>m;

while(m--)

{

cin>>n;

for(i=0;i

cin>>spot[i].x>>spot[i].y;

x=spot[0].x;

y=spot[0].y;

p=0;

for(i=1;i

{

if((spot[i].y==y&&spot[i].x

{

x=spot[i].x;

y=spot[i].y;

p=i;

}

}

//x,y为最做点,即p0确定

p0.x=x;

p0.y=y;

swap(spot[0],spot[p]);

sort(spot+1,spot+n,compares);

//将0、1、2三个点压入堆栈S

s.push(p0);

s.push(spot[1]);

s.push(spot[2]);

pointtemp;

for(i=3;i

{

while(!

s.empty())

{

temp=s.top();

s.pop();

p=(s.top().x)*temp.y+spot[i].x*(s.top().y)+temp.x*(spot[i].y)-spot[i].x*(temp.y)-temp.x*(s.top().y)-s.top().x*(spot[i].y);

if(p>0)//i位于spot[t-1]spot[t]左侧

{

s.push(temp);//将temp重新压入栈中

break;

}

}

s.push(spot[i]);//将i压入栈中

}

doublearea=0;

temp=s.top();

s.pop();

area+=(p0.x*temp.y-p0.y*temp.x)/2.0;

while(!

s.empty())

{

area+=(temp.x*s.top().y-temp.y*s.top().x)/2.0;

temp=s.top();

s.pop();

}

if(n<=2)

{

area=0;

}

if(area<0)

{

area=-area;

}

cout<

:

fixed)<

(1)<

}

return0;

}

翻煎饼

#include

usingnamespacestd;

ints[1000];

intmain()

{

inti,n,k=0;

cin>>n;

for(i=0l;i

cin>>s[i];

for(;n>1;n--)

{

intmax=0,l=0;

for(i=0;i

{if(s[i]>max)

{

max=s[i];

l=i;

}

}

if(l==0)

{

k+=1;

for(i=0;i

{

intt=s[i];

s[i]=s[n-1-i];

s[n-1-i]=t;

}

}

elseif(l

{

k+=2;

for(i=0;i<(l+1)/2;i++)

{

intt=s[i];

s[i]=s[l-i];

s[l-i]=t;

}

for(i=0;i

{

intt=s[i];

s[i]=s[n-1-i];

s[n-1-i]=t;

}

}

}

cout<

}

变位词

#include

#include

#include

usingnamespacestd;

intmain()

{

chars1[1000],s2[1000];

intn,len1,len2;

cin>>n;

while(n--)

{

cin>>s1>>s2;

len1=strlen(s1);

len2=strlen(s2);

sort(s1,s1+len1);

sort(s2,s2+len2);

if(strcmp(s1,s2)==0)

cout<<"Yes"<

else

cout<<"No"<

}

}

Polynomialcalculate

#include

intmain()

{

inti,n,x,sum,num[22];

scanf("%d%d",&n,&x);

for(i=0;i

{

scanf("%d",&num[i]);

}

if(0==n)

{

sum=0;

}

else

{

sum=num[n];

}

for(i=n-1;i>=0;i--)

{

sum=sum*x+num[i];

}

printf("%d\n",sum);

}

大整数乘法

#include

#include

voidmain()

{

inti,j,k,i1,m,i2,n,a[205]={0};

longb,c,d;

chars1[100],s2[100];

scanf("%d",&m);

scanf("%s",s1);

scanf("%s",s2);

d=0;

for(i1=0,k=m-1;i1

{

for(i2=0,j=m-1;i2

{

i=i1+i2;

b=a[i]+(s1[k]-48)*(s2[j]-48)+d;

a[i]=b%10;

d=b/10;

}

while(d>0)

{

i++;

a[i]=a[i]+d%10;

d=d/10;

}

n=i;

}

for(i=n;i>=0;i--)

printf("%d",a[i]);

printf("\n");

return0;

}

 

GoldNuggetsDistribution

 

#include

#include

#defineMAX50000000

#defineMIN-50000000

intmain()

{

inti;

intn;

intweight;

intmin=MAX;

intmax=MIN;

scanf("%d",&n);

for(i=0;i

{

scanf("%d",&weight);

if(weight>max)

{

max=weight;

}

if(weight

{

min=weight;

}

}

printf("%d%d\n",max,min);

return0;

}

 

TheDutchFlagProblem

#include

usingnamespacestd;

intmain()

{intn,coutr=0,coutb=0,coutw=0,i;

chara[500005];

cin>>n;

for(i=0;i

cin>>a[i];

for(i=0;i

{

if(a[i]=='W')

coutw++;

elseif(a[i]=='R')

coutr++;

elseif(a[i]=='B')

coutb++;

}

for(i=0;i

cout<<"R";

for(i=0;i

cout<<"W";

for(i=0;i

cout<<"B";

cout<

return0;

}

PostOffice

 

#include

#include

usingnamespacestd;

intf(inta)

{

returna<0?

-a:

a;

}

intmain()

{

inti,j,k,n;

cin>>n;

int*a=newint[n];

int*b=newint[n];

for(i=0;i

cin>>a[i]>>b[i];

sort(a,a+n);

sort(b,b+n);

j=a[n/2];

k=b[n/2];

intl=0;

for(i=0;i

l+=f(a[i]-j)+f(b[i]-k);

cout<

}

TheJosephusProblem

 

#include

typedefunsignedintuint;

intmain()

{

uintn;

uintsum=1;

scanf("%d",&n);

while(sum<=n)

{

sum=sum*2;

}

n=n<<1;

sum=n∑

n=n&(~sum);

n=n|0x0001;

printf("%d\n",n);

return0;

}

 

Hornerscheme

 

#include

intmain()

{

inti,n,x,sum,num[22];

scanf("%d%d",&n,&x);

for(i=0;i

{

scanf("%d",&num[i]);

}

if(0==n)

{

sum=0;

}

else

{

sum=num[n];

}

for(i=n-1;i>=0;i--)

{

sum=sum*x+num[i];

}

printf("%d\n",sum);

}

 

排列的字典序问题

#include

intmain()

{

inti,j,n,k,tmp,lens,labelNum=15,label,iCount2,sum=0,iCount=0,num[14];

scanf("%d",&n);

for(i=0;i

{

scanf("%d",&num[i]);

}

for(i=0;i

{

iCount=0;

for(j=i+1;j

{

if(num[i]>num[j])

{

iCount++;

}

}

if(iCount!

=0)

{

k=n-i-1;

iCount2=1;

while(k>0)

{

iCount2*=k;

k--;

}

}

sum+=iCount*iCount2;

}

printf("%d\n",sum);

for(i=n-2;i>=0;i--)

{

if(num[i]

{

break;

}

}

if(-1!

=i)//如果全是降序可能越界,即i=-1

{

for(k=i+1;k

{

if(num[k]

{

continue;

}

if(num[k]

{

labelNum=num[k];

label=k;

}

}

tmp=num[i];

num[i]=num[label];

num[label]=tmp;

}

lens=n-1-i;

for(k=1;k<=lens/2;k++)

{

tmp=num[i+k];

num[i+k]=num[n-k];

num[n-k]=tmp;

}

for(i=0;i

{

if(i!

=n-1)

{

printf("%d",num[i]);

}

else

{

printf("%d\n",num[i]);//最后输出也有空格

}

}

}

Binarysearch

 

#include

intbinSearch(intnum[],intn,intkey)

{

intlow=0,high=n-1,mid;

while(high>=low)

{

mid=(high+low)/2;

if(num[mid]==key)

{

returnmid;

}

elseif(num[mid]>key)

{

high=mid-1;

}

else

{

low=mid+1;

}

}

return-1;

}

intmain()

{

inti,n,key,iCount,num[5000001];

scanf("%d%d",&n,&key);

for(i=0;i

{

scanf("%d",&num[i]);

}

iCount=binSearch(num,n,key);

if(-1==iCount)

{

printf("-1\n");

}

else

{

printf("%d\n",iCount+1);

}

return0;

}

 

俄式乘法

 

#include

#include

intmain()

{

inta[100];

intn,m,i,sum=0,iCount=0;

scanf("%d%d",&n,&m);

while(1!

=n)

{

if(0==n%2)

{

n/=2;

}

else

{

n=(n-1)/2;

a[iCount++]=m;

sum+=a[iCount-1];

}

m*=2;

}

a[iCount++]=m;

sum+=m;

for(i=0;i

{

if(i!

=iCount-1)

{

printf("%d+",a[i]);

}

else

{

printf("%d=%d\n",a[i],sum);

}

}

return0;

}

 

Pipeline

#include

#include

#include

usingnamespacestd;

intmain()

{

intsumDistance=0,oilMount,oilCount,oil[10001],i,j;

cin>>oilMount;

for(i=0;i

{

cin>>j>>oil[i];

}

sort(oil,oil+oilMount);

oilCount=oilMount/2;

for(i=0;i

{

sumDistance+=abs(oil[oilCount]-oil[i]);

}

cout<

return0;

}

 

最近对问题

 

#include

#include

#defineINF10000000001

intmain()

{

intn,i,m,k,j,posX[1001],posY[1001];

doublemin=INF;

scanf("%d",&n);

for(i=0;i

{

min=INF;

scanf("%d",&m);

for(k=0;k

{

scanf("%d%d",&posX[k],&posY[k]);

}

for(k=0;k

{

for(j=k+1;j

{

if(min>(posX[j]-posX[k])

*(posX[j]-posX[k])

+(posY[j]-posY[k])

*(posY[j]-posY[k])

{

min=(posX[j]-posX[k])

*(posX[j]-posX[k])

+(posY[j]-posY[k])

*(posY[j]-posY[k])

;

}

}

}

printf("%.4f\n",sqrt(min));

}

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1