CSPJ游记
当时对于复赛,我没有一点信心,模拟赛时的150(2024)分仍然刺激着我的内心,但看到题目才发现,T1和T2比上一年简单多少都不知道!
进了赛场,我看了一下第一题,太简单了,但为了不出问题,我用了最简单的方法,59行大代码,AC;
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
#define int long long
int a[N];
signed main(){
string s;
cin>>s;
int g=1;
for(int i=0;i<s.size();i++){
if(s[i]=='0'){
a[g]=0;
g++;
}
if(s[i]=='1'){
a[g]=1;
g++;
}
if(s[i]=='2'){
a[g]=2;
g++;
}
if(s[i]=='3'){
a[g]=3;
g++;
}
if(s[i]=='4'){
a[g]=4;
g++;
}
if(s[i]=='5'){
a[g]=5;
g++;
}
if(s[i]=='6'){
a[g]=6;
g++;
}
if(s[i]=='7'){
a[g]=7;
g++;
}
if(s[i]=='8'){
a[g]=8;
g++;
}
if(s[i]=='9'){
a[g]=9;
g++;
}
}
sort(a+1,a+g+1);
for(int i=g;i>=2;i--){
cout<<a[i];
}
return 0;
}
第二题更简单,只要懂点数学,找一下规律,就能做出来。我是42行代码过,AC;
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[110];
signed main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n*m;i++){
cin>>a[i];
}
int g=a[1];
int w=1;
for(int i=1;i<=n*m;i++){
if(a[i]>g){
w++;
}
}
if(w%n==0){
cout<<w/n<<" ";
if((w/n)%2==0){
cout<<1;
}else{
cout<<n;
}
}else{
cout<<w/n+1<<" ";
if((w/n+1)%2==1){
cout<<w%n;
}else{
cout<<n-w%n+1;
}
}
return 0;
}
第三题根本不会做,直接乱写一通,结果喜提10分;
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5*1e5+10;
int a[N];
bool flag[N];
signed main(){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int ans=0;
for(int i=1;i<=n;i++){
if(a[i]==k){
ans++;
flag[i]=true;
}
}
int g,w;
for(int i=1;i<=n;i++){
if(flag[i]==false){
g=a[i];
w=i;
break;
}
}
for(int i=w+1;i<=n;i++){
if(g==k){
ans++;
int sum=0;
for(int j=i;j<=n;j++){
if(flag[j]==false){
sum++;
g=a[j];
i=j;
break;
}
}
if(sum==0){
cout<<ans;
return 0;
}
}
if(flag[i]==true){
if(g==k){
ans++;
}
int sum=0;
for(int j=i+1;j<=n;j++){
if(flag[j]==false){
sum++;
g=a[j];
i=j;
break;
}
}
if(sum==0){
cout<<ans;
return 0;
}
}else{
g=g^a[i];
}
}
if(g==k){
ans++;
}
cout<<ans;
return 0;
}
最后一题看样例拿了12分;
最后总分是100+100+10+12分,估计二等奖!