Day 13

题目描述

题目分析

大模拟,用栈储存每一个多项式,最后根据导数的加法原则依次求导相加,注意取模。

C++代码

#pragma GCC optimize(3, "Ofast", "inline")
#include <bits/stdc++.h>
#define int long long using namespace std;
const int N = 100010, MOD = 1e9 + 7;
string oper;
int n, m;
stack<vector<pair<map<string, int>, int>>> heap;
map<string, int> num;
map<string, int> p; bool is_num(string x)
{
for (auto s : x)
if (!isdigit(s) && s != '-')
return false;
return true;
} int qmi(int a, int b)
{
int res = 1;
while (b)
{
if (b & 1)
res = res * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return res % MOD;
} int to_num(string x)
{
int res = 0, flag = 1;
for (auto s : x)
{
if (s == '-')
flag = -1;
else
res = res * 10 + s - '0';
}
return res * flag;
} void calc(string op)
{
auto a = heap.top();
heap.pop();
auto b = heap.top();
heap.pop(); if (op == "+")
{
for (auto it : b)
a.push_back(it);
heap.push(a);
}
else if (op == "-")
{
for (auto it : a)
b.push_back({it.first, -1ll * it.second});
heap.push(b);
}
else
{
vector<pair<map<string, int>, int>> t;
for (auto itb : b)
{
for (auto ita : a)
{
pair<map<string, int>, int> tmp;
for (auto [k, v] : itb.first)
{
tmp.first[k] = itb.first[k] + ita.first[k];
}
tmp.second = ita.second * itb.second % MOD;
t.push_back(tmp);
}
}
heap.push(t);
}
} signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m; for (int i = 1; i <= n; i++)
{
string s = "x" + to_string(i);
p[s] = 0;
} getline(cin, oper);
getline(cin, oper); for (int i = 0; i < oper.size(); i++)
{
string x = "";
while (oper[i] != ' ' && i < oper.size())
x += oper[i++]; if (x == "+" || x == "-" || x == "*")
calc(x);
else if (is_num(x))
{
vector<pair<map<string, int>, int>> c;
c.push_back({p, to_num(x)});
heap.push(c);
}
else
{
auto t = p;
t[x]++;
vector<pair<map<string, int>, int>> c;
c.push_back({t, 1});
heap.push(c);
}
} // auto t = heap.top();
// for (auto [y, c] : t)
// {
// for (auto [k, v] : y)
// cerr << k << ' ' << v << endl;
// cerr << "c " << c << '\n';
// } while (m--)
{
int id;
cin >> id;
string x = "x" + to_string(id);
for (int i = 1; i <= n; i++)
{
string x2 = "x" + to_string(i);
int number;
cin >> number;
num[x2] = number;
} // for (auto [y, c] : num)
// {
// cerr << y << ' ' << c << '\n';
// } int res = 0; for (auto t : heap.top())
{
auto it = t.first;
int c = t.second;
if (c == 0)
continue;
int k = c;
for (auto y : it)
{
string w = y.first;
int mi = y.second;
// cout << w << ' ' << num[w] << ' ' << mi << '\n';
if (x == w)
{
if (mi == 0)
{
k = 0ll;
break;
}
else
{
k = k * qmi(num[w], mi - 1) % MOD;
k = k * mi % MOD;
}
}
else
{
k = k * qmi(num[w], mi) % MOD;
}
// cout << k << '\n';
}
res = (res + k) % MOD;
}
cout << (res % MOD + MOD) % MOD << '\n';
} return 0;
}

Day13 备战CCF-CSP练习的更多相关文章

  1. CCF CSP 认证

    参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...

  2. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  3. CCF CSP 201703-3 Markdown

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...

  4. CCF CSP 201703

    CCF CSP 2017·03 做了一段时间的CCF CSP试题,个人感觉是这样分布的 A.B题基本纯暴力可满分 B题留心数据范围 C题是个大模拟,留心即可 D题更倾向于图论?(个人做到的D题基本都是 ...

  5. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  6. CCF CSP 201609-3 炉石传说

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...

  7. CCF CSP 201403-3 命令行选项

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

  8. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

  9. CCF CSP 201409-3 字符串匹配

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...

  10. CCF CSP 201503-3 节日

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...

随机推荐

  1. JIT 编译后的代码存储位置

    JIT 编译后的代码存储位置 1. 存储位置 JIT 编译后的本地机器代码被存储在 JVM 的 Code Cache(代码缓存区)中. Code Cache 是 JVM 内存的一部分,用于保存 JIT ...

  2. NPOI,给指定的excle创建个下拉框验证

    NPOI,给指定的excle创建个下拉框验证 先大致看下效果吧 Nuget  搜索 NPOI,一般出来的第一个就是,安装NPOI基础环境 1 using NPOI.HSSF.UserModel; 2 ...

  3. 支持命令行输入中文(例如redis-cli输入中文)

    修改 cmd 控制台默认代码页编码的几种方法[GBK.UTF-8]_FKNIGHT 的博客-CSDN博客_修改cmd编码 1.进入redis-cli.exe所在文件夹 2.在路径栏输入cmd回车 3. ...

  4. Docker开启远程守护进程访问

    默认情况下,Docker守护进程监听Unix套接字上的连接,以接受来自本地客户端的请求.通过将Docker配置为侦听IP地址和端口以及Unix套接字,可以允许Docker接受来自远程主机的请求.有关此 ...

  5. 导入别人的android studio项目

    在导入别人的android studio项目(假设为项目A)时,会遇到gradle不一致的情况,以下简短介绍解决方法: 1. 打开要导入的项目的目录,删除下图红框中的文件. 2. 找到自己以前在自己的 ...

  6. Excel 拼接为 SQL 并打包 exe

    关于 Excel 拼接 sql 这个操作, 我已经整过好几篇了, 当然在工作中也是蛮常用的, 今天主要是来写个终篇, 彻底结束它, 然后将代码进行打包为 exe 这样的桌面小软件, 除了自己用, 也可 ...

  7. 测试人员在 Scrum 中的角色是什么?

    测试人员在Scrum团队中到底担任什么样的角色?Scrum团队有测试角色吗?测试人员是Scrum团队的正式成员吗? 一.<Scrum指南>对测试的看法 很多人认为Scrum团队中的三个角色 ...

  8. 综述论文解读:Editing Large Language Models: Problems, Methods, and Opportunities

      本文为大语言模型知识编辑综述,发表于自然语言处理顶会ACL(原文链接).由于目前存在广泛的模型编辑技术,但一个统一全面的分析评估方法,所以本文:   1.对LLM的编辑方法进行了详尽.公平的实证分 ...

  9. freeswitch使用hiredis的limit功能

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 之前写过一篇关于limit的文章"freeswwitch通过limit限制cps",主要是介绍了limit的ha ...

  10. 一周 Star 破万的开源项目「GitHub 热点速览」

    上周的苹果全球开发者大会(WWDC25),万众期待的 AI 加持版 Siri 跳票了,让不少开发者略感失望.然而"东边不亮西边亮",开源社区迎来了重磅级开源项目 container ...