Problem A:
http://codeforces.com/contest/1213/problem/A
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n){
int a[105];
int single=0,even=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(!(a[i]%2)) single++;
else even++;
}
if(even>=single) cout<<single<<endl;
else cout<<even<<endl;
}
return 0;
}
解题思路:寻找奇数偶数各自的数量,轻松ac。
Problem B:
http://codeforces.com/contest/1213/problem/B
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--){
long long m,a[150005],cnt=0;
cin>>m;
for(int i=1;i<=m;i++){
cin>>a[i];
}
long long minm=a[m];
for(int i=m-1;i>=1;i--){
if(a[i]<=minm){
minm=min(a[i],minm);
}else{
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}
思路:这题容易TLE(至少我爆了),因为给的数n的范围是1e5,如果暴力两次循坏就是1e10越界了。所以我们要寻找最少的时间复杂度。就从后往前遍历,定义最小值min,倘若前面>min,则cnt++,水题。
Problem C:
http://codeforces.com/contest/1213/problem/C
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
int N;
cin>>N;
while(N--){
ll n,m;
cin>>n>>m;
ll now=m;
ll ans=0;
while(now<=n){
ans+=now%10;
now+=m;
if(now%10==m%10){
now-=m;
break;
}
}
ans=ans*(n/now);
now=now*(n/now);
while(now<=n){
ans+=now%10;
now+=m;
}
cout<<ans<<endl;
}
}
思路:找共性。我们设一个大小为10的数组,里面填上数,然后这为一组,n/m看一共有多少组。然后再把10个小组分为一个大组,看有几个大组。最后记得加上多余的。有点小技巧。
Problem D1:
http://codeforces.com/contest/1213/problem/D1
提供一个过了样例但是wa了的代码…
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n){
int m,a[60],b[60],cnt=0;
cin>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
cnt++;
}
sort(a+1,a+cnt+1);
int minn=9999999;
for(int i=1;i<=n-m+1;i++){
b[i]=a[i+m-1]-a[i];
minn=min(b[i],minn);
}
cout<<minn<<endl;
}
}
本文解析了CodeForces比赛1213题集中的四道题目,包括寻找奇偶数数量、避免TLE的遍历策略、数字序列规律分析以及区间最值求解。每题附带C++代码实现,展示了高效算法的设计与应用。
1381

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



