A - Second Half Sum
题目描述
给你一个长度为 $N$ 的整数序列: $A=(A_1,A_2,\dots,A_N)$ .这里, $N$ 是偶数。 求 $A$ 的后半部之和,即 $A_{(N/2)+1},A_{(N/2)+2},\dots,A_N$ 的和。
解题思路
A题不讲了。脑残题。
完整代码
#include<bits/stdc++.h> #define fr1(i,a,b) for(int (i)=(a);(i)<=(b);++(i)) #define fr2(i,a,b) for(int (i)=(a);(i)>=(b);--(i)) #define fr3(i,a,b,n) for(int (i)=(a);(i)<=(b);(i)+=(n)) #define fr4(i,a,b,n) for(int (i)=(a);(i)>=(b);(i)-=(n)) #define fv(i,p) for(auto (i):(p)) #define ll long long #define ull unsigned ll #define pii pair<int,int> #define pll pair<ll,ll> #define _1st first #define _2nd second #define y1 yy1 #define elif else if #define RT return #define debug cout<<endl<<"-------------------------------------------------------------"<<endl using namespace std; int n,ans; int main(){ ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); cin>>n; fr1(i,1,n){ int x; cin>>x; if(i>n/2)ans+=x; } cout<<ans; RT 0; }B - Old Maid
高桥目前有 $N$ 张牌。其中 第$i$ $(1\le i\le N)$ 张牌上写着整数 $A_i$ 。
他尽可能多地重复下面的操作。
选择两张写有相同整数的不同卡片,然后吃掉这两张卡片。被吃掉的牌将被永久删除,无法在后续操作中选择。
求当无法再进行操作时,写在卡片上的整数之和。
解题思路
卡片能吃?
排序。
完整代码
#include<bits/stdc++.h> #define fr1(i,a,b) for(int (i)=(a);(i)<=(b);++(i)) #define fr2(i,a,b) for(int (i)=(a);(i)>=(b);--(i)) #define fr3(i,a,b,n) for(int (i)=(a);(i)<=(b);(i)+=(n)) #define fr4(i,a,b,n) for(int (i)=(a);(i)>=(b);(i)-=(n)) #define fv(i,p) for(auto (i):(p)) #define ll long long #define ull unsigned ll #define pii pair<int,int> #define pll pair<ll,ll> #define _1st first #define _2nd second #define y1 yy1 #define elif else if #define RT return #define debug cout<<endl<<"-------------------------------------------------------------"<<endl using namespace std; int n,a[114514],ans; int main(){ ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); cin>>n; fr1(i,1,n){ cin>>a[i]; } sort(a+1,a+n+1); fr1(i,1,n){ if(a[i]==a[i+1]){ a[i]=0;a[i+1]=0; } }fr1(i,1,n){ ans+=a[i]; }cout<<ans; RT 0; }C - Change Schools
题目描述
目前,AtCoder 高中有 $K$ 个班级和 $N$ 名学生,其中 $i$ 个学生属于 $(1\le i\le N)$ 个班级。
高桥将在九月份转入 AtCoder 高中。届时,他可以在 $K$ 个班级中任意选择一个班级,并属于那个班级。
如果有一个班级的学生比他所在的班级多,他就会伤心。否则,他会很高兴。
求如果他属于多少个班,他就会感到快乐。
解题思路
最优策略:把新增学生放到一个人数 = mx‑1 的班级,这样得到最多的等于最大值的班级。
所以答案:统计有多少个班级满足 \(cnt_i+1 \ge mx\)。
- \(cnt_i == mx\):\(cnt_i+1 \ge mx\) 成立,这些班本身就是最大值;
- \(cnt_i == mx‑1\):\(cnt_i+1 = mx\),加一个人之后也成为最大值;
- \(cnt_i \le mx‑2\):\(cnt_i+1 \le mx‑1\),达不到最大值,不计入。
完整代码
#include<bits/stdc++.h> #define fr1(i,a,b) for(int (i)=(a);(i)<=(b);++(i)) #define fr2(i,a,b) for(int (i)=(a);(i)>=(b);--(i)) #define fr3(i,a,b,n) for(int (i)=(a);(i)<=(b);(i)+=(n)) #define fr4(i,a,b,n) for(int (i)=(a);(i)>=(b);(i)-=(n)) #define fv(i,p) for(auto (i):(p)) #define ll long long #define ull unsigned ll #define pii pair<int,int> #define pll pair<ll,ll> #define _1st first #define _2nd second #define y1 yy1 #define elif else if #define RT return #define debug cout<<endl<<"-------------------------------------------------------------"<<endl using namespace std; int n,k,a[200001],ans; pii cl[200001];//班级,人数 int main(){ ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); cin>>n>>k; fr1(i,1,k){ cl[i]._1st=i; cl[i]._2nd=0; } fr1(i,1,n){ cin>>a[i]; cl[a[i]]._2nd++; } int mx=0; fr1(i,1,k){ mx=max(mx,cl[i]._2nd); } fr1(i,1,k){ if(cl[i]._2nd+1>=mx)ans++; } cout<<ans; RT 0; }D - Coefficient Stair
题目描述
输出由满足 $\displaystyle\sum_{i=1} ^ Ni\times A_i=K$ 的非负整数组成的所有长度为 $N$ 的序列 $A=(A_1,A_2,\ldots,A_N)$ ,按字典序排列。
解题思路
使用暴力打表的方式,枚举前n-1个数,最后一个变量直接通过等式算出来:
\(n\cdot a_n = k - \sum_{i=1}^{n‑1}i\cdot a_i\)
完整代码
#include<bits/stdc++.h> #define fr1(i,a,b) for(int (i)=(a);(i)<=(b);++(i)) #define fr2(i,a,b) for(int (i)=(a);(i)>=(b);--(i)) #define fr3(i,a,b,n) for(int (i)=(a);(i)<=(b);(i)+=(n)) #define fr4(i,a,b,n) for(int (i)=(a);(i)>=(b);(i)-=(n)) #define fv(i,p) for(auto (i):(p)) #define ll long long #define ull unsigned ll #define pii pair<int,int> #define pll pair<ll,ll> #define _1st first #define _2nd second #define y1 yy1 #define elif else if #define RT return #define debug cout<<endl<<"-------------------------------------------------------------"<<endl using namespace std; int n,k; int main(){ ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); cin>>n>>k; if(n==1){ cout << k << '\n'; }elif(n==2){ fr1(a1,0,k){ if((k-1*a1)%2==0){ cout<<a1<<" "<<" "<<(k-1*a1)/2<<'\n'; } } }elif(n==3){ fr1(a1,0,k){ fr1(a2,0,(k-1*a1)/2){ if((k-1*a1-2*a2)%3==0){ cout<<a1<<" "<<a2<<" "<<(k-1*a1-2*a2)/3<<'\n'; } } } }elif(n==4){ fr1(a1,0,k){ fr1(a2,0,(k-1*a1)/2){ fr1(a3,0,(k-1*a1-2*a2)/3){ if((k-1*a1-2*a2-3*a3)%4==0){ cout<<a1<<" "<<a2<<" "<<a3<<" "<<(k-1*a1-2*a2-3*a3)/4<<'\n'; } } } } }elif(n==5){ fr1(a1,0,k){ fr1(a2,0,(k-1*a1)/2){ fr1(a3,0,(k-1*a1-2*a2)/3){ fr1(a4,0,(k-1*a1-2*a2-3*a3)/4){ if((k-1*a1-2*a2-3*a3-4*a4)%5==0){ cout<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<" "<<(k-1*a1-2*a2-3*a3-4*a4)/5<<'\n'; } } } } } }elif(n==6){ fr1(a1,0,k){ fr1(a2,0,(k-1*a1)/2){ fr1(a3,0,(k-1*a1-2*a2)/3){ fr1(a4,0,(k-1*a1-2*a2-3*a3)/4){ fr1(a5,0,(k-1*a1-2*a2-3*a3-4*a4)/5){ if((k-1*a1-2*a2-3*a3-4*a4-5*a5)%6==0){ cout<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<" "<<a5<<" "<<(k-1*a1-2*a2-3*a3-4*a4-5*a5)/6<<'\n'; } } } } } } }elif(n==7){ fr1(a1,0,k){ fr1(a2,0,(k-1*a1)/2){ fr1(a3,0,(k-1*a1-2*a2)/3){ fr1(a4,0,(k-1*a1-2*a2-3*a3)/4){ fr1(a5,0,(k-1*a1-2*a2-3*a3-4*a4)/5){ fr1(a6,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5)/6){ if((k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6)%7==0){ cout<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<" "<<a5<<" "<<a6<<" "<<(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6)/7<<'\n'; } } } } } } } }elif(n==8){ fr1(a1,0,k){ fr1(a2,0,(k-1*a1)/2){ fr1(a3,0,(k-1*a1-2*a2)/3){ fr1(a4,0,(k-1*a1-2*a2-3*a3)/4){ fr1(a5,0,(k-1*a1-2*a2-3*a3-4*a4)/5){ fr1(a6,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5)/6){ fr1(a7,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6)/7){ if((k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6-7*a7)%8==0){ cout<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<" "<<a5<<" "<<a6<<" "<<a7<<" "<<(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6-7*a7)/8<<'\n'; } } } } } } } } }elif(n==9){ fr1(a1,0,k){ fr1(a2,0,(k-1*a1)/2){ fr1(a3,0,(k-1*a1-2*a2)/3){ fr1(a4,0,(k-1*a1-2*a2-3*a3)/4){ fr1(a5,0,(k-1*a1-2*a2-3*a3-4*a4)/5){ fr1(a6,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5)/6){ fr1(a7,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6)/7){ fr1(a8,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6-7*a7)/8){ if((k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6-7*a7-8*a8)%9==0){ cout<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<" "<<a5<<" "<<a6<<" "<<a7<<" "<<a8<<" "<<(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6-7*a7-8*a8)/9<<'\n'; } } } } } } } } } }elif(n==10){ fr1(a1,0,k){ fr1(a2,0,(k-1*a1)/2){ fr1(a3,0,(k-1*a1-2*a2)/3){ fr1(a4,0,(k-1*a1-2*a2-3*a3)/4){ fr1(a5,0,(k-1*a1-2*a2-3*a3-4*a4)/5){ fr1(a6,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5)/6){ fr1(a7,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6)/7){ fr1(a8,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6-7*a7)/8){ fr1(a9,0,(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6-7*a7-8*a8)/9){ if((k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6-7*a7-8*a8-9*a9)%10==0){ cout<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<" "<<a5<<" "<<a6<<" "<<a7<<" "<<a8<<" "<<a9<<" "<<(k-1*a1-2*a2-3*a3-4*a4-5*a5-6*a6-7*a7-8*a8-9*a9)/10<<'\n'; } } } } } } } } } } } RT 0; }