平方数 (简单)(数学)
平方数 (nowcoder.com)
#include <iostream>
#include<math.h>
using namespace std;
long long left_;
long long right_;
bool check(long long num)
{
long long t=sqrt(num);
return t*t==num;
}
int main() {
long long x;
cin>>x;
left_=right_=x;
while(!check(left_)&&!check(right_))
{
left_--;
right_++;
}
if(check(left_))
{
cout<<left_;
}
else cout<<right_;
}
// 64 位输出请用 printf("%lld")
分组 (中等)(二分答案)
E-分组_牛客小白月赛40 (nowcoder.com)
#include<iostream>
#include<unordered_map>
using namespace std;
unordered_map<int,int> team;
int n,m;
bool check(int mid)
{
int sum=0;
for(auto e :team)
{
sum+=e.second/mid+(e.second%mid==0?0:1);
}
if(sum>m) return false;
return true;
}
int main()
{
cin>>n>>m;
int left=1,right=100000;
for(int i=0;i<n;i++)
{
int t;
cin>>t;
team[t]++;
}
if(team.size()>m)
{
cout<<-1;
return 0;
}
while(right>left)
{
int mid=left+(right-left)/2;
if(check(mid)) right=mid;
else left=mid+1;
}
cout<<left;
return 0;
}
【模板】拓扑排序(简单)
【模板】拓扑排序__牛客网 (nowcoder.com)
#include <iostream>
#include<vector>
#include<queue>
using namespace std;
struct edge{
int v;
};
vector<edge> e[200010];
int in[200010];
int main() {
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++)
{
int a,b;
cin>>a>>b;
e[a].push_back({b});
in[b]++;
}
queue<int> q;
for(int i=1;i<=n;i++)
{
if(in[i]==0)
{
q.push(i);
}
}
vector<int> ret;
while(q.size())
{
int t=q.front();
q.pop();
ret.push_back(t);
for(auto it:e[t])
{
in[it.v]--;
if(in[it.v]==0)
{
q.push(it.v);
}
}
}
bool flag=false;
for(int i=1;i<=n;i++)
{
if(in[i]!=0)
{
flag=true;
break;
}
}
if(flag) cout<<-1;
else
{
int i=0;
for(;i<ret.size()-1;i++)
{
cout<<ret[i]<<' ';
}
cout<<ret[i];
}
return 0;
}
// 64 位输出请用 printf("%lld")