传送门:UNIQUE VISION Programming Contest 2023 Christmas (AtCoder Beginner Contest 334) - AtCoder
A题是最最基础的语法题就不再讲解。
B - Christmas Trees

该题虽然分低,但我觉得还是很不错的。
给你 l 和 r ,设满足题意的数字是x则让你找在区间中有多少个x是x%k==a%k。我们要算出左右满足题意的两端点值,而后可以求出。左端点向上取整,右端点向下取整。
分别是l+=((x-l%m)%m+m)%m 以及r-=((r%m-x)%m+m)%m。
最后可以算出答案。
// #pragma GCC optimize(3) //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int mod=998244353;
const int MX=0x3f3f3f3f3f3f3f3f;
int n,m;
void icealsoheat(){
int a,l,r;
cin>>a>>m>>l>>r;
int x=a%m;
l+=((x-l%m)%m+m)%m;
r-=((r%m-x)%m+m)%m;
if(l>r)cout<<"0";
else cout<<(r-l)/m+1;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
int _yq;
_yq=1;
// cin>>_yq;
while(_yq--){
icealsoheat();
}
}
C - Socks 2
这题比较经典。看到绝对值我们首先就要想到拆绝对值,则有数量相等的正负数。2*n-k为偶数的话,我们就直接计算就可以了。若为奇数,我们可以提前预处理出前缀和而后遍历每一个数去除来求最小值。注意去除当前数,后面的后缀和应该变成相反数,才是最终答案。
// #pragma GCC optimize(3) //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int mod=998244353;
const int MX=0x3f3f3f3f3f3f3f3f;
int n,m;
int k;
void icealsoheat(){
cin>>n>>k;
vector<int>a(n+5,2);
for(int i=1;i<=k;i++){
int x;
cin>>x;
a[x]=1;
}
if((2*n-k)&1){
int id=0;
vector<int>sum(2*n+5,0);
for(int i=1;i<=n;i++){
id++;
if(id&1){
sum[id]=sum[id-1]-i;
}
else sum[id]=sum[id-1]+i;
if(a[i]==2){
id++;
if(id&1)sum[id]=sum[id-1]-i;
else s

A~G&spm=1001.2101.3001.5002&articleId=135582786&d=1&t=3&u=a54aaa5dfe9f4e59810fa2bd471770ff)
610

被折叠的 条评论
为什么被折叠?



