Codeforces Round #698 (Div. 2)
Codeforces Round #698 (Div. 2)
https://codeforces.com/contest/1478
A. Nezzar and Colorful Balls
思路
水题,直接求出每个数字的最大次数即可。
Code
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int inf=0x3f3f3f3f;
typedef long long ll;
const int N=2e5+7;
const ll mod=998244353;
int main(){
IO;
int t=1;
cin>>t;
while(t--){
int n;
cin>>n;
map<int,int>mp;
for (int i = 0; i < n; ++i)
{
int x;
cin>>x;
mp[x]++;
}int maxn=0;
for (int i = 1; i <= n; ++i)
{
maxn=max(maxn,mp[i]);
}cout<<maxn<<endl;
}
return 0;
}
B. Nezzar and Lucky Number
思路
x是否为包含d的数之和。
首先考虑x很大的情况,当x大于等于d×10的时候,x=d×10显然成立,当x大于d×10时,必然存在两个位数中包含d的数之和为x,其中一个十位为d,另一个个位为d则必然存在满足条件的解;
当x小于d×10时,d只能出现在个位,将10×d以内的d的所有倍数的个位存下来,
- 与x判断如果x的个位没有出现过则无法得到;
- 如果x的个位出现过但是x小于d的倍数中最小的与x个位相同的数则同样无法得到;
- 只有x大于等于它时,可以通过改变十位的值相加得到x。
Code
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int inf=0x3f3f3f3f;
typedef long long ll;
const int N=2e5+7;
const ll mod=998244353;
int main(){
IO;
int t=1;
cin>>t;
while(t--){
ll q,d;
cin>>q>>d;
vector<ll>v;
map<int,int>mp;
for (int i = 1; i <= 10; ++i)
{
int k=i*d;
if(!mp[k%10]){
v.push_back(k);
mp[k%10]=int(v.size());
}
}
for (int i = 0; i < q; ++i)
{
ll x;
cin>>x;
if(x>=d*10){
cout<<"YES"<<endl;
continue;
}
if(!mp[x%10]){
cout<<"NO"<<endl;
continue;
}
if(x<v[mp[x%10]-1]){
cout<<"NO"<<endl;
continue;
}cout<<"YES"<<endl;
}
}
return 0;
}
C. Nezzar and Symmetric Array
思路
由题意可以知道d数组一定由n对相同的数组成。
假设原来数组中的正数由a1、a2、a3、a4组成(且a1<a2<a3<a4),则这几个数的di为:
- d1=a2-a1+a3-a1+a4-a1+a1+a1+a1+a2+a1+a3+a1+a4=2×a1+2×a2+2×a3+2×a4
- d2=a2-a1+a3-a2+a4-a2+a1+a2+a2+a2+a2+a3+a2+a4=4×a2+2×a3+2×a4
- d3=a3-a1+a3-a2+a4-a3+a1+a3+a2+a3+a3+a3+a3+a4=6×a3+2×a4
- d4=a4-a1+a4-a2+a4-a3+a1+a4+a2+a4+a3+a4+a4+a4=8×a4
由此可推得: di=2×i×a[i]+2×\(\sum_j^n\)ai。 (j=i+1)
(最后注意特判一下是否存在ai为0的情况,此类不满足要求)
Code
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int inf=0x3f3f3f3f;
typedef long long ll;
const int N=1e5+7;
const ll mod=1e9+7;
ll a[N];
int main(){
IO;
int t=1;
cin>>t;
while(t--){
ll n;
cin>>n;
vector<ll>b,v,u;
map<ll,int>mp;
for (int i = 0; i < 2*n; ++i)
{
ll x;
cin>>x;
if(!mp[x]){
b.push_back(x);
}mp[x]=1;
}
if(int(b.size())!=n){
cout<<"NO"<<endl;
continue;
}
if(n==1){
if(b[0]%2)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
continue;
}
sort(b.begin(),b.end());
ll sum=0;
int flag=1;
for (ll i = n-1ll; i >= 0; --i)
{
if((b[i]-sum)%(2ll*(i+1ll))){
flag=0;break;
}
a[i]=(b[i]-sum)/(2ll*(i+1ll));
sum+=2ll*a[i];
}mp.clear();
for (int i = 0; i < n; ++i)
{
if(mp[a[i]]||a[i]<1){
flag=0;
break;
}mp[a[i]]=1;
}
if(!flag)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return 0;
}
继续加油!!!
Code will change the world !

浙公网安备 33010602011771号