给你五个数,(原本是序列),但其中有一个变成了0,问是哪一个变成了0.
输入时,记录一下即可。
#include
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int ans=0,x;
For(i,1,5)
{
cin>>x;
if(x==0)ans=i;
}
cout<<ans<<endl;
return 0;
}
鸡兔同笼问题,题目给你 总数 和 腿数。
要你找是否存在一组解法。
暴力解方程。
注意一下特判,qwq
#include
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int a,b;
cin>>a>>b;
if(b&1)cout<<"No"<<endl;
else
{
b/=2;
if(b-a<=a&&b-a>=0)cout<<"Yes"<<endl;//b-a>=0 spj
else cout<<"No"<<endl;
}
return 0;
}
枚举可能的解。
#include
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int x,y;
cin>>x>>y;
For(i,0,x)
{
if(i*2+(x-i)*4==y)//a=i;b=x-i;
{
cout<<"Yes"<<endl;
return 0;
}
}
cout<<"No"<<endl;
return 0;
}
给你一个序列,问不在其中与给定x距离最小的元素。
从x,左右两边开始枚举。
#include
#include
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
map<int,int>vis;
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,x,temp;
cin>>x>>n;
For(i,1,n)cin>>temp,vis[temp]=1;
int ans=0,i=x,j=x;
while(1)
{
if(vis[i])i--;
else
{
ans=i;
break;
}
if(vis[j])j++;
else
{
ans=j;
break;
}
}
cout<<ans<<endl;
return 0;
}
给你一个序列,问其中有多少个元素不能被其他元素整除。
size
,valaue
)(一种vector的定义)#include
#include
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
typedef long long ll;
const int maxx=1e6+10;
ll a[maxx];
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,x;
cin>>n;
For(i,1,n)cin>>x,a[x]++;
vector<bool>dv(maxx,true);
int ans=0;
For(i,1,maxx)
{
if(!a[i])continue;
if(a[i]==1&&dv[i])ans++;
for(int j=2; j*i<maxx; j++)dv[i*j]=false;
}
cout<<ans<<endl;
return 0;
}
给你一群小孩,每个小孩有rating,每个小孩在一个幼稚园。去除每个幼稚园里最大的rating。在这些ratings中最小的就是答案。
对于取一个幼稚园中最大,和取幼稚园中最大的最小。可以用multiset
去维护,(元素可能相同)
放指针
。(可以s.erase(s.find()))rbegin()
#include
#include
#include
#include
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
struct point
{
int num;
int score;
}p[maxn];
multiset<int>s;
multiset<int>ms[maxn];
ll vis[maxn];
ll use[maxn];
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,q,cur,a;
cin>>n>>q;
multiset<int>::iterator it;
For(i,1,n)
{
cin>>a>>cur;
vis[i]=cur;
p[i].num=cur;p[i].score=a;
use[cur]=1;ms[cur].insert(a);
}
For(i,1,maxn-1)if(use[i])s.insert(*ms[i].rbegin());
// for(it=s.begin();it!=s.end();it++)cout<<(*it).num<<' '<<(*it).score<
//cout<
For(i,1,q)
{
int c,d;
cin>>c>>d;
int pre=vis[c];vis[c]=d;
// cout<<(*it).num<<' '<<(*it).score<
if(!s.empty())s.erase(s.find(*ms[pre].rbegin() ));
ms[pre].erase(ms[pre].find(p[c].score));
///
// for(it=s.begin();it!=s.end();it++)cout<<(*it)<
//cout<<"ok"<
if(!ms[pre].empty())
{
s.insert(*ms[pre].rbegin() );
}
if(!ms[d].empty())
{
int temp=*ms[d].rbegin();
s.erase(s.find(temp));
}
ms[d].insert(p[c].score);
s.insert(*ms[d].rbegin());
// cout<<"ok"<
cout<<*s.begin()<<endl;
}
return 0;
}
#include
#include
#include
#include
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
struct point
{
int num;
int score;
bool operator< (const point &a)const{
if(score!=a.score)return score<a.score;
else return num<a.score;
}
}p[maxn];
multiset<int>s;
multiset<int>ms[maxn];
int ans[maxn];
ll vis[maxn];
ll use[maxn];
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,q,cur,a;
cin>>n>>q;
multiset<int>::iterator it;
For(i,1,n)
{
cin>>a>>cur;
vis[i]=cur;
p[i].num=cur;p[i].score=a;//it=s.find({cur,ans[cur]});
// ans[cur]+=a;
ans[cur]=max(ans[cur],a);use[cur]=1;ms[cur].insert(a);
}
For(i,1,maxn-1)if(use[i])s.insert(ans[i]);
//cout<
// for(it=s.begin();it!=s.end();it++)cout<<(*it).num<<' '<<(*it).score<
//cout<
For(i,1,q)
{
int c,d;
cin>>c>>d;
int pre=vis[c];vis[c]=d;
//cout<
//it=;it--;
// cout<<(*it).num<<' '<<(*it).score<
if(!s.empty())s.erase(s.find(ans[pre]));
ms[pre].erase(ms[pre].find(p[c].score));
///
// for(it=s.begin();it!=s.end();it++)cout<<(*it)<
// cout<
/// ans[pre]=p[c].score;
//cout<<"ok"<
// cout<
if(!ms[pre].empty())
{
s.insert(*ms[pre].rbegin() );
ans[pre]=*ms[pre].rbegin();
}
else ans[pre]=0;
// cout<
if(!ms[d].empty())
{ //it=s.find(ans[d]);it--;
s.erase(s.find(ans[d]));
}
// cout<<"OK"<
ms[d].insert(p[c].score);ans[d]=*ms[d].rbegin();
s.insert(ans[d]);
// cout<<"ok"<
cout<<*s.begin()<<endl;
}
return 0;
}