首页 > 其他分享 >2023 ICPC 南京 CG

2023 ICPC 南京 CG

时间:2023-11-27 22:46:59浏览次数:41  
标签:le const int nullptr ll CG cin ICPC 2023

The 2023 ICPC Asia Nanjing Regional Contest CG

C. Primitive Root

题意:问你满足:\(g\le m\)并且\(g⊕(p-1)≡1(\bmod p)\)的\(g\)有多少个?

思路:我们知道异或的性质:\(a-b\le a⊕b \le a+b\)

由于\(g⊕(p-1)≡1(\bmod p)\),即\(g⊕(p-1) = kp+1\)

那么\(g = (kp+1)⊕(p-1)\)

根据上述性质:\(a-b\le a⊕b \le a+b\),则有:\((kp+1)-(p-1)\le g \le (kp+1)+(p-1)\)

即:\(p(k-1)+2\le g \le p(k+1)\)

又因为\(g\le m\),那么我们知道:

  • 对于任意\(p(k+1)\le m\)即\(k\le \lfloor m/p\rfloor-1\)都是满足条件的。(最大的都比m小了,那肯定是满足的了),这里有\(m/p\)个 \((0~(m/p-1))\)
  • 对于任意\(p(k-1)+2>m\)即\(k>\lceil(m-2)/p\rceil+1\)都是不合法的。(最小的都比m大了)
  • 对于\(k\in[\lfloor m/p\rfloor-1+1,\lceil(m-2)/p\rceil+1]\)是不确定是,需要手动判断。
// AC one more times
// nndbk
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
    ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    int t; cin>>t;
    while(t--)
    {
        ll p,m; cin>>p>>m;
        ll l = m/p-1+1,r = (m-2)/p+((m-2)%p!=0)+1;
        ll cnt = m/p;
        
        for(ll k = l;k <= r; k++)
            if(((k*p+1)^(p-1))<=m)cnt++;
        cout<<cnt<<"\n";
    }
    return 0;
}

G. Knapsack

题意:给你\(n\)个物品,每个物品有相对应的价格\(w\)和价值\(v\)。你有\(W\)元和\(k\)次免费机会,并且每种物品只能买一次,问你最大价值。

思路:一开始想法的先做\(01\)背包,然后贪心。不好写,而且复杂度很大。那么怎么去考虑呢?

我们注意到两个事情:

  • 如果有两个物品\(a,b\),其中\(a\)选择免费,而\(b\)选择花钱。那么一定有\(w[a]\ge w[b]\)
  • 如果有两个物品\(a,b\),其中\(a\)选择免费,而\(b\)不选择。那么一定有\(v[a]\ge v[b]\)

那么我们发现一个事情:一定存在一个分界点\(M\),使得\(i\le M\)的\(val\)的前\(k\)大选择去免费。

我们按照\(w\)排序。先预处理出前\(i\)的物品的\(val\)前\(k\)大。然后正常去\(01\)背包(倒着做,因为是后缀),注意记录二维,因为后面要用。最后算答案就行了。

// AC one more times
// nndbk
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 5e3 + 10;

struct node
{
    ll w,v;
}a[N];

bool cmp(node a,node b)
{
    return a.w > b.w;
}
ll sum[N],f[5010][10010],pre[N];
int main()
{
    ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    
    int n,W,k; cin>>n>>W>>k;
    for(int i = 1;i <= n; i++)
    {
        ll w,v; cin>>w>>v;
        a[i].w = w,a[i].v = v;
    }

    sort(a+1,a+1+n,cmp);
    multiset<int>s;
    for(int i = 1;i <= n; i++)
    {
        int val = a[i].v;
        if(s.size()<k)
        {
            s.insert(val);
            pre[i] = pre[i-1] + val;
        }
        else if(s.size()==k && k != 0){
            int t = *s.begin();
            if(t < val)
            {
                s.erase(s.begin());
                s.insert(val);
                pre[i] = pre[i-1] - t + val;
            }
            else pre[i] = pre[i-1];
        }
    }
    
    ll ans = 0;
    for(int i = n;i >= 1; i--)
    {
        for(int j = 0;j <= W; j++)
        {
            f[n-i+1][j] = f[n-i][j];
            if(j>=a[i].w)
                f[n-i+1][j] = max(f[n-i+1][j],f[n-i][j-a[i].w]+a[i].v);
        }
    }
    
    for(int j = k;j <= n; j++)
    {
        ans = max(ans,f[n-j][W]+pre[j]);
    }

    cout<<ans<<"\n";
    return 0;
}

标签:le,const,int,nullptr,ll,CG,cin,ICPC,2023
From: https://www.cnblogs.com/nannandbk/p/17860732.html

相关文章

  • NOIP2023 双序列拓展
    洛谷传送门首先\(x_1=y_1\)显然不合法。若\(x_1>y_1\)就把\(x,y\)全部取相反数,这样就只用考虑\(x_1<y_1\)的情况了。然后考虑一个\(O(nmq)\)的dp,设\(f_{i,j}\)为拓展\(X\)的前\(i\)个元素和\(Y\)的前\(j\)个元素是否可行。那么若\(x_i<y_j\)则......
  • 2023/11/26 星期日 每日总结 Day10
    今日份的英语:晚上睡觉前看看吧今日份的算法:没太有思路,第一想到的是暴力解法,却忽略了数学在算法思想中的重要性。当暴力解法的时间复杂度过高时,可以使用数学的思想转化一下,得出一个结论或者公式,这样就便于代码的编写。今日份的SQL今日份的八股今日份的锻炼:今日份的阅读今日......
  • 2023.11.27——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.javaGUI2.百度翻译SDK明日计划:学习......
  • NOIP2023 游记
    Day0打摆。打摆。打摆。看tarjan。打摆。打摆。打摆。Day1早上很早到了附中,发现准考证上没有照片,黑糊糊一片,被教练强行紧急更换了一个,感觉不换其实也没什么关系。进考场,发现在最后一排,旁边不认识,前面不认识,前面的旁边不认识,sad。然后发密码,开T1,发现会了,15min写完......
  • 2023-11-27 记录react拖拽组件——react-draggable试用方法
    安装:yarnaddreact-draggable注:如果你用npm安装失败可以尝试使用yarm,我就是npmi react-draggable报错了,用yarn装才好普通使用://引入importDraggablefrom'react-draggable';constDraggableCore:any=Draggable;//使用<div><DraggableCore><div>666&l......
  • 2023-2024-1 20232301《网络》第4周总结
    教材学习内容总结教材学习中的问题和解决过程问题1:没有明白安全生态系统和自然生态系统的联系问题1解决方案:询问chatgpt,其给出了详细的回答,如下:安全生态系统(CybersecurityEcosystem)和自然生态系统(NaturalEcosystem)之间的联系主要体现在借鉴自然生态系统的原则和概念,以加强......
  • 20231117上机编程[高可靠在线视频]
    某电信公司推出高可靠的在线视频业务。为了保证可靠性,公司针对不同视频类型,准备了不同的专用网络通道,并对指定视频类型服务进行通道分配。一个用户在一个时段只能使用一个视频服务,可以多次申请。请实现以下功能:VideoService(int[]channels,int[]charge) :初始化系统channel......
  • P9447 [ICPC2021 WF] Spider Walk 题解
    更好的阅读体验很有意思的一道题。设\(f_i\)表示第\(i\)根线的答案,首先有一个关键结论:任意两根相邻的线答案只差一定小于\(1\)。原因显然,可以在无限远的地方加一根线来构造。该结论可以扩展一下,对于距离为\(d\)的两根线,答案之差不会超过\(d\)。考虑进行倒着加线,考虑加......
  • [HZNUCTF 2023 final]虽然他送了我玫瑰花
    打开界面看到爆红的代码 浏览整个代码没有发现明显的call指令爆红,那就只能慢慢看了发现一个地方出现永真跳转代码  这里的话直接给他nop掉就好了然后在上面选中mian函数p键就好了 另外想讲一下的点是这几个函数都是可以分析的 键入函数 F5变为伪代码 ......
  • 零数科技应用入选2023全球数商大会数据要素典型应用场景优秀案例
    11月25-26日,2023全球数商大会在上海召开。本届大会以“数联全球、商通未来”为主题,上海市委副书记、市长龚正出席大会并宣布大会开幕,国家发展改革委党组成员,国家数据局党组书记、局长刘烈宏,上海市副市长陈杰致辞。2023数据交易节于11月25日同期举办,并颁布年度数据要素典型应用场景......