• 2022/8/6


    活动地址:CSDN21天学习挑战赛

    1690E - Price Maximization

    先把除以k的整数部分都加上,最后再利用双指针两两配对就行

    1. #include
    2. using namespace std;
    3. #define ll long long
    4. const ll mod=998244353;
    5. const int N = 2e5+5;
    6. ll t,n,k,a[200005],b[200005];
    7. int main(){
    8. scanf("%lld",&t);
    9. while(t--){
    10. scanf("%lld%lld",&n,&k);
    11. ll ans=0;
    12. for(int i=1;i<=n;i++){
    13. scanf("%lld",&a[i]);
    14. ans+=a[i]/k;
    15. b[i]=a[i]%k;
    16. }
    17. sort(b+1,b+n+1);
    18. ll l=1,r=n;
    19. while(l
    20. if(b[l]+b[r]>=k){ans++;l++;r--;}
    21. else l++;
    22. }
    23. printf("%lld\n",ans);
    24. }
    25. system("pause");
    26. return 0;
    27. }

    J-Number Game_"蔚来杯"2022牛客暑期多校训练营6 (nowcoder.com)

    到最后才真正的理解了这道题,推出了式子,但最后化简的时候把第一个式子给化错了,,,

    可以发现B是只有两种取值情况的:B,A-B,然后操作的过程可以看成从这两种情况中选一个减去C这个整体的值,注意这时候的C可能不是原来的C了,可能是多次操作后的C,我们可以发现选了B这个值之后再去选B是没有意义的,他会和上一次抵消掉,也就是说选B的值一定是B,A-B这样交错着来,那我们就可以总结出情况来了:

    B先开头,A-B结尾一共操作了2n次:n(A-B)-nB+C=x

    B先开头,B结尾,一共操作了2n+1次:(n+1)B-n(A-B)-C=x;

    A-B先开头,A-B结尾一共操作2n次:nB-n(A-B)+C=x;

    A-B先开头,B结尾一共操作2n+1次:(n+1)(A-B)-nB-C=x;

    如果操作了奇数次C就是负数,否则就是偶数,然后判断是否有一种成立就可以了

    1. #include
    2. using namespace std;
    3. #define ll long long
    4. const ll mod=998244353;
    5. const int N = 2e5+5;
    6. ll t,a,b,c,n;
    7. int main(){
    8. scanf("%lld",&t);
    9. while(t--){
    10. scanf("%lld%lld%lld%lld",&a,&b,&c,&n);
    11. if(a-b==b){
    12. if(b-c==n||c==n) printf("Yes\n");
    13. else printf("No\n");
    14. continue;
    15. }
    16. if(a!=0&&(n-c)%a==0&&(n-c)/a>=0||(2*b!=a)&&((n+c-2*b)%(2*b-a)==0&&(n+c-2*b)/(2*b-a)>=0||(n-c)%(2*b-a)==0&&(n-c)/(2*b-a)>=0||(n+c+2*b-a)%(a-2*b)==0&&(n+c+2*b-a)/(a-2*b)>=0))
    17. printf("Yes\n");
    18. else printf("No\n");
    19. }
    20. system("pause");
    21. return 0;
    22. }

    B-Eezie and Pie_"蔚来杯" 树上差分

    wdnmd,数组越界你告诉我答案错误,但凡你提示我一下re我都不会检查上一个小时!!!

    这题就是树上差分,原来1级祖先可以直接在dfs1里直接预处理出来,,,

    1. #include
    2. using namespace std;
    3. #define ll long long
    4. const ll mod=998244353;
    5. const int N = 2e5+5;
    6. ll n,u,v,d[2000006];
    7. ll head[4000006],cnt;
    8. struct Edge{
    9. ll from,to,next;
    10. }edge[4000006];
    11. void addedge(ll from,ll to){
    12. edge[++cnt].from = from;
    13. edge[cnt].to = to;
    14. edge[cnt].next = head[from];
    15. head[from] = cnt;
    16. }
    17. ll dep[2000006];
    18. ll lg[2000006],f[2000006][30];
    19. void dfs1(ll u,ll fa){
    20. dep[u]=dep[fa]+1;
    21. f[u][0]=fa;
    22. for(int i=1;i<=lg[dep[u]];i++)
    23. f[u][i]=f[f[u][i-1]][i-1];
    24. for(int i=head[u];i;i=edge[i].next){
    25. ll j=edge[i].to;
    26. if(j==fa) continue;
    27. dfs1(j,u);
    28. }
    29. }
    30. ll kthparent(ll u,ll k){
    31. for(int i=lg[dep[u]];i>=0;i--)
    32. if(dep[u]-dep[f[u][i]]<=k) k-=dep[u]-dep[f[u][i]],u=f[u][i];
    33. return u;
    34. }
    35. ll ans[2000006];
    36. void dfs(ll u,ll fa){
    37. ans[u]+=1;
    38. ll kth=kthparent(u,d[u]+1);
    39. //cout<
    40. if(kth) ans[kth]-=1;
    41. for(int i=head[u];i;i=edge[i].next){
    42. ll j=edge[i].to;
    43. if(j==fa) continue;
    44. dfs(j,u);
    45. ans[u]+=ans[j];
    46. }
    47. }
    48. int main(){
    49. lg[0]=-1;
    50. for(int i=1;i<=2000000;i++) lg[i]=lg[i>>1]+1;
    51. scanf("%lld",&n);
    52. for(int i=1;i
    53. ll u,v;
    54. scanf("%lld%lld",&u,&v);
    55. addedge(u,v);
    56. addedge(v,u);
    57. }
    58. for(int i=1;i<=n;i++) scanf("%lld",&d[i]);
    59. dfs1(1,0);
    60. dfs(1,0);
    61. for(int i=1;i<=n;i++) printf("%lld ",ans[i]);
    62. system("pause");
    63. return 0;
    64. }

  • 相关阅读:
    开发QQ官方机器人
    【Linux系统管理】03 Linux 安装 & 04 初学者建议
    适配与视口、分辨率、媒体查询、缩放的学习、消化
    lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
    MySQL、Redis 和 Zookeeper 实现分布式锁方法及优缺点
    【持续集成_06课_Jenkins高级pipeline应用】
    基于FPGA的图像二值化处理,包括tb测试文件和MATLAB辅助验证
    Spark和Hbase环境变量冲突解决办法
    自定义JPA函数扩展,在specification中实现位运算
    PHP 约瑟夫环问题
  • 原文地址:https://blog.csdn.net/weixin_52621204/article/details/126192444