Problem A

思路分析

直接累计各元素绝对值即可 ## AC代码

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int MAXN=2e5+10;
void solve(){
int n,ans=0;
cin>>n;
for(int i=0;i<n;i++){
int x;
cin>>x;
if(x>0)ans+=x;
else ans-=x;
}
cout<<ans<<"\n";
}
int main(){
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--){
solve();
}
}
# Problem B ## 思路分析 两种操作:去除一个元素,或者某个元素+1。 其实可以发现,\(sum\)%\(3\)结果只有\(0,1,2\). \(0:\)直接输出0即可。 \(1:\)要不删去一个元素(其取模结果为1),要不加2,所以可以用个\(flag\),看看有没有这样的元素存在。 \(2:\)要不删去一个元素,要不加1,无所谓,都是两次操作。 ## AC代码

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int MAXN=1e5+10;
void solve(){
int n,flag=0;cin>>n;
ll sum=0;
for(int i=1;i<=n;i++){
int x;cin>>x;
if(x%3==1)flag=1;
sum+=x;
}
if(sum%3==0)cout<<0<<"\n";
else if(sum%3==2)cout<<1<<"\n";
else{
if(flag)cout<<1<<"\n";
else cout<<2<<"\n";
}
}
int main(){
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--){
solve();
}
}

Problem C

思路分析

坐牢的开始qwq,自己想得太复杂了,其实直接用快速幂枚举\(x,y\)即可(看了队里大佬的代码)。 这里去重有个小技巧,可以用\(set\),这样就可以不用写判断是否重复的条件(set可以直接去重),最后输出\(set.size()\)即可。 ## AC代码

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int MAXN=2e5+10;
int quickpower(int a,int n){
int ans=1;
while(n){
if(n&1)ans*=a;
n>>=1;
a*=a;
}
return ans;
}
void solve(){
int a,b,l;cin>>a>>b>>l;
set<int> s;
for(int x=0;quickpower(a,x)<=l;x++){
//注意y的枚举条件是quickpower(a,x)*quickpower(b,y)<=l
for(int y=0; quickpower(a,x)*quickpower(b,y)<=l;y++){
int num=quickpower(a,x)* quickpower(b,y);
if(l%num==0){
//将l/num存入set中
s.insert(l/num);
}
}
}
cout<<s.size()<<"\n";
}
int main(){
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--){
solve();
}
}

Problem D

思路分析

看看样例,可以大胆猜测一下,先从小到大排序,可以发现,\(SmallElememt\)%\(BigElememt\)肯定不为0,那么这样贪心排序下来,如果可以得到结果不为0,满足题意,直接\(return\)即可。 但是,需要特判是否有相同的情况,只需要考虑\(a_0、a_1\)即可,后面是否连续无影响,如果\(a_0==a_1\),则不满足题意。 ## AC代码

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int MAXN=1e5+10;
void solve(){
int n;cin>>n;
vector<int>a(n);
for(int i=0;i<n;i++)cin>>a[i];
//元素按照从小到大排序
sort(a.begin(),a.end());
//特判
if(a[1]!=a[0]){
cout<<"YES\n";
return;
}
for(int i=1;i<n;i++){
//如果%!=0,输出yes
if(a[i]%a[0]!=0){
cout<<"YES\n";
return;
}
}
cout<<"NO\n";
}
int main(){
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--){
solve();
}
}

Problem E

以后再补qwq