A.Divisibility Problem
题意:
题解:
AC代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=2e5+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int t;
cin>>t;
while(t--){
int a,b;
cin>>a>>b;
if(a%b){
cout<<b-(a%b)<<endl;
}
else cout<<0<<endl;
}
return 0;
}
B. K-th Beautiful String
题意:
题解:
AC代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=2e5+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int t;
cin>>t;
while(t--){
ll n,k;
cin>>n>>k;
ll i;
for(i=1;i<=n;i++)
if(i*(i+1)/2>=k)break;
i--;
ll t=i*(i+1)/2;
ll x=k-t-1;
i++;
for(int j=1;j<=n;j++){
if(j==n-i||j==n-x)cout<<'b';
else cout<<'a';
}
cout<<endl;
}
return 0;
}
C. Ternary XOR
题意:
题解:
AC代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=2e5+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int t;
cin>>t;
while(t--){
int n;string s;
cin>>n>>s;
string a,b;
int i;
for(i=0;i<n;i++){
if(s[i]=='2'){
a+='1';
b+='1';
}
else if(s[i]=='0'){
a+='0';
b+='0';
}
else break;
}
if(i<n){
a+=s[i];
b+='0';
}
for(i++;i<n;i++){
a+='0';
b+=s[i];
}
cout<<a<<endl<<b<<endl;
}
return 0;
}
D. Carousel
题意:
题解:
AC代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=2e5+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int a[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
set<int> s;
for(int i=1;i<=n;i++){cin>>a[i];s.insert(a[i]);}
if(s.size()==1){
cout<<1<<endl;
for(int i=1;i<=n;i++)
cout<<1<<' ';
cout<<endl;
continue;
}
if(s.size()==2){
vector<int> v;
cout<<2<<endl;
for(auto i:s)v.pb(i);
for(int i=1;i<=n;i++)
if(a[i]==v[0])cout<<1<<' ';
else cout<<2<<' ';
cout<<endl;
continue;
}
if(n%2==0||a[n]==a[1]){
cout<<2<<endl;
for(int i=1;i<=n;i++)
if(i&1)cout<<1<<' ';
else cout<<2<<' ';
cout<<endl;
}
else{
int i;
for(i=2;i<=n;i++)
if(a[i]==a[i-1])break;
if(i>n){
cout<<3<<endl;
for(int i=1;i<n;i++)
if(i&1)cout<<1<<' ';
else cout<<2<<' ';
cout<<3<<endl;
}
else{
cout<<2<<endl;
int cnt=1;
for(int j=1;j<=n;j++){
if(j==i)cnt^=1;
if(cnt)cout<<1<<' ';
else cout<<2<<' ';
cnt^=1;
}
cout<<endl;
}
}
}
return 0;
}
E. Tree Queries
题意:
题解:
AC代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=2e5+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int a[maxn];
int n,depth[maxn], f[maxn][50];
int from[maxn], to[maxn << 1], nxt[maxn << 1], cnt,Log[maxn];
//链式前向星加边
void addEdge (int u, int v) {
to[++cnt] = v, nxt[cnt] = from[u], from[u] = cnt;
}
//计算深度&计算祖先
void dfs (int u, int fa) {
depth[u] = depth[fa] + 1;
for (register int i = 1; i <= Log[n]; ++i) {
if ((1 << i) > depth[u]) break;
f[u][i] = f[f[u][i - 1]][i - 1];
}
for (register int i = from[u]; i; i = nxt[i]) {
ll v = to[i];
if (v == fa) continue;
f[v][0] = u;
dfs (v, u);
}
}
//计算LCA
inline int LCA (int x, int y) {
if (depth[x] < depth[y]) swap(x, y);
//我们默认x为更深的那个点
for(register int i = Log[n] ; i >= 0 ; --i)
if(depth[x] - (1 << i) >= depth[y]) x = f[x][i];
//将x跳到和y同一深度上
if (x == y) return x;
for (register int i = Log[n]; i >= 0; --i)
if (f[x][i] != f[y][i])
x = f[x][i], y = f[y][i];
//一起向上跳
return f[x][0];
//不难看出,此时两个点均在其LCA的下方,往上跳一次即可
}
void init(){
Log[0] = -1;
for (register int i = 1, u, v; i < n; ++i) {
cin>>u>>v;
addEdge (u, v); addEdge(v, u);
Log[i] = Log[i >> 1] + 1;
}
Log[n] = Log[n >> 1] + 1;
}
int dis(int p , int q){return depth[p] + depth[q] - 2 * depth[LCA(p , q)];}
bool cmp(int a,int b){
return depth[a]>depth[b];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int m;
cin>>n>>m;
init();dfs(1,0);
while(m--){
int k;
cin>>k;
for(int i=1;i<=k;i++)cin>>a[i];
sort(a+1,a+1+k,cmp);
bool f=0;
for(int i=2;i<=k;i++){
int r=LCA(a[i],a[i-1]);
if(dis(r,a[i-1])>1&&dis(r,a[i])>1){f=1;break;}
}
if(f)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return 0;
}
F. Make k Equal
题意:
题解:
AC代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
//const int mod=1e9+7;
const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=2e5+10;
const ll inf=0x3f3f3f3f;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
ll a[maxn],s1[maxn],s2[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
ll n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
int cnt=1;
for(int i=1;i<=n;i++){
s1[i]=s1[i-1]+a[i];
if(a[i]==a[i-1])cnt++;
else cnt=1;
if(cnt>=k){cout<<0<<endl;return 0;}
}
for(int i=n;i>=1;i--)
s2[i]=s2[i+1]+a[i];
ll ans=inf*inf;
for(int i=1;i<=n;i++){
ll tmp=inf*inf;
if(i>=k)tmp=min(tmp,(a[i]-1)*(i-1)-s1[i-1]+k-1);
if(n-i+1>=k)
tmp=min(tmp,s2[i+1]-(a[i]+1)*(n-i)+k-1);
if(i<k&&n-i+1<k){
tmp=(a[i]-1)*(i-1)-s1[i]+s2[i]-(a[i]+1)*(n-i)+k-1;
}
if(tmp<0)tmp=0;
ans=min(ans,tmp);
}
cout<<ans<<endl;
return 0;
}