代码版模板~|owO|

来源:互联网 发布:数据库系统的应用 编辑:程序博客网 时间:2024/06/05 23:48
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<memory.h>
#include<cmath>
#include<queue>
#define oo 2147483647
using namespace std;
 
 int v[n];
 bool vis[n];
 int dis[n];
 int num;
 struct my
 {int x,y,l,ne;}e[m];
 queue<int>q;
 void put(int x,int y,int l)
 { 
   num++;
   e[num].x=x;
   e[num].y=y;
   e[num].l=l;
   e[num].ne=v[x];
   v[x]=num;
  }


//C++读入黑科技
inline long long  getint()
{
long long  _x=0;
char _ch;
for(_ch=getchar();_ch>'9'||_ch<'0';_ch=getchar());
for(;_ch<='9'&&_ch>='0';_ch=getchar())
_x=_x*10+_ch-48;
return _x;
}


//最短路 
 //#1~spfa
  void spfa()
  {
memset(vis,false,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
vis[S]=1;
dis[S]=0;
q.push(S);
while(!q.empty())
{
int x=q.front();
vis[x]=0;
q.pop();
for(int i=v[x];i;i=e[i].ne)
{
int y=e[i].y;
if(dis[y]>dis[x]+e[i].l)
{
dis[y]=dis[x]+e[i].l;
   if(!vis[y])
   {
    q.push(y);
    vis[y]=1;
}
}
}
}
     vis[x]=0;
    }
 //#2~dijkstra
  void dijkstra()
  {
  memset(vis,false,sizeof(vis));
  memset(dis,0x3f,sizeof(dis));
  for(int i=1;i<=n;i++)dis[i]=a[S][i];
  vis[S]=true;
  dis[S]=0;
  for(int i=1;i<n;i++)
  {
  int _min=oo,k=0;
  for(int j=1;j<=n;j++)
  if(dis[j]<_min&&!vis[j])
  {
  _min=dis[j];
  k=j;
  }
vis[k]=true;
for(int j=1;j<=n;j++)
if(!vis[j])
dis[j]=min(dis[j],dis[k]+a[k][j]);  
  }
  
}   
 //#2+~dijkstra堆优化
   {
   struct QQ{int x,len;};
   struct cmp
   {
bool operator()(QQ a,QQ b){
return a.len>b.len;
}
   };
  priority_queue<QQ,vector<QQ>,cmp>q;
  void dij(int start)
  { 
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[start]=0;
q.push((QQ){start,0});
int x;
int y;
while(!q.empty())
{
x=q.top().x;
q.pop();
if(vis[x])continue;vis[x]=1;
for(int i=v[x];i;i=e[i].ne)
{
y=e[i].y;
if(dis[y]>dis[x]+e[i].l)
{
dis[y]=dis[x]+e[i].l;
q.push((QQ){y,dis[y]});
}
}
}
      }
    }
 //#3~bellman-ford
  void bellman-ford()
  {
  memset(dis,0x3f,sizeof(dis));
  dis[S]=0;
  for(int i=1;i<n;i++)
  for(int j=1;j<=m;j++)
  dis[e[j].y]=min(dis[e[j].y],dis[e[j].x]+e[j].l);
  }
 //#4~floyd k在最外重循环
 
//最小生成树
 //#1~prim
  void prim()
  {
   memset(vis,false,sizeof(vis));
   memset(dis,0x3f,sizeof(dis));
   for(int i=1;i<=n;i++)dis[i]=a[S][i];
   vis[S]=true;
   dis[S]=0;
   for(int i=1;i<n;i++)
   {
  int _min=oo,k=0;
  for(int j=1;j<=n;j++)
  if(dis[j]<_min&&!vis[j])
  {
  _min=dis[j];
  k=j;
  }
vis[k]=true;
for(int j=1;j<=n;j++)
if(!vis[j])
dis[j]=min(dis[j],a[k][j]);  
   }
}
 //#2~kruscal
  void find(x)
  {
  if(fa[x]==x)return x;
  else return find(fa[x]);
  }
  void kruscal()
  {
  sort(e+1,e+num+1,cmp);
  for(int i=1;i<=n;i++)
  fa[i]=i;
  int tot=0;
  int ans=0;
  for(int i=1;i<=num;i++)
  {
  int x=e[i].x;
  int y=e[i].y;
  int f1=find(x);
  int f2=find(y);
  if(f1!=f2)
  {
  tot++;
  ans+=e[i].l;
  fa[f1]=f2;
  if(tot==n-1)break;
 }
 }
}   


//高精思想(以拓展斐波那契为例) 
 int main()
 {   
    int a[104][104];
int n;
cin>>n;
memset(a,0,sizeof(a));
a[0][0]=0;
a[1][0]=0;
a[2][0]=1;
for(int i=3;i<=n;i++)
{
for(int j=0;j<=100;j++)
a[i][j]=a[i-1][j]+a[i-2][j];
for(int j=0;j<=100;j++)
if(a[i][j]>=10)
{
a[i][j+1]+=a[i][j]/10;
a[i][j]=a[i][j]%10;
}

}
int t=100;
while(a[n][t]==0&&t>0)t--;
for(int i=t;i>=0;i--)
cout<<a[n][i];
return 0;

 }
//归排&逆序对
 void msort(int l,int r)
 {
   if(l==r)return;
  else
 {
     int mid=(l+r)/2;
     int a=l,b=mid+1,c=1;
     msort(l,mid);
     msort(mid+1,r);
     while(a<=mid&&b<=r)
{
       if(arr[a]>arr[b])
        {
         t[c]=arr[b];
         num+=mid-a+1;//求逆序对的核心程序 
         c++;
         b++;
        }
      else{
            t[c]=arr[a];
            c++;
            a++;}


        }
     while(a<=mid)
    {
     t[c]=arr[a];
      a++;
     c++;
    }
      while(b<=r)
    {t[c]=arr[b];
     b++;
     c++;}
    for(int i=1;i<=r-l+1;i++)
    arr[l-1+i]=t[i];
    }   
}
//快速幂
 void pow_mod(int a,int n,int q)//q为mod值 
 { 
  int ans=1;
  for(;n;n>>=1,a=a*a%q)
  if(n&1)
  ans=ans*a%q;
  }
//RMQ
 void init_rmq(int n)
 {
  for(int i=1;i<=n;i++)
  f[i][0]=a[i];
 
  for(int j=1;j<=20;j++)
  for(int i=1;i<=n;i++)
   if(i+(1<<j)-1<=n)
   f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
 void query_rmq(int i,int j)
 {
  int k=log(j-i+1)/log(2);
  return max(f[i][k],f[j-(1<<k)+1][k]);
 
}
//LCA-tarjan


//sort的应用;
 //1、可以传入两个参数;
  sort(a,a+N) //其中a是数组,a+N表示对a[0]至a[N-1]的N个数进行排序(默认从小到大排序);


 //2、传入三个参数;
  sort(a,a+N,cmp)//第三个参数是一个函数;
  //如果让函数从大到小排序,可以用如下算法实现;
  bool cmp(int a,int b){return a>b};
  sort(A,A+N,cmp);
  //stable_sort与sort实现方法相同
   
//分配动态数组 
  int* mark_=new int[n+1];
  
//定义输出场宽、精确位数
  #include<iomanip>
  cout<<setw(m)<<fixed<<setprecision(n)<<x<<endl; 
  //m为场宽,n为保留位数   
 
0 0
原创粉丝点击