首页 > 编程语言 >2024“钉耙编程”中国大学生算法设计超级联赛(1)结题报告1 2 8

2024“钉耙编程”中国大学生算法设计超级联赛(1)结题报告1 2 8

时间:2024-07-20 19:51:08浏览次数:8  
标签:钉耙 结题 hash int len 2024 ans dp define

1001
循环位移
字符串哈希
将a展开*2
对于每个长度为len_a的序列
进行一次hash存储
并将其插入set中
对于b进行一次哈希
对于每个长度为len_a的连续子串进行一次查询

点击查看代码
#include<bits/stdc++.h>
using namespace std;
// 22222
const int N = 5e6 + 10;
const int p1 = 1e9 + 7, base1 = 13331;
const int p2 = 998244353, base2 = 100153;

int n, m;
int ha1[N], ha2[N], hb1[N], hb2[N];
int c1[N], c2[N];

// 计算哈希函数
void compute_hashes(const string& str, int len) {
    c1[0] = c2[0] = 1;
    for (int i = 1; i <= len; i++) {
        c1[i] = (1LL * c1[i - 1] * base1) % p1;
        c2[i] = (1LL * c2[i - 1] * base2) % p2;
    }

    ha1[0] = ha2[0] = 0;
    for (int i = 1; i <= len; i++) {
        ha1[i] = (1LL * ha1[i - 1] * base1 + (str[i - 1] - 'A' + 1)) % p1;
        ha2[i] = (1LL * ha2[i - 1] * base2 + (str[i - 1] - 'A' + 1)) % p2;
    }
}

// 获取字符串 l 到 r 的哈希值
pair<int, int> get_hash(int l, int r) {
    int hash_value1 = (ha1[r] - 1LL * ha1[l - 1] * c1[r - l + 1] % p1 + p1) % p1;
    int hash_value2 = (ha2[r] - 1LL * ha2[l - 1] * c2[r - l + 1] % p2 + p2) % p2;
    return { hash_value1, hash_value2 };
}

void solve() {
    string a, b;
    cin >> a >> b;
    int len_a = a.size();
    int len_b = b.size();

    string a_twice = a + a;
    compute_hashes(a_twice, len_a * 2);

    set<pair<int, int>> hash_set;
    for (int i = 0; i < len_a; i++) {
        hash_set.insert(get_hash(i + 1, i + len_a));
    }

    compute_hashes(b, len_b);
    int ans = 0;
    for (int i = 0; i + len_a <= len_b; i++) {
        auto hash_b = get_hash(i + 1, i + len_a);
        if (hash_set.count(hash_b)) {
            ans++;
        }
    }
    cout << ans << endl;
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cout << fixed << setprecision(20);
    int _ = 1;
    cin >> _;
    while (_--) {
        solve();
    }
}

1002星星 简单dp
点击查看代码
#include<bits/stdc++.h>
#define int long long
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pb push_back
#define pii pair<int,int>
using namespace std;
const int mod=998244353;
int gcd(int a,int b){return b?gcd(b,a%b):a;};
int qpw(int a,int b){int ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
int inv(int x){return qpw(x,mod-2);}
void solve(){
    int n,k;cin>>n>>k;
    vector<int>a(n+1),b(n+1),c(n+1),d(n+1);
    for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>c[i]>>d[i];
    vector<int>dp(k+1,1e18);
    dp[0]=0;
    for(int i=1;i<=n;i++){
        for(int j=min(i*4,k);j>=0;j--){
            if(j>=4)dp[j]=min(dp[j-4]+d[i],dp[j]);
            if(j>=3)dp[j]=min(dp[j-3]+c[i],dp[j]);
            if(j>=2)dp[j]=min(dp[j-2]+b[i],dp[j]);
            if(j>=1)dp[j]=min(dp[j-1]+a[i],dp[j]);
        }
    }
    cout<<dp[k]<<'\n';
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
    int _=1;
    cin>>_;
    while(_--)solve();
}

1008 按位计算答案相乘即可
点击查看代码
#include<bits/stdc++.h>
#define int long long
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pb push_back
#define pii pair<int,int>
using namespace std;
const int mod=998244353;
int gcd(int a,int b){return b?gcd(b,a%b):a;};
int qpw(int a,int b){int ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
int inv(int x){return qpw(x,mod-2);}
const int N=4e4+10;
int dp[N];
int ndp[N],sum[N];
int n,k;
void init(){
    for(int i=0;i<(1<<k);i++){
        ndp[i]=dp[i];
        dp[i]=0;
    };
}
void solve(){
    int ans=0;
    cin>>n>>k;
    int nw=1ll;
    for(int i=0;i<k;i++){
        int res=0;
        for(int a=0;a<2;a++){
            for(int b=0;b<2;b++){
                for(int c=0;c<2;c++){
                    for(int d=0;d<2;d++){
                        if((((a&b)^c)|d)==(n>>i&1))res++;
                    }
                }
            }
        }
        nw*=res;
    }
    cout<<nw<<'\n';
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
    int _=1;
    cin>>_;
    while(_--)solve();
}

标签:钉耙,结题,hash,int,len,2024,ans,dp,define
From: https://www.cnblogs.com/archer233/p/18313670

相关文章

  • 2024牛客暑期多校训练营2 解题报告
    B-MST对于整个序列进行一次kruskal对于序列中如果需要访问的点数小于300那么将所有的点的边存入序列中进行kruskal如果大于300那么直接对于所有的点进行kruskal点击查看代码#include<bits/stdc++.h>#defineintlonglong#defineall(x)x.begin(),x.end()#defineral......
  • 国开大学2024《企业法律实务(省开课)》
    5.当事人互负债务,没有先后履行顺序的,应当()A.同时履行B.法院判决C.去法院起诉D.申请仲裁答案:A6.商务谈判法律实务是指企业法务人员在民商事谈判活动中运用()知识,按照商业规则,促成商业交易成就或阻止商业交易成就的行为活动。A.法律   B.商业C.专业D.谈判答案:A7.根据......
  • 2024年IDEA&IntelliJ系列最新激活码(2088)!
    蛋疼ing,仅供学习使用。K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2U......
  • 2024年 Intellij IDEA | idea&IDEA系列激活码(持续更新)
       声明:仅供学习使用:K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc......
  • 2024年Intellij IDEA&& idea系列激活码(持续更新)
    声明:仅供学习使用声明:仅供学习使用:K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudF......
  • NOID2024 游记
    流水账。Day-13中考7.2考完,7.4就被gj叫过来集训了。和同学讨论了一下,发现自己语文作文很可能会偏题,很可能考不上JellyFish中学。Day-12背笔试,比较简单,很快就背完了。mx这几天每天都有模拟赛,比较累。Day-6丢失了一场模拟赛。中午去吃饭去晚了,被迫吃屎。Day-4......
  • ACL 2024 | 对25个开闭源模型数学评测,GPT-3.5-Turbo才勉强及格
    大型语言模型(LLMs)在解决问题方面的非凡能力日益显现。最近,一个值得关注的现象是,这些模型在多项数学推理的基准测试中获得了惊人的成绩。以GPT-4为例,在高难度小学应用题测试集GSM8K[1]中表现优异,准确率高达90%以上。同时,许多开源模型也展现出了不俗的实力,准确率超过80%......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(1)
    发挥相当差,最好笑的是1h没写出一个三维偏序、30min没写出一个字符串哈希。甚至1h没意识到组合数式子推错了。A我写了点阴间东西。假设模式串为ABC,考虑一个形如ABCABCABC的东西,如果长度是\(x\),会贡献\(x-n+1\)个子串。枚举\(i\),从\(i\)把\(T\)分成两部分,一部分......
  • 2024牛客暑期多校训练营2 HI
    2024牛客暑期多校训练营2H.InstructionsSubstring题意:有一个字符串序列,有WSAD四种操作,可以上下左右移动。可以选取一段连续的子序列,从(0,0)出发,经过连续子序列操作后可以经过点(x,y),问这样的子序列有多少个思路:若一个子序列能够实现到达点(x,y),那么在这个子序列后面加任意字符都......
  • 2024 暑假友谊赛 2
    B.TilingChallenge1.我的方法是按顺序遍历,遇到'.'时就检查一下它的上下左右是不是都是点,如果都是点的话,标记这个点,把这个点和他上下左右都标记为‘?’,但是要加一个条件,如果‘.’的个数不是5的倍数就不符合题意,不加这个会wa37,我也不知道为什么#include<bits/stdc++.h>#defin......