9/21 越努力越幸运-思维赛(4.0)

╰+哭是因爲堅強的太久メ 2023-06-03 13:53 63阅读 0赞

F.CodeForces - 1118D1

题意:有n杯咖啡,需要写m页作业;他每天可以喝 不限量 杯 咖啡(1或者多杯);每杯咖啡可以让他写ai页作业;在同一天里,他所喝的咖啡能让他写w页;

w=(第一杯+第二杯-1+第三杯-2……);求最少喝几天能写完作业(这题意好像描述的不是很多,凑合~语文不好)

解:排序+二分答案,下限1天,上限n天,check的话直接看码;

O(nlogn)

ContractedBlock.gif ExpandedBlockStart.gif

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int MAXN=1e5+10;
  5. int a[MAXN];
  6. int n,m;
  7. bool check(int mid){
  8. int ans=0;
  9. int i=1;
  10. int cnt=0;
  11. int k=mid;
  12. while(i<=n){
  13. for(;i<=min(k,n);i++){
  14. ans+=max(a[i]-cnt,0);
  15. }
  16. if(ans>=m)return true;
  17. k=k+=mid;
  18. cnt++;
  19. }
  20. return false;
  21. }
  22. bool cmp(int x,int y){
  23. return x>y;
  24. }
  25. int main(){
  26. ios::sync_with_stdio(false);
  27. cin>>n>>m;
  28. for(int i=1;i<=n;i++){
  29. cin>>a[i];
  30. }
  31. sort(a+1,a+1+n,cmp);
  32. int ans=-1;
  33. int l=1,r=n,mid;
  34. while(l<=r){
  35. mid=(l+r)>>1;
  36. if(check(mid)){
  37. r=mid-1;
  38. ans=mid;
  39. }
  40. else l=mid+1;
  41. }
  42. cout<<ans<<endl;
  43. return 0;
  44. }

E.CodeForces - 1221C

题意:acm组队,有a个代码手,b个数论king,c个闲人;

求最多能组多少队,每队至少要有1个代码手和一个数论king;

解:模拟?;easy

ContractedBlock.gif ExpandedBlockStart.gif

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN=1e5+10;
  4. typedef long long ll;
  5. int main(){
  6. ios::sync_with_stdio(false);
  7. int T;
  8. cin>>T;
  9. while(T--){
  10. ll a,b,c,minn;
  11. cin>>a>>b>>c;
  12. minn=min(a,min(b,c));
  13. if(minn!=c){
  14. cout<<minn<<endl;
  15. }
  16. else{
  17. a-=c;b-=c;
  18. cout<<minn+min(a,min(b,(a+b)/3))<<endl;
  19. }
  20. }
  21. return 0;
  22. }

D.CodeForces - 1221B

题意:给一个n,输出一个图(只含有W,B),使得每个W或B能攻击B或W的个数最多;

每个只能攻击日字对角线上的;W攻击B,B攻击W;

解:交叉输出BW就行了;

ContractedBlock.gif ExpandedBlockStart.gif

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int MAXN=2e5+10;
  5. int main(){
  6. ios::sync_with_stdio(false);
  7. int n;
  8. cin>>n;
  9. for(int i=1;i<=n;i++){
  10. for(int j=1;j<=n;j++){
  11. if(i%2==j%2)cout<<'B';
  12. else cout<<'W';
  13. }
  14. cout<<endl;
  15. }
  16. return 0;
  17. }

C.CodeForces - 1118B

题意:n个数,求去掉一个数,使得剩下数组中奇数项和 等于 偶数项和 的个数;

解:先求出不去掉的奇数项和 和 偶数项和;

然后遍历数组;i代表去掉第i个数 然后

奇数项和=(i之前的奇数项和+i之后的偶数项和)

偶数项和=(i之前的偶数项和+i之后的奇数项和)

ContractedBlock.gif ExpandedBlockStart.gif

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int MAXN=2e5+10;
  5. int a[MAXN];
  6. int main(){
  7. ios::sync_with_stdio(false);
  8. int n;
  9. cin>>n;
  10. int sum1=0;
  11. int sum2=0;
  12. for(int i=1;i<=n;i++){
  13. cin>>a[i];
  14. if(i%2)sum1+=a[i];
  15. else sum2+=a[i];
  16. }
  17. //cout<<"sum1="<<sum1<<' '<<"sum2="<<sum2<<endl;
  18. int ans=0;
  19. int newsum1=0;
  20. int newsum2=0;
  21. for(int i=1;i<=n;i++){
  22. if(i%2){
  23. sum1-=a[i];
  24. if(sum1+newsum2==sum2+newsum1)ans++;
  25. newsum1+=a[i];
  26. }
  27. else {
  28. sum2-=a[i];
  29. if(sum1+newsum2==sum2+newsum1)ans++;
  30. newsum2+=a[i];
  31. }
  32. }
  33. cout<<ans<<endl;
  34. return 0;
  35. }

B.CodeForces - 1221A

题意:给你n个数,每两个一样的数可以合并成这个数的两倍,问能否合成2048;

2048游戏~;

解:桶排序;把小于等于2048的数进行桶排序,大于2048就不可能合成了;

然后从1开始遍历到2048(1024即可),num[i]>=2?num[i*2]+=num[i]/2:continue;

ContractedBlock.gif ExpandedBlockStart.gif

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int MAXN=1e3+10;
  5. int a[MAXN];
  6. int num[3000];
  7. int main(){
  8. ios::sync_with_stdio(false);
  9. int T,n;
  10. cin>>T;
  11. while(T--){
  12. cin>>n;
  13. memset(num,0,sizeof(num));
  14. for(int i=1;i<=n;i++){
  15. cin>>a[i];
  16. if(a[i]<=2048){
  17. num[a[i]]++;
  18. }
  19. }
  20. for(int i=1;i<=2048;i++){
  21. if(num[i]>=2){
  22. num[i*2]+=num[i]/2;
  23. }
  24. }
  25. if(num[2048])cout<<"Yes"<<endl;
  26. else cout<<"No"<<endl;
  27. }
  28. return 0;
  29. }

A.CodeForces - 1118A

题意:两种水瓶,1L a元,2L b元,问需要n L水最少需要花费多少;

解:直接比较1L和2L 的性价比,然后照着买;

ContractedBlock.gif ExpandedBlockStart.gif

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. ll n,a,b;
  5. int main(){
  6. ios::sync_with_stdio(false);
  7. int T;
  8. cin>>T;
  9. while(T--){
  10. cin>>n>>a>>b;
  11. if(a*2<=b){
  12. cout<<n*a<<endl;
  13. }
  14. else{
  15. ll ans=0;
  16. ans+=n/2*b;
  17. if(n%2){
  18. ans+=a;
  19. }
  20. cout<<ans<<endl;
  21. }
  22. }
  23. return 0;
  24. }

转载于:https://www.cnblogs.com/lin1874/p/11564880.html

发表评论

表情:
评论列表 (有 0 条评论,63人围观)

还没有评论,来说两句吧...

相关阅读

    相关 努力贬值?

    朋友小王时常吐槽,说自己平时工作从不迟到,工作饱和。加班累成狗,996甚至007都不在话下。 可是每次的绩效考核却只得了个B,更别说升职加薪了。 今年公司效益不好,要

    相关 好还是好?

    内存越大越好吗?PCI66一定好吗?1的……让你玩得更好其实,根据应用需求的不同搭配合适的内存才是最好注:本文所指内存均为SDRAM。内存价格的直线下降,使得个人用户配置大容量

    相关 长大,幸运

    飘过了大半个2015,在这个秋天停下脚步,看看一路风景,岂不是最美好的事情. ![Center][] 项目经验: 1. \\收费系统 自工作以来