Codeforces Round #697 (Div. 3)(A->C)
原创
©著作权归作者所有:来自51CTO博客作者wx63316144dde40的原创作品,请联系作者获取转载授权,否则将追究法律责任
A:http://codeforces.com/contest/1475/problem/A
题意:
判断n是否有>1的奇数因子
解析:
不断比2即可。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
const int maxn = 3e5+50;
const int inf=99999999;
typedef long long ll;
int main()
{
int t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
if(n==2)
cout<<"NO"<<endl;
else if(n%2!=0)
cout<<"YES"<<endl;
else
{
int ok = 0;
while(n)
{
ll md=n/2;
if(md%2!=0&&md>1)
{
ok=1;break;
}
n=n/2;
}
if(n==1)
cout<<"NO"<<endl;
else if(ok)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
return 0;
}
//ababab
B:http://codeforces.com/contest/1475/problem/B
题意:
判断一个数是否由若干个2020和2021组成
解析:
若n符合,为:2020x+2021y==n
而2021==2020+1
则:2020g+j==n
这个j一定是<=g的
写麻烦了。。。暴力跑了,但是时间还算过得去
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
const int maxn = 3e5+50;
const int inf=99999999;
typedef long long ll;
int main()
{
int t;
cin>>t;
while(t--)
{
int n ;
cin>>n;
int ok = 0;
for(int i=1;i<=500;i++)
{
if(i*2020<=n)
{
int md=n-i*2020;
if(md<=i)
{
ok=1;break;
}
}
}
if(ok)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
//ababab
C:http://codeforces.com/contest/1475/problem/C
题意:
有a位男士和b位女士参加舞会,有k对关系,表示两个人可以共舞。然后要取出四个人,组成两支舞队,有几种方式
解析:
开俩vector v1[],v2[]
v1[a]=b表示男士a可与b跳舞
v2[b]=a表示女士b可与a跳舞
那么遍历每一对关系,若a与b可跳舞,那么v1[a].size即为与a有关的对数,v2[b].size即为与b有关的对数,v1[a].size+v2[b].size-1即为与a-b对冲突的对数(-1的原因是本身a-b算一对合法)。k-它们即为可选对数。
结尾记得比2
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
#include<map>
using namespace std;
const int maxn = 2e5+50;
const int inf=99999999;
typedef long long ll;
int vv1[maxn],vv2[maxn];
vector<int>v1[maxn];
vector<int>v2[maxn];
int main()
{
int t;
cin>>t;
while(t--)
{
int a,b,k;
cin>>a>>b>>k;
for(int i=1;i<=a;i++) v1[i].clear();
for(int i=1;i<=b;i++) v2[i].clear();
for(int i=1;i<=k;i++)
{
cin>>vv1[i];
}
for(int i=1;i<=k;i++)
{
cin>>vv2[i];
v1[vv1[i]].push_back(vv2[i]);
v2[vv2[i]].push_back((vv1[i]));
}
ll ans = 0 ;
for(int i=1;i<=k;i++)
{
ans+=k-(v1[vv1[i]].size()+v2[vv2[i]].size()-1);
}
cout<<ans/2<<endl;
}
return 0;
}
//ababab