A. Make it Beautiful
他想要变美 ,我们按照题目说的做就行,通过判断我们发现如果在sort一遍后
sort(a + 1 , a + 1 + n); if(a[1] == a[n]) { cout << "NO" << "\n"; return ; }
其他的情况我们就可以用一大一小的方式插入,这样就可以满足整个序列可以为beautiful
ACcode
void solve() { ios;//这个是一个宏定义,可以去掉没有影响 int t; cin >> t; while(t -- ) { cin >> n; for(int i = 1 ; i <= n ; i ++ ) { cin >> a[i]; } sort(a + 1 , a + 1 + n); if(a[n] == a[1]) { cout << "NO" <<"\n"; continue; } cout << "YES" << "\n"; for(int i = 1 ; i <= n / 2 ; i ++ ) { cout << a[i] << " " << a[n - i + 1] << " "; } if(n % 2 == 1) { cout << a[n / 2 + 1]; } cout << "\n"; } }
B. Matrix of Differences
这个题目只要满足时蛇形矩阵就可以,而且构造方式很多,关键在于怎么输出,代码我就写一个我赛时写出来的
ACcode
void solve() { ios; int t; cin >> t; while(t -- ) { int n; cin >> n; int q = n * n; int w = 1; int flag = 1; for(int i = 1 ; i <= n ; i ++ ) { if(i % 2 == 1) { for(int j = 1 ; j <= n ; j ++ ) { if(flag == 1) { a[i][j] = q; q -- ; flag = 0; } else { a[i][j] = w; w ++ ; flag = 1; } } } else { for(int j = n ; j >= 1 ; j -- ) { if(flag == 1) { a[i][j] = q; q --; flag = 0; } else { a[i][j] = w; w ++ ; flag = 1; } } } } for(int i = 1 ; i <= n ; i ++ ) { for(int j = 1 ; j <= n ; j ++ ) { cout << a[i][j] << " "; } cout << "\n"; } } }
C. Yet Another Tournament
这个题目其实是一个不是很难的题目,这个题目既可以贪心又可以二分,所以是一道完全可做题,只不过确实很困,然后打的又是小号所以就睡觉了
思路:
这个题目就可以先排序,维护一个前缀和就行,单独判断我们可以打败几个人
但是我们不想要并列,我们想要超越,所以没有必要去花时间和一些打不过的人打,我们可以花时间去超越他人
所以就会有以下代码
if(i < n && m >= s[i] + max(a[i + 1] - b[i] , (int)0)) { res = min(res , n - i); }
ACcode
void solve() { ios; int t; cin >> t; while(t -- ) { int n , m; cin >> n >> m; for(int i = 1 ; i <= n ; i ++ ) { cin >> a[i]; b[i] = a[i]; } sort(b + 1 , b + 1 + n); for(int i = 1 ; i <= n ; i ++ ) { s[i] = s[i - 1] + b[i]; } int res = n + 1; //有 n + 1 个人 for(int i = 1 ; i <= n ; i ++ ) { if(m >= s[i]) { res = min(res , n - i + 1); } if(i < n && m >= s[i] + max(a[i + 1] - b[i] , (int)0)) { res = min(res , n - i); } } cout << res << "\n"; } }
标签:sort,Educational,题目,141,int,res,cin,Codeforces,-- From: https://www.cnblogs.com/codeforceshobby/p/17035964.html