2017年8月12日(模拟四(smoj2193,2194,2195)强连通分量、勾股定理探索、动态规划+容斥原理)

#include <stdio.h>
#include <stack>
#include <cstring>
#include <stdlib.h>
#define maxN 100010
using namespace std;

stack <int> sta;
struct Tnode{
int nxt,v;
}edge[maxN];

int first[maxN];
int dfn[maxN],low[maxN],vis[maxN],instack[maxN],f[maxN],chu[maxN],ru[maxN];
int tot,k,cnt;
int n,m;
int ans;

void init()
{
memset(first,-1,sizeof first);
memset(dfn,-1,sizeof dfn);
memset(f,0,sizeof f);
ans=tot=k=cnt=0;
} 
void add(int u,int v)
{
edge[++tot].v=v,edge[tot].nxt=first[u];
first[u]=tot;
}
void tarjan(int v)
{
dfn[v]=low[v]=++k;
instack[v]=1;
sta.push(v);
for (int i=first[v]; i!=-1; i=edge[i].nxt)
{
//printf("i:%d\n",i);
int u=edge[i].v;
if (!instack[u])
{
tarjan(u);
low[v]=min(low[v],low[u]);
}else
low[v]=min(low[v],dfn[u]);
}
if (dfn[v]==low[v])
{
cnt++;
while (!sta.empty())
{
int u=sta.top();
sta.pop(); 
vis[u]=cnt;
instack[u]=0;
if (u==v) break;
} 
}
}
int main()
{
freopen("2193.in","r",stdin);
freopen("2193.out","w",stdout);
scanf("%d%d",&n,&m);
init();
for (int i=1; i<=m; i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
chu[x]++; ru[y]++;
}
for (int i=1; i<=n; i++) if (dfn[i]==-1) tarjan(i);
for (int u=1; u<=n; u++)
{
bool flag=0;
if (chu[u]==0 && ru[u]==0) ans=-1;
for (int i=first[u]; i!=-1; i=edge[i].nxt)
{
int v=edge[i].v;
if (ru[v]<=1) flag=1;
if (vis[u]!=vis[v]) f[vis[v]]=1;
}
if (ru[u]==0 && !flag) ans=-1;
}
for (int i=1; i<=cnt; i++) if (!f[i]) ans++;
printf("%0.6lf",(double)(n-ans)/(double)n);
return 0;
}

#include <stdio.h>
#include <cmath>
using namespace std;
#define ll long long
ll ans=0,r;
long long gcd(ll a,ll b){ return a%b==0?b:gcd(b,a%b);}
bool check(ll a,double b)
{
if (floor(b)==b)
{
ll x=(long long)floor(b);
if (gcd(a*a,x*x)==1 && a*a!=x*x) return true;
}
return false;
}
int main()
{
freopen("2194.in","r",stdin);
freopen("2194.out","w",stdout);
scanf("%lld",&r);
for (ll i=1; i<=(ll)sqrt(2*r); i++)
if ((2*r)%i==0)
{
for (ll j=1; j<=(ll)sqrt(2*r/(i*2)); j++)
{
double k=sqrt(((2*r)/i)-(j*j));
if (check(j,k)) ans++;
}
if (i!=(2*r)/i)
for (ll j=1; j<=(ll)sqrt(i/2); j++)
{
double k=sqrt(i-j*j);
if (check(j,k)) ans++;
} 
}
printf("%lld\n",ans*4+4);
return 0;
}

#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
#define maxN 2200
#define MOD 1000000009
#define F(i,j,n) for (int i=j; i<=n; i++)
#define D(i,j,n) for (int i=j; i>=n; i--)
#define ll long long
int a[maxN],b[maxN],nxt[maxN];
ll f[maxN][maxN],d[maxN];
ll c[maxN][maxN],Jc[maxN];
int n,k;
void init(int n)
{
Jc[0]=1;
F(i,1,n) Jc[i]=Jc[i-1]*i%MOD;
memset(c,0,sizeof c);
F(i,0,n) c[i][0]=1;
F(i,1,n) 
F(j,1,i) 
c[i][j]=(c[i-1][j]+c[i-1][j-1])%MOD;
}
int main()
{
freopen("2195.in","r",stdin);
freopen("2195.out","w",stdout);
scanf("%d%d",&n,&k);
F(i,1,n) scanf("%d",&a[i]);
F(i,1,n) scanf("%d",&b[i]);
sort(a+1,a+n+1);
sort(b+1,b+n+1);
int j=1; 
F(i,1,n) 
{
for (; a[i]>b[j] && j<=n; j++);
nxt[i]=j-1;
}
memset(f,0,sizeof f);
F(i,0,n) f[i][0]=1;
F(i,1,n) 
F(j,1,i) 
f[i][j]=(f[i-1][j]+(f[i-1][j-1]*max(nxt[i]-j+1,0))%MOD)%MOD;
init(n);
D(i,n,(n+k)/2)
{
d[i]=(f[n][i]*Jc[n-i])%MOD;
F(j,i+1,n) d[i]=(d[i]-(d[j]*c[j][i])%MOD+MOD)%MOD;
}
printf("%lld\n",d[(n+k)/2]);
return 0;
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值