6.29模拟赛 (T1:李时珍的皮肤衣 T2:马大嘴的废话 T3:SSY的队列 T4:清理牛棚);
啊,又是考炸的一天,成功的退步了三名,啊,成共的看错了T1 的题意 ,水了80分。

第十五名就是我,额,已经有点倒数的感觉了,并且一道题都没AC 我太难了。
好了,废话不多说了,下面正式提接:

这到题呵呵,很水吧,不想多说,自己找规律吧,直接吧代码给你们:(不要问我为什么写挂了,(没看清提))
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n;
ll Pow(ll a,ll b){
ll ans = 1;
ll base = a;
while(b){
if((b & 1) !=0){
ans = (ans*base)%n;
}
base = (base*base)%n;
b>>=1;
}
return ans;
}
int main(){
std::ios::sync_with_stdio(false); cin>>n;
ll ans = Pow(2,n-1);
ll jl = (ans+1)%n;
cout<<jl<<endl;
}

这道题就很有意思了,显然的暴力60pts
但是正解真么办呢?
如果学过AC自动机的很快就会发现就是一个板子,但是我没学过呀,怎么办?
那么我们就要把tire树请上场了,如果不懂的话给你推荐个博客。链接
然后显然的你已经懂了,直接看代码吧:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=5e5+10;
int tire[maxn][26],mark[maxn][26],cnt[maxn][26];
int n,m;
int tot=0;
char s[30];
char a[30];
void insert(int l,int r,int id){//id :防止反复插入
int now=0;
int t;
for(int i=l;i<=r;i++){
t=s[i]-'a';
if(tire[now][t]){
if(id!=mark[now][t]){
cnt[now][t]++;
mark[now][t]=id;
}
}
else {
tire[now][t]=++tot;
mark[now][t]=id;
cnt[now][t]=1;
}
now=tire[now][t];
}
}
int query(char a[]){
int len=strlen(a);
int now=0,ans=0;
for(int i=0;i<len;i++){
int t=a[i]-'a';
if(tire[now][t]==0)return 0;
ans=cnt[now][t];
now=tire[now][t];
}
return ans;
}
int main(){
//freopen("a.in","r",stdin);
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
int len=strlen(s);
for(int j=0;j<len;j++){//插入方式,把它的子串加进去
insert(j,len-1,i);
}
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>a;
cout<<query(a)<<'\n';//直接查寻走人
}
return 0;
}
OK ,

啊,一看这题就知道不再我能力范围内,但是一看数据范围,用状压DP 可以水70分。
正解是 hash 但是我不会,所以我把Dp的代码献给你们吧!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int Mod,n,a[50];ll M=1234567891,dp[1<<22][31];
int main(){
scanf("%d",&n);for(int i=1;i<=n;++i) scanf("%d",&a[i]);
scanf("%d",&Mod);int ed=(1<<n)-1;
for(int i=1;i<=n;++i) dp[1<<(i-1)][i]=1;
for(int j=0;j<=ed;++j)
for(int i=1;i<=n;++i)
for(int k=1;k<=n;++k){
if((i==k)||(!(j & (1<<(k-1))))||(j & (1<<(i-1)))||(abs(a[k]-a[i])%Mod==0)) continue;
dp[j|(1<<(i-1))][i]=(dp[j|(1<<(i-1))][i]+dp[j][k]) % M;
}
ll ans=0;for(int i=1;i<=n;++i) ans=(ans+dp[ed][i])%M;
printf("%lld\n",ans);
return 0;
}
代码很短,重构代码过的。

这题一看,首想区间DP 复杂度 O(n^3)只能拿 20 分。
然后想到了线性DP O(n^2)。
然后居然水过了。(数据太水了);
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1e4+5,M=1e6+5;
int n, s, t;
struct node {
int l, r, w;
} e[N];
bool cmp ( node a, node b){
if(a.l == b.l) return a.r < b.r;
else return a.l < b.l;
}
int f[M];
int main(){
//freopen ("a.in", "r", stdin);
std::ios::sync_with_stdio( false );
std::cin.tie( 0 );
cin>> n >> s >> t;
for(int i = 1; i <= n; i++){
cin>> e[i].l >> e[i].r >> e[i].w;
}
sort( e+1, e+n+1 , cmp);
memset( f, 0x3f, sizeof(f));
f[s] = 0;
int ans = 0x3f3f3f3f;
for ( int i = 1; i <= n; i++){
for (int j = e[i].l-1; j < e[i].r; j++){
f[e[i].r] = min( f[e[i].r], f[j] + e[i].w);
}
if ( e[i].l <= t && e[i].r >= t)ans = min(ans, f[e[i].r]);
}
if (ans == 0x3f3f3f3f ) cout << -1 ;
else cout << ans;
return 0;
}
然后正解有线段树优化DP 单调栈优化DP
但是有一种最短路算法。
直接上代码:
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const int maxn=10005*10*3;
int n;
struct edge{
int to,next,w;
}e[maxn];int head[maxn],cnt=0;
void add(int x,int y,int z){
e[++cnt].to=y;e[cnt].next=head[x];e[cnt].w=z;head[x]=cnt;
}
struct node{
int num;
long long dis;
node(){}
node(int a,ll b){
num=a;dis=b;
}
bool operator < (const node &a)const{
return a.dis<dis;
}
};
long long dis[maxn];int vis[maxn];
void Dij(int s){
memset(dis,0x3f,sizeof(dis));
std::priority_queue<node> q;
dis[s]=0;
q.push(node(s,0));
while(!q.empty()){
node t=q.top();int u=t.num;
if(vis[u]){
q.pop(); continue;
}
q.pop();vis[u]=1;
for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
if(dis[v]>dis[u]+e[i].w) {
dis[v]=dis[u]+e[i].w;
q.push(node(v,dis[v]));
}
}
}
}
int main(){
//freopen("a.in","r",stdin);
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int s,t;
cin>>n>>s>>t;
for(int i=s;i<t;i++){
add(i+1,i,0);
}
for(int i=1;i<=n;i++){
int x,y,z;cin>>x>>y>>z;
add(x,y+1,z);
}
Dij(s);
printf("%lld",dis[t+1]==0x3f3f3f3f3f3f3f3f?-1:dis[t+1]);
return 0;
}
6.29模拟赛 (T1:李时珍的皮肤衣 T2:马大嘴的废话 T3:SSY的队列 T4:清理牛棚);的更多相关文章
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- 20180610模拟赛T1——脱离地牢
Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...
- 20161007 NOIP 模拟赛 T1 解题报告
排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...
- NOIP欢乐模拟赛 T1 解题报告
小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...
- [模拟赛] T1 高级打字机
Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...
- 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物
T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...
- [NOIP2018校模拟赛]T1 阶乘
题目: 描述 有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值. 输入 共两行. 第一行一个正整数n. 第二行n个正整数a[i]. 输出 共 ...
- [NOIP2018校模拟赛]T1聚会 party
题目链接: 聚会 分析: 设每个点到1号点的距离为dist_{i},每个点的权值为x_{i},目标点到1号点的距离为dist,权值为x,那么对于每一次查询,我们讨论三种情况: ① 目标家庭在区间左边( ...
- 【2019.8.15 慈溪模拟赛 T1】插头(plugin)(二分+贪心)
二分 首先,可以发现,最后的答案显然满足可二分性,因此我们可以二分答案. 然后,我们只要贪心,就可以验证了. 贪心 不难发现,肯定会优先选择能提供更多插座的排插,且在确定充电器个数的情况下,肯定选择能 ...
随机推荐
- 【CSS】滚动条样式
/*定义滚动条宽高及背景,宽高分别对应横竖滚动条的尺寸*/ .scrollbar::-webkit-scrollbar{ width: 16px; height: 16px; background-c ...
- 洛谷P1255 数楼梯
题目描述 楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶. 编一个程序,计算共有多少种不同的走法. 分析与代码 走n阶楼梯,无论是走一次走1阶还是2阶,总得迈出一步, 所以求n阶楼梯 ...
- 重学 Java 设计模式:实战组合模式(营销差异化人群发券,决策树引擎搭建场景)
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 小朋友才做选择题,成年人我都要 头几年只要群里一问我该学哪个开发语言,哪个语言最好. ...
- 实战记录之SQL server报错手工注入
前言 最近测试了一个站点,这个站点挺有意思,发现没有关闭错误提示,初步猜测是SQL server数据库,后来验证确实是.在这里记录一下实战过程,并详细讲解一下用到的知识点. SQL server报错注 ...
- vue2.0+Element UI 实现动态表单(点击按钮增删一排输入框)
对于动态增减表单项,Element UI 官方文档表单那一节已经介绍得很清楚了,我之前没有看见,绕了很多弯路,这里针对点击按钮增删一排输入框的问题做一个总结. 效果图如下 存在一排必填的姓名与手机号, ...
- Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python惯用法
目录 1. 不要使用可变类型作为参数的默认值 1. 不要使用可变类型作为参数的默认值 摘自<流畅的Python>8.4.1 class HauntedBus: ""&q ...
- PHP丨PHP基础知识之流程控制WHILE循环「理论篇」
昨天讲完FOR循环今天来讲讲他的兄弟WHILE循环!进入正题: while是计算机的一种基本循环模式.当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环.while语句的一般表达式为:whil ...
- 龙芯团队完成CoreCLR MIPS64移植,在github开源
国产龙芯的软件生态之中.NET不会缺席,毕竟 C# 与 .NetCore/Mono 也是全球几大主流的编程语言和运行平台之一,最近一段时间听到太多的鼓吹政务领域不支持.NET, 大家都明白这是某些人为 ...
- Appium查看应用包名
方式一没有apk 如果应用已经安装在手机上了(例如应用商城下载).可以直接打开手机上该应用, 进入到要操作的界面然后执行: adb shell dumpsys activity recents | f ...