【题解】9/27入门组模拟

虽然这次题还算简单,我认为我做的已经够了。

A.[COCI 2006/2007 #2] ABC

这题在模拟前我就已经做过了,这道题是个$\text{} \color{red}{入门}$。

link

直接按照题意模拟即可(这份代码是我去年昨天做的……)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[6];memset(a,0,sizeof(a));
for(int i=1;i<=3;i++)cin>>a[i];
for(int i=1;i<=3-1;i++)
{
for(int j=1;j<=3;j++)
{
if(a[j]<a[j+1])swap(a[j],a[j+1]);
}//细节冒泡排序
}
int A=a[3],B=a[2],C=a[1];
string x;
cin>>x;
if(x=="ABC")printf("%d %d %d",A,B,C);
else if(x=="ACB")printf("%d %d %d",A,C,B);
else if(x=="BCA")printf("%d %d %d",B,C,A);
else if(x=="BAC")printf("%d %d %d",B,A,C);
else if(x=="CAB")printf("%d %d %d",C,A,B);
else if(x=="CBA")printf("%d %d %d",C,B,A);
return 0;
}

B.[USACO1.3] 滑雪课程设计Ski Course Design

link

这题是个$\text{} \color{orange}{普及-}$,用枚举的方法就可解决。

就是遍历找出最低的海拔,然后枚举最低的海拔$L$即可,$n$很小的,只有$10 ^ 3$。

  • 若第$i$座山的海拔低于$L$,就加上$(L-a_i)^2$。

  • 若第$i$座善的海拔与$L$的差

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Problem:Luogu P3650 [USACO1.3] 滑雪课程设计Ski Course Design

#include<bits/stdc++.h>
using namespace std;
int n,a[1010],ans=0x3f3f3f3f;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
int maxn=0,minn=0x3f3f3f3f;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>maxn)maxn=a[i];
if(a[i]<minn)minn=a[i];
}
for(int l=0;l<=maxn+1;l++)
{
int sum=0;
for(int i=1;i<=n;i++)
{
if(a[i]<l)sum+=(l-a[i])*(l-a[i]);
else if(a[i]>l+17)sum+=(a[i]-l-17)*(a[i]-l-17);
}
ans=min(ans,sum);
}
cout<<ans;
return 0;
}

C.Roy&October之取石子

link

通过找规律的方法我们可以知道当$n\ \text{mod}\ 6 = 0$的时候结果就是Roy胜。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
if(n%6)puts("October wins!");
else puts("Roy wins!");
}
}

D.统计重复个数

link

这道题暴力就可以完成,但是作为一个模拟赛的题目,它只有一个测试点而且多组数据,没法骗分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Problem:Luogu P10976 统计重复个数

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n1,n2,ans;
string s1,s2,str1,str2;
int main()
{
while(cin>>s2>>n2>>s1>>n1)
{
str1=str2="";
for(ll i=1;i<=n1;i++)str1+=s1;
str2=s2;
ll len1=str1.size(),len2=str2.size(),j=0;
for(ll i=0;i<len1;i++)
if(str1[i]==str2[j])
if(j+1==len2)ans++,j=0;
else j++;
cout<<ans/n2<<'\n';
ans=0;
}
return 0;
}

【题解】9/27入门组模拟
http://j27egu.github.io/2025/09/27/【题解】9-27入门组模拟/
作者
j27eGU
发布于
2025年9月27日
许可协议