- 李红强 的博客
国庆DAY3
- @ 2024-10-4 16:19:15
T1 减法与求余
错误原因: 减法只有一个数时直接输出
思路:
减法
求余
#include<bits/stdc++.h>
using namespace std;
int a[100009];
int main(){
freopen("divmod.in","r",stdin);
freopen("divmod.out","w",stdout);
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
if(k==1)
{
if(n==1)
{
cout<<a[1];
return 0;
}
long long sum=0;
for(int i=1;i<=n;i++) sum+=a[i];
sum=sum-a[1]*2;
cout<<sum;
}
else{
cout<<a[1];
}
return 0;
}
T2 回文串
错误原因: 没有考虑特殊情况
思路:
遍历
判断 记录
最后特判 k
#include<bits/stdc++.h>
using namespace std;
string s;
int main(){
freopen("hw.in","r",stdin);
freopen("hw.out","w",stdout);
cin>>s;
int k=0;
int n=s.size();
int idx=0;
for(int i=0;i<=n/2;i++){
if(s[i]!=s[n-1-i]){
if(s[i]>s[n-1-i])
{
s[i]=s[n-1-i];
k++;
idx=i;
}
else
{
s[n-1-i]=s[i];
k++;
idx=i;
}
}
if(k==2) break;
}
if(k==0){
for(int i=0;i<n;i++){
if(s[i]!='a'){
s[i]='a';
s[n-1-i]='a';
break;
}
}
}
if(k==1){
if(s[idx]!='a')
{
s[idx]='a';
s[n-1-idx]='a';
}
else if(n%2==1)
s[n/2]='a';
}
cout<<s;
return 0;
}
T3 涂色仪式
(^____^)
思路:
欧拉筛法+
从下往上染色
先
后判断 && &&
++; =;
#include<bits/stdc++.h>
using namespace std;
const int N=3*1e5+10;
int a[N];
vector<int> v[N];
bool vis[N],s[N];
const int M=2*1e6+10;
bool isz[M];
int ans=0;
int idx=1;
void iszf()
{
for(int i=2;i<=M;i++)
{
for(int j=2;j<=i;j++)
{
if(j*i>M) break;
isz[j*i]=1;
}
}
}
void dfs(int x)
{
vis[x]=1;
for(int i=0;i<v[x].size();i++)
{
int nt=v[x][i];
if(!vis[nt])
{
dfs(nt);
if(!isz[a[x]+a[nt]] && !s[x] && !s[nt] )
{
ans++;
s[nt]=1;
}
}
}
}
int main(){
freopen("color.in","r",stdin);
freopen("color.out","w",stdout);
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int x,y;
for(int i=1;i<n;i++){
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
iszf();
dfs(1);
cout<<ans;
return 0;
}
T4 除法来咯
(>︿<)
错误原因: 思考方向错误
思路:
枚举商:
∵<= <=;
∴1<=c<=5;
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,a[N],ans,f[10];
int main(){
freopen("div.in","r",stdin);
freopen("div.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=i;i<=n;i++)
{
for(int j=1;j<=5;j++)
{
f[j]+=((a[i]/j) > (a[i]%j) && (a[i]/1000000<=j));
}
}
for(int i=1;i<=5;i++){
ans=max(ans,f[i]);
}
cout<<ans;
return 0;
}