- chenshixian 的博客
陈室先的国庆模拟赛DAY03
- @ 2024-10-4 15:25:43
题目传送门
T1减法和求余
思路
首先取模很简单,因为取模完后越变越小,输出最小的,减法的话则是所有数字的和减去最小的数字,因为我们开始是把最小的数作为被减数,注意的特判
代码
#include<bits/stdc++.h>
using namespace std;
long long a[100010];
int main(){
freopen("divmod.in","r",stdin);
freopen("divmod.out","w",stdout);
long long n,k;
cin>>n>>k;
if((k==1&&n==1)){
int x;
cin>>x;
cout<<x;
}
else if(k==1){
long long s=0;
for(long long i=1;i<=n;i++){
cin>>a[i];
s+=a[i];
}
sort(a+1,a+1+n);
cout<<s-a[1]*2;
}
else{
for(long long i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
cout<<a[1];
}
return 0;
}
错的点
考试时没有特判,以后要注意一下数据范围,不能出现这些小错误
T2回文串
思路
其实就是一道大模拟,但是要注意很多细节,测很多样例,所以请细心的按题目要求写
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
freopen("hw.in","r",stdin);
freopen("hw.out","w",stdout);
string s;
cin>>s;
string p=s;
reverse(s.begin(),s.end());
if(p==s){
int n=s.size();
int l=0;
for(int i=0;i<(n/2);i++){
int d=n-i-1;
if(s[d]!='a'){
s[d]=s[i]='a';
l=1;
break;
}
}
if(!l&&n%2==1){
int f=n/2;
f=n-f;
f--;
s[f]='a';
}
cout<<s;
}
else{
int n=s.size();
int g=0;
for(int i=0;i<(n/2);i++){
int d=n-i-1;
if(s[d]!=s[i])g++;
}
if(g==1){
int l=0;
for(int i=0;i<(n/2);i++){
int d=n-i-1;
if(s[d]!=s[i])
{
if(s[i]=='a')l++;
if(s[d]=='a')l++;
s[d]=s[i]='a';
}
}
if(l&&n%2==1){
int f=n/2;
f=n-f;
f--;
s[f]='a';
}
}
else{
for(int i=0;i<(n/2);i++){
int d=n-i-1;
if(s[d]!=s[i]){
if(s[d]<s[i])s[i]=s[d];
else s[d]=s[i];
}
}
}
reverse(s.begin(),s.end());
cout<<s;
}
return 0;
}
T3涂色仪式
思路
这道题发现其实只要可以涂就可以涂,不用卡绿颜色冲突(不影响),所以有多少个和质数为就数出多少个
代码
#include<bits/stdc++.h>
using namespace std;
int st[2000010],a[300010],n;
void g(int n) {
int c=0;
st[0]=1;
st[1]=1;
for (int i=2;i<=n;i++) {
if(!st[i]){
for(int j=2;j*i<=n;j++)st[j*i]=1;
}
}
}
int main(){
freopen("color.in","r",stdin);
freopen("color.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
g(2000000);
int c=0;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
if(!st[a[x]+a[y]])c++;
}
cout<<c;
return 0;
}
错的点
考试时写搜索写错了,以后写这种题要多想想写更好的解法