传送门:

Problem A

温暖的签到题,用个map记录一下就行了。

#include <bits/stdc++.h>
using namespace std;
string str[20];
map<string,int>mp;
int main()
{//sfreopen("in.txt","r",stdin);//1 chui 0 ximp["5--"]=1;mp["2-"]=0;mp["1-"]=1;mp["4-"]=0;mp["3-"]=1;mp["6-"]=0;mp["5-"]=1;mp["7-"]=0;mp["1"]=1;mp["2"]=0;mp["3"]=1;mp["4"]=0;mp["5"]=1;mp["6"]=0;mp["1+"]=1;mp["7"]=0;mp["3+"]=1;mp["2+"]=0;mp["5+"]=1;mp["4+"]=0;mp["1++"]=1;mp["6+"]=0;mp["3++"]=1;mp["7+"]=0;mp["0"]=-1;int n;cin>>n;for(int i=1;i<=n;i++){string str;cin>>str;if(mp[str]==-1) printf("X");else if(mp[str]==1) printf("E");else printf("I");}return 0;
}

Problem B

题意:

给你mmm个串,现在让你构建一个长度为nnn的strstrstr串,使得这mmm个串的都不是strstrstr的子串。

分析:

考虑AC自动机。

将所给的mmm个串建立AC自动机,之后我们可以考虑的一个算法是,对现在所形成的Tire图进行dfs遍历,倘若发现我们能够在这张Trie图上走nnn步,则我们就将这nnn步的结果输出即可。

但是因为在这里,状态数达到了26m26^m26m之多,如果之间对Tire图进行遍历必然会超时,故现在考虑优化。

我们发现在我们形成的Trie图中,显然是存在大量的有效环,即存在不经过EndEndEnd结点的环,而倘若遇到一个这样的环,则我们只需要直接不断经过这个环即可。如此我们就可以避免遍历大量的无效的状态。

因此我们只需要预先进行预处理,我们首先先对Trie图进行遍历,记录一下有哪些结点是能够形成环,最后我们只需要在统计答案的时候优先通过这些的结点即可。

代码:
#include <bits/stdc++.h>
#define maxn 500005
using namespace std;
char str[maxn];
int n,m;
struct Trie{int next[maxn][26],End[maxn],root,fail[maxn],id;int vis[maxn],num[maxn],ans[maxn];int newnode(){for(int i=0;i<26;i++){next[id][i]=-1;}End[id]=0,vis[id]=0,num[id]=0;return id++;}void init(){id=0;root=newnode();}void Insert(char *str){int len=strlen(str);int now=root;for(int i=0;i<len;i++){if(next[now][str[i]-'a']==-1)next[now][str[i]-'a']=newnode();now=next[now][str[i]-'a'];}End[now]++;}void build(){queue<int>que;int now=root;fail[root]=root;for(int i=0;i<26;i++){if(next[root][i]==-1){next[root][i]=root;}else{fail[next[root][i]]=root;que.push(next[root][i]);}}while(!que.empty()){now=que.front();que.pop();End[now]|=End[fail[now]];for(int i=0;i<26;i++){if(next[now][i]==-1)next[now][i]=next[fail[now]][i];else{fail[next[now][i]]=next[fail[now]][i];que.push(next[now][i]);}}}}void dfs1(int now){//预处理vis[now]=1;for(int i=0;i<26;i++){if(vis[next[now][i]]==0&&next[now][i]!=root){if(End[next[now][i]]) continue;dfs1(next[now][i]);num[now]|=num[next[now][i]];}else num[now]=1;}}int dfs2(int step,int now,int fa){if(fa!=-1) ans[step]=fa;if(step==n) return 1;for(int i=0;i<26;i++){if((!End[next[now][i]]||next[now][i]==root)&&num[next[now][i]]!=0){if(dfs2(step+1,next[now][i],i)) return 1;}}return 0;}
}ac;
int main()
{//freopen("in.txt","r",stdin);scanf("%d%d",&n,&m);ac.init();for(int i=0;i<m;i++){scanf("%s",str);ac.Insert(str);}ac.build();ac.dfs1(0);ac.dfs2(0,ac.root,-1);for(int i=1;i<=n;i++){printf("%c",ac.ans[i]+'a');}return 0;
}

Problem C

题意:

有nnn个怪兽,第iii个怪兽的血量为did_idi​,攻击力为aia_iai​,你的攻击力为kkk,你现在有ccc个力量果实,每吃一个力量果实都可以让你攻击力增加kkk,问你最少扣多少血。

分析:

考虑贪心,显然的贪心策略是优先嗑药秒掉那些攻击力大且血比较厚的怪物。

代码:
#include <bits/stdc++.h>
#define maxn 100005
using namespace std;
typedef long long ll;
int n,k,c;
struct Node{ll d1,x1;bool operator <(const Node&b)const{return x1>b.x1;}
}q[maxn];
int main()
{scanf("%d%d%d",&n,&k,&c);for(int i=1;i<=n;i++){scanf("%lld%lld",&q[i].d1,&q[i].x1);q[i].d1=(q[i].d1+k-1)/k-1;}sort(q+1,q+1+n);ll res=0;for(int i=1;i<=n;i++){if(q[i].d1<=c){c-=q[i].d1;continue;}else{res+=(q[i].d1-c)*q[i].x1;c=0;}}printf("%lld\n",res);return 0;
}

Problem D


Problem E

题意:

有一个大小为nnn个排列,现在你你有若干个栈以及3中操作:

  1. 取出序列当前的第一个数字,插入到第 ppp 个栈的顶部
  2. 取出第 ppp 个栈的顶部数字,插入到新序列的末尾位置
  3. 取出第 ppp 个栈的顶部数字,插入到第 qqq 个栈的顶部

问你最少花费多少个栈使得原排列变成升序。

分析:

不难看出可以我们最多用222个栈就可以完成上述操作。

而当且仅当形成ai−1 ai−2… a1 an…ai−2a_{i-1}~a_{i-2}\dots~a_1~a_{n}\dots a_{i-2}ai−1​ ai−2​… a1​ an​…ai−2​这样的序列才能用111个栈完成。

而上述的过程,我们只需要用一个单调栈去维护即可。

代码:
#include <bits/stdc++.h>
#define maxn 100005
using namespace std;
int a[maxn];
int main()
{//freopen("in.txt","r",stdin);int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}stack<int>st;while(!st.empty()) st.pop();int minn=1;bool vis=true;for(int i=1;i<=n;i++){if(st.empty()){st.push(a[i]);continue;}while(!st.empty()&&st.top()<a[i]){if(st.top()!=minn){vis=false;break;}minn++,st.pop();}if(!vis) break;st.push(a[i]);}while(!st.empty()){if(!vis) break;if(st.top()!=minn){vis=false;break;}minn++,st.pop();}if(!vis) puts("2");else puts("1");}return 0;
}

Problem F

温暖的签到题,找一下规律就没了

代码:
#include <bits/stdc++.h>
#define maxn 100005
using namespace std;
typedef long long ll;
ll n,m;
int main()
{ios::sync_with_stdio(false);cin.tie(0);int t;cin>>t;while (t--){cin>>n>>m;ll ans=0;for (int i=1;i<=min(n,m);i++)ans+=(n-i+1)*(m-i+1)*i;cout<<ans<<endl;}return 0;
}

Problem G


Problem H

解一下方程,最后注意可能会产生增根,特判一下即可。

代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll>ans;
ll a,b;
bool check(ll x){ll tmp=a*x;if (tmp<0) return 0;ll c=sqrt(tmp);if (c*c!=tmp) return 0;if (c+b==x) return 1;return 0;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);int t;cin>>t;while (t--){cin>>a>>b;ll tmp=a*a+4*a*b;ll c=sqrt(tmp);if (c*c==tmp) {ll x1=a+2*b-c;ll x2=a+2*b+c;ans.clear();if (x1%2==0&&x1!=x2){x1/=2;if (check(x1)) ans.push_back(x1);}if (x2%2==0){x2/=2;if (check(x2)) ans.push_back(x2);}sort(ans.begin(),ans.end());cout<<ans.size()<<endl;cout<<ans[0];for (int i=1;i<ans.size();i++) cout<<' '<<ans[i];cout<<endl;}}return 0;
}

Problem I


Problem J


Problem K

签到题,模拟一下求导过程即可

代码:
#include <bits/stdc++.h>
using namespace std;int n,k;
const int mod=998244353;
typedef long long ll;
ll a[105];
ll Ans(ll x){ll res=1;for(int i=x,j=1;i>=1&&j<=k;i--,j++){res=res*i%mod;}return res;
}
vector<ll>res;
int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=k;i++) res.push_back(0);for(int i=n;i>=1;i--){scanf("%lld",&a[i]);if(i<k) continue;else res.push_back((Ans(i)*a[i])%mod);}for(int i=0;i<res.size();i++){if(i==0) printf("%lld",res[i]);else printf(" %lld",res[i]);}return 0;
}

Problem L


Problem M

转载于:https://www.cnblogs.com/Chen-Jr/p/11007141.html

Gym102174 (The 14-th BIT Campus Programming Contest)相关推荐

  1. The 14-th BIT Campus Programming Contest(部分题解)

    A. 两只脑斧 time limit per test1.0 s memory limit per test256 MB inputstandard input outputstandard outp ...

  2. 【The 13th Chinese Northeast Collegiate Programming Contest】I. Temperature Survey

    题目描述 [题目链接](https://codeforces.com/gym/102220/problem/I) 给定长度为 $n$ 的 $a$ 序列,保证 $a_n \le n$,求有多少个长度为 ...

  3. Programming Contest Ranking(题解)

    Programming Contest Ranking . 题目描述 Heilongjiang Programming Contest will end successfully! And your ...

  4. 2019 浙江省赛部分题解(The 16th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple)

    签到题 GLucky 7 in the Pocket Time Limit: 1 Second      Memory Limit: 65536 KB BaoBao loves number 7 bu ...

  5. Sichuan University Programming Contest 2018 Preliminary

    嗯为了防止大家AK,所以这次的A题和K题我们就当做不存在好了! 经历了昨天写了两个多小时的博客没保存的心态炸裂,今天终于下了个Markdown.所以我猜这篇的格式应该会更好看一点! 好吧废话不多说 题 ...

  6. 2016-2017 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2016)题解

    2016-2017 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2016) A - Artwork 题目描述: 给定N*M的网格,给出Q次 ...

  7. Nordic Collegiate Programming Contest 2017 题解

    前几天打了一场外国人的比赛,感觉那边的题目质量还是很好的,区分度很鲜明,题目没有国内的难,坑点比较少,比较注重思维,基础算法. B题: Best Relay Team Picture by Ferna ...

  8. 【水一波题解】题解 of University of Central Florida 2020 (Fall) “Practice” Local Programming Contest

    题解 of University of Central Florida 2020 (Fall) "Practice" Local Programming Contest [by_0 ...

  9. 2015 HIAST Collegiate Programming Contest J

    Polygons Intersection 题意:给2个凸多边形,求相交面积 思路:不会,套板子就是了 AC代码: #include "iostream" #include &qu ...

最新文章

  1. MusicXML 3.0 - DTD 速查
  2. python xpath循环_初学Python,就用它爬取一点情话说给她听!
  3. pythonui自动化测试平台_django+appium实现UI自动化测试平台(开源部分,可定制开发)...
  4. 递归--递推之组合数
  5. linux内存回收 内核参数
  6. oracle buffercache,Oracle DBA开发之:使用sql来查看buffer cache的使用情况
  7. FFmpeg之wav转mp3(二十四)
  8. CSS 实现盒子水平垂直居中
  9. [转]ubuntu 终端常用命令
  10. 一个RSS阅读器的开源 ---- 邀请您加入开发队伍
  11. 玩转数据可视化之R语言ggplot2:(九)网络图绘制
  12. heic照片格式怎么转换jpg?heic转换成jpg方法分享
  13. 360抢票 网站维护中 你的登录被踢了!
  14. java-php-python-ssm网上拍卖系统计算机毕业设计
  15. 利用Python自制雷霆战机小游戏,娱乐编程,快乐学习!
  16. 《磨菇书三四章整理》
  17. [思维模式-13]:《复盘》-1- “知”篇 - 认识复盘
  18. 【C++面试必备】一个专栏带你搞定剑指offer第二版
  19. jQuery中ajax用form表单方式提交数据
  20. 【Java、Redis】通过中心经纬度与半径获取范围内的结果集(类似附近的人)

热门文章

  1. 如何在Linux,Ubuntu,CentOS上安装Java 14
  2. rxjava教程_RxJava教程
  3. 具有IDE或IDE插件的Spring Boot Initilizr
  4. 带有自定义适配器示例教程的Android ListView
  5. 使用Kotlin在活动之间进行Android意向处理
  6. 看看ConcurrentLinkedQueue源码 in Java 9
  7. powershell文章汇总
  8. 扒一扒AI的那些事儿
  9. 智课雅思词汇---十五、前缀co-com-con-col-cor-是什么意思
  10. 洛谷4577 LOJ2521:[FJOI2018]领导集团问题——题解