1.number
赛事 AC 思路
此题比较简单, AC 思路比较多,我的思路如下
因为他让我们求字符串 \(s\) 中数字能组成的最大数字是多少,我们用一个 \(mp[x]\) 来存数字 \(x\) 在 \(s\) 中出现的次数,而能组成的最大数就是从 9 到 0 输出所有数字啦 ~
AC 代码
点开有惊喜
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll mp[15];
string s;
int main(){cin>>s;for(int i=0;i<s.size();i++)if(s[i]>='0'&&s[i]<='9')mp[s[i]-'0']++;for(int i=9;i>=0;i++)for(int j=1;j<=mp[i];j++)cout<<i;return 0;
}
2.seat
赛时该 AC 思路
此题也比较简单(难怪 s 组前两题变难了 QwQ),主要思路是找到小 R 在数组 \(a\) 中的排名,然后寻找规律做此题
规律
我们申明 \(s\) 是小 R 的排名, \(c\) 是所在列数, \(r\) 是所在行数
- 当 \(s\ mod\ m\ne0\) 时证明需要多开一列来放剩余的,因此 \(c=s\ mod\ n+1\) ,反之 \(c=s\ mod\ n\)
- 当 \(c\ mod\ 2=1\)时,可以观察到这一列是从上到下排列,因此 \(r=(s-1)\ mod\ n+1\) ;
- 当 \(c\ mod\ 2=0\)时,可以观察到这一列是从下到上排列,因此 \(r=n-(s-1)\ mod\ n\) ;
AC 代码
点开有惊喜
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,s,a[105];
bool cmp(ll a,ll b){return a>b;
}
int main(){cin>>n>>m;for(int i=1;i<=n*m;i++)cin>>a[i];s=a[1];sort(a+1,a+n*m+1,cmp);for(int i=1;i<=n*m;i++)if(s==a[i]){s=i;break;}ll c=(s-1)/n+1,r;if(c&1)r=(s-1)%n+1;elser=n-(s-1)%n;cout<<c<<" "<<r;return 0;
}