1.这道求n的阶乘后位0的个数,数据大,所以找规律。
本质还是找有因子2和5的,但是5的数量少一些,所以就找有几个5好了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF = 1000000000;
const long long int maxn = 100000000 + 5;
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <map>
using namespace std;
int main()
{
int n;
int T;
scanf("%d", &T);
while( T-- )
{
int sum = 0;
scanf("%d", &n);
while( n>=5 )
{
sum = sum + n/5;
n = n/5;
}
printf("%d\n", sum);
}
}
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF = 1000000000;
const long long int maxn = 100000000 + 5;
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <map>
using namespace std;
int main()
{
int n;
int T;
scanf("%d", &T);
while( T-- )
{
int sum = 0;
scanf("%d", &n);
while( n>=5 )
{
sum = sum + n/5;
n = n/5;
}
printf("%d\n", sum);
}
}
2
直接套了个比较快的模板,筛法真不知道怎么修改才好。
bool isprime(int num)
{
if(num == 3||num == 2)
return true;
if(num%6!=1&&num%6!=5)
return false;
for(int i = 5; i*i <= num; i += 6)
{
if(num % i == 0||num % (i+2) == 0)
return false;
}
return true;
{
if(num == 3||num == 2)
return true;
if(num%6!=1&&num%6!=5)
return false;
for(int i = 5; i*i <= num; i += 6)
{
if(num % i == 0||num % (i+2) == 0)
return false;
}
return true;
}
3.二分图的板子。
关于二分图,最大匹配,匈牙利算法。
讲解,这个博客就很好。
https://blog.youkuaiyun.com/thundermrbird/article/details/52231639#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
const int N=105;
int line[N][N];
int com[N];
int used[N];
int n;
struct pp
{
int blood;
int attack;
} a[N],b[N];
bool found(int x)
{
for(int i=0; i<n; i++)
{
if(line[x][i]&&!used[i])
{
used[i]=1;
if(com[i]==0||found(com[i]))
{
com[i]=x;
return 1;
}
}
}
return 0;
}
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
const int N=105;
int line[N][N];
int com[N];
int used[N];
int n;
struct pp
{
int blood;
int attack;
} a[N],b[N];
bool found(int x)
{
for(int i=0; i<n; i++)
{
if(line[x][i]&&!used[i])
{
used[i]=1;
if(com[i]==0||found(com[i]))
{
com[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(line,0,sizeof(line));
memset(com,0,sizeof(com));
for(int i = 0; i < n; i++)
{
scanf("%d%d",&a[i].blood,&a[i].attack);
memset(line,0,sizeof(line));
memset(com,0,sizeof(com));
for(int i = 0; i < n; i++)
{
scanf("%d%d",&a[i].blood,&a[i].attack);
}
for(int i = 0; i < n; i++)
{
scanf("%d%d",&b[i].blood,&b[i].attack);
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if(a[i].attack >= b[j].blood&&a[i].blood>=b[j].attack)
line[i][j] = 1;
}
}
int sum = 0;
for(int i = 0; i < n; i++)
{
memset(used,0,sizeof(used));
if(found(i))
sum++;
}
if(sum==n)
{
printf("Sorry about that!\n");
}
else
for(int i = 0; i < n; i++)
{
scanf("%d%d",&b[i].blood,&b[i].attack);
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if(a[i].attack >= b[j].blood&&a[i].blood>=b[j].attack)
line[i][j] = 1;
}
}
int sum = 0;
for(int i = 0; i < n; i++)
{
memset(used,0,sizeof(used));
if(found(i))
sum++;
}
if(sum==n)
{
printf("Sorry about that!\n");
}
else
printf("Tell you a joke~\n");
}
return 0;
}
}
return 0;
}