社区讨论

论我在考场上是如何挂掉这道题的

P14361[CSP-S 2025] 社团招新参与者 7已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mhksvgfv
此快照首次捕获于
2025/11/05 00:45
4 个月前
此快照最后确认于
2025/11/08 07:46
4 个月前
查看原帖
考场上写的代码,因为exe里面 control+v 不能复制出来换行,所以就用了 freopen 输入,但是把 stdout 给注释掉了,导致交上去的时候也没有改过来,只是沉浸在A题的喜悦当中。
考场代码:
CPP
#include<bits/stdc++.h>
using namespace std;

#define ll long long

namespace wjx{

int T_T = 1;

void FRE(){
 freopen("club.in","r",stdin);
// freopen("club.out","w",stdout); 就是因为这一行 T_T
}
void IOS(){
 ios::sync_with_stdio(false);
 cin.tie(0);
 cout.tie(0);
}
int n;
struct node{
 int a,b,c;
 int mx1,mx2,mx3;
 int b1,b2,b3;
}a[100005];
struct Nd{
 int val,id;
};
bool cmp_Nd(Nd a,Nd b){
 return a.val > b.val;
}
void get(){
 cin >> n;
 for (int i = 1;i <= n;++i){
  cin >> a[i].a >> a[i].b >> a[i].c;
  Nd b[4] = {{0,0},{a[i].a,1},{a[i].b,2},{a[i].c,3}};
  sort(b + 1,b + 3 + 1,cmp_Nd);
  a[i] = (node){a[i].a,a[i].b,a[i].c,b[1].val,b[2].val,b[3].val,b[1].id,b[2].id,b[3].id};
 }
}
struct nd{
 int id,cnt;
 void clear(int idx){
  id = idx;
  cnt = 0;
 }
}cnt[4];
bool cmp(nd x,nd y){
 return x.cnt > y.cnt;
}
bool O1(nd x,nd y){
 return x.id < y.id;
}
bool O2(int x,int y){
 return a[x].mx1 - a[x].mx2 < a[y].mx1 - a[y].mx2;
}
bool O3(int x,int y){
 return a[x].mx2 - a[x].mx3 < a[y].mx2 - a[y].mx3;
}
vector <int> vec[4];
int f[4];
int calc(){
 int sum = 0;
 for (int i = 1;i <= 3;++i){
  int sz = vec[i].size();
  for (int j = f[i];j < sz;++j){
   if (a[vec[i][j]].b1 == i) sum += a[vec[i][j]].mx1;
   else if (a[vec[i][j]].b2 == i) sum += a[vec[i][j]].mx2;
   else sum += a[vec[i][j]].mx3; 
  }
 }
 return sum;
}
void solve(){
 cnt[1].clear(1);cnt[2].clear(2);cnt[3].clear(3);
 vec[1].clear();vec[2].clear();vec[3].clear();
 f[0] = f[1] = f[2] = f[3] = 0;
 for (int i = 1;i <= n;++i){
  cnt[a[i].b1].cnt++;
  vec[a[i].b1].push_back(i);
 }
 sort(cnt + 1,cnt + 4,cmp);
 if (cnt[1].cnt <= n / 2){
  int ans = calc();
//  for (int i = 1;i <= n;++i) ans += a[i].mx1;
  cout << ans << "\n";
  return ;
 }else{
  int k = cnt[1].cnt - n / 2;
  int id = cnt[1].id;
  cnt[1].cnt -= n / 2;
  sort(vec[id].begin(),vec[id].end(),O2);
  sort(cnt + 1,cnt + 4,O1);
  for (int i = 0;i < k;++i){
   ++cnt[a[vec[id][i]].b2].cnt;
   vec[a[vec[id][i]].b2].push_back(vec[id][i]);
  }
  f[id] = k;
  sort(cnt + 1,cnt + 4,cmp);
  if (cnt[1].cnt <= n / 2){
   int ans = calc();
   cout << ans << "\n";
  }else{
   k = cnt[1].cnt - n / 2;
   int id = cnt[1].id;
   cnt[1].cnt -= n / 2;
   sort(vec[id].begin(),vec[id].end(),O3);
   sort(cnt + 1,cnt + 4,O1);
   for (int i = 0;i < k;++i){
    ++cnt[a[vec[id][i]].b3].cnt;
    vec[a[vec[id][i]].b3].push_back(vec[id][i]);
   }
   f[id] = k;
   int ans = calc();
   cout << ans << "\n";
  }
 }
}

signed main(){
 cin >> T_T;
 while (T_T--){
  wjx::get();
  wjx::solve(); 
 }
 return 0;
}

}

signed main(){
 wjx::IOS();
 wjx::FRE();
 return wjx::main();
}//rp++
//15:44
成功变成 Pauline Wang ~爆零王~

回复

6 条回复,欢迎继续交流。

正在加载回复...