目录
第 1 题:玩具
思路:贪心
#include<bits/stdc++.h>
#define ll long long
const int N=1e6+10;
ll a[N],n;
using namespace std;
int main()
{
cin>>n;
for(ll i=1;i<=n;i++)cin>>a[i];
sort(a,a+n+1);
ll ans=0;
for(ll i=n;i>0;i-=2)
{
ans+=a[i];
}
if(n%2)ans+=a[0];
cout<<ans<<endl;
}
第 2 题:滑雪
思路:因为n,m的范围很小,所以直接暴力就可以了,注意判断一下不要出界
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=110;
int f[N][N];
struct point {
int x,y;
ll len;
bool flag;
};
ll ans,n,m;
int mov[4][2]= {{1,0},{0,-1},{-1,0},{0,1}};
queue<point>q;
void bfs() {
ll cnt=0;
while(!q.empty()) {
point tem=q.front();
q.pop();
for(int i=0; i<4; i++) {
int dx=tem.x+mov[i][0],dy=tem.y+mov[i][1];
if(f[dx][dy]<f[tem.x][tem.y]&&dx>=0&&dx<n&&dy>=0&&dy<m) {
q.push({dx,dy,tem.len+1});
tem.flag=true;
}
if(!tem.flag)cnt=max(cnt,tem.len);
}
}
ans=max(cnt,ans);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin>>f[i][j];
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
q.push({i,j,1});
bfs();
}
}
cout<<ans<<endl;
}
第 3 题:abb
思路:提前统计好每一个字符出现的次数,每一次往后读取的时候将前一个字符删除
#include<bits/stdc++.h>
#define ll long long
#define init ios::sync_with_stdio(false),cin.tie(0);
using namespace std;
int f[30],n;
string arr;
ll ans;
int main() {
init
cin>>n;
cin>>arr;
for(int i=0; i<n; i++) {
f[arr[i]-'a']++;
}
for(int i=0; i<n; i++) {
for(int j=0; j<26; j++) {
if(f[j]>=2&&arr[i]-'a'!=j) {
ans+=(f[j]*(f[j]-1))/2;
}
}
f[arr[i]-'a']--;
}
cout<<ans<<endl;
}