首页 > 其他分享 >winter 2024 day2

winter 2024 day2

时间:2024-01-25 20:55:54浏览次数:36  
标签:typedef const winter idx int day2 2024 序列 ve

2023 中国大学生程序设计竞赛(CCPC)新疆赛区(重现赛

H数学

思路:有四平方和定理知道,任意正整数可表示为不超过四个整数的平方和。

 并且n的范围为1e5,可以枚举出f(x)值为1、2、3、4的平方数组合情况。

也可以dp,f[i]=min(f[i],f[i-k*k]+1)

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=3e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-6;


void solve() {
    int n;
    cin >> n;
    vector<int> f(n + 5, INF);
    vector<int> g;
    for (int i = 1; i * i <= n; ++i)g.push_back(i * i);
    f[0] = 0;
    for (int i = 1; i <= n; ++i) {
        for (int j = 0; j < g.size(); ++j) {
            if (g[j] > i)break;
            f[i] = min(f[i], f[i - g[j]] + 1);
        }
    }
    int ans = 1;
    for (int i = 1; i <= n; ++i)ans = (ans * f[i]) % mod;
    cout << ans;
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
//    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

D在此同步

思路:想的相邻的两个数交换会让逆序对数改变一,那就找一个加一和一个减一的相邻对交换一下总逆序对数就不变,暴力找一遍就可以。后面抗体姐被自己整笑了,直接找个山峰或山谷(三个连续数),然后将其内部后移一位就行

...

 

BSang的奇妙冒险

思路:首先分析式子,因为是要从1到n,对于|i-j|整体看来就是n-1。对于|ai-aj|,这里题目求的是代价最小的方案数,那么很明显最小的代价是|a1-an|,直接一步到终点,因为在1到n的路途中出现山峰或山谷的话,只会增加代价,那么选择的ai应该是不递减或不递增的。问题就转化为求最长不下降子序列(a1<an)或最长不上升子序列(a1>an),翻转下后的求法就是一样的。

 

F任务安排

思路:首先没有序列a的话就是求拓扑排序,首先判断是否为拓扑序;其次,给每个点设置权值,求拓扑序时用优先队列即可。对于设置权值,把序列a按顺序递增给权值1、2、3....。还有一个问题,当序列a中的点,指向不在序列a中的点时可能会导致最后的拓扑序中序列a中的点不连续,那么在序列a中的点里,若其后缀为非序列a中的点,将其后缀的权值设为无穷大,这样就可以在当前拓扑序里已有序列a的点的情况下,优先选择权值小的,也就是在序列a中的点

 

E外接圆

思路:首先要知道的是三点确定圆,那么就来个n3的枚举确定圆,再来来个n的枚举判断剩余点是否在圆上,噢记得先去重了,记录每个点出现次数。还要注意所有点共线的情况,那就是两点确定一圆,找到出现次数最多的两点即可

...抄板子

 G动态二叉树

思路:考虑离线求,由于整个二叉树不会改变,可以先求出最终的二叉树。操作二问的是x右边的节点,其实就是bfs序中x的后继,可以先求出最终二叉树的所有节点对应的bfs序号。再重新依次操作,若是操作一,先找到该节点所在层数,在该层插入该节点的bfs序号,由于bfs序号是有序的,这里可以用set存储,二分找到该节点的后继。

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=5e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
struct E{
    int op,p;
    char c;
};

void solve() {
    int n;
    cin>>n;
    vector<E>ve(n);
    vector<int>L(n+5),R(n+5),id(n+5),to(n+5);
    for(int i=0,idx=2;i<n;++i){
        cin>>ve[i].op;
        if(ve[i].op==1){
            cin>>ve[i].p>>ve[i].c;
            if(ve[i].c=='L')L[ve[i].p]=idx++;
            else R[ve[i].p]=idx++;
        }else{
            cin>>ve[i].p;
        }
    }
    queue<int>q;
    int idx=1;
    q.push(1);
    while(q.size()){
        int c=q.size();
        while(c--){
            int t=q.front();q.pop();
            to[idx]=t,id[t]=idx++;
            if(L[t])q.push(L[t]);
            if(R[t])q.push(R[t]);
        }
    }
    set<int>g[N+5];
    vector<int>d(n+5);
    g[0].insert(1);
    for(int i=0,now=2;i<n;++i){
        if(ve[i].op==1){
            int fd=d[ve[i].p];
            d[now]=fd+1;
            g[d[now]].insert(id[now++]);
        }else{
            auto t=g[d[ve[i].p]].lower_bound(id[ve[i].p]+1);
            int ans=-1;
            if(t!=g[d[ve[i].p]].end())ans=to[*t];
            cout<<ans<<'\n';
        }
    }
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
//    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

J子段和二象性

思路:搞成图来想,(但是还是不懂T^T),,那就要有点和关系,看原数组的前缀和数组,在满足条件的情况下,Si<Si+n,Si<Si-m(因为每n个数和为正,每m个数和为负),那么点就看成是Si,根据大小关系,Si指向Si+n,Si指向Si-m,找到非环的最长的链。

对于n=2、m=3,可以这样构造,从0开始,S0→S2→S4→S1→S3→S0,直到构成了环为止,这时候的最大长度为最大编号减一(不懂)

打表可以发现答案为n+m-gcd(n,m)-1

证明

 

标签:typedef,const,winter,idx,int,day2,2024,序列,ve
From: https://www.cnblogs.com/bible-/p/17983616

相关文章

  • 2024/1/25学习进度笔记
    平方误差代价函数线性回归有一个训练集,我们选择了线性回归,那么要如何选择合适的参量使得我们的预测更为准确呢??我们知道了现有的数据是准确的,那么预测就要以现有的数据为根基,尽量的贴合现有的数据,使得差距最小,怎么衡量这个差距呢???我们把  平均平方和误差为了方便,我们又......
  • 每日一题 2024-1-25
    1.题目(1278)原题链接给你一个下标从0开始的整数数组\(nums\)和一个整数\(k\)。请你用整数形式返回\(nums\)中的特定元素之和,这些特定元素满足:其对应下标的二进制表示中恰存在\(k\)个置位。整数的二进制表示中的1就是这个整数的置位。例如,\(21\)的二进制表示为......
  • 2024年1月Java项目开发指南9:密码加密存储
    提前声明:你不会写这加密算法没关系啊,你会用就行。要求就是:你可以不会写这个加密算法,但是你要知道加密流程,你要会用。@ServicepublicclassPasswordEncryptor{}很好,请在service层中创建一个名字为PasswordEncryptor的服务类,用来负责密码的加密。加密的方法有很多。简单一......
  • 2024年1月Java项目开发指南8:统一数据返回格式
    有时候返回一个字符串,有时候返回一串数字代码,有时候返回一个对象……不过怎么说,我们返回的内容往往具有三个1.消息代码code2.消息内容msg3.数据内容data接下来,我们要编写一个类,通过这个类,实现对所有返回内容进行格式化。先去添加个依赖 <dependency> <groupId>org.p......
  • THUWC & WC 2024 游记
    2024-01-25去重庆,要到宁波赶飞机,早上5:40起床,吃完早饭下楼等ZHY巨佬。ZHY巨佬昨天刚切了第六分块,还拿了个最优解(本来是rk2的,但rk1的用户被封禁了),准备在火车上颓题解。到宁波坐地铁到飞机场,在候机室看ZHY巨佬写题解。马上上飞机了FSB带着一堆初二巨佬过来(LYL,XY......
  • 2024年1月Java项目开发指南7:增删改查与接口测试
    我们之前,是从Controller层写到Service层,然后mapper层。接下来我们反过来,从mapper层写到Controller层两种方式都可以,你喜欢就行,甚至你先写service层也可以,全凭个人喜欢。在本文中,就不解释太多了,直接给出代码,对于关键地方,我会圈出来。如果有问题,可以直接在本文首发地址(博客园......
  • 2024年1月Java项目开发指南6:接口测试
    我们使用APIFox这款工具对接口进行测试。(你要是会其他的例如postman进行测试也行)https://apifox.com/新建一个项目,新增一个接口因为这个接口没有参数,所以无需填写参数,保存然后点击运行没有设置环境记得先去设置环境我们配置开发环境保存然后选择开发环境进行使用......
  • 2024年1月Java项目开发指南5:controller、service、mapper
    准备工作你知道什么是JSON吗?JSON是什么?格式是什么?有什么用?有什么优点?有什么缺点?请自己百度探索一下,对JSON做了个了解,如果你不知道什么是JSON的话,知道就免了,直接下一步吧。开始:项目目录结构先确保你已经创建了上图的那些文件夹。这都是我们需要用到。简单的做个介绍co......
  • 2024年1月Java项目开发指南4:IDEA里配置MYSQL
    提前声明:文章首发博客园(cnblogs.com/mllt)自动“搬家”(同步)到CSDN,如果博客园中文章发生修改是不会同步过去的,所以建议大家到我的博客园中查看前提条件:1.你已经设计好了数据库,并成功创建了数据库。2.你的springboot项目中已经配置好了MySQL的连接。填写好信息后点测试连......
  • 20240125打卡——《构建之法》读书笔记第1~4章
    第一章概论在这一章中,作者为我们介绍了一些关于软件工程的基本知识。①软件=程序+软件工程:正是因为对软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容的完成,才能完成把整个程序转化成为一个可用的软件的过程。扩展的推论:软件企业=软件+商业模式......