博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017-2018 ACM-ICPC Latin American Regional Programming Contest GYM101889
阅读量:4589 次
发布时间:2019-06-09

本文共 5479 字,大约阅读时间需要 18 分钟。

挺有意思的一套题,题也没有啥毒瘤了,本来是队切的结果种种原因大家全挂机了。

只补了百人题,一共7个,其他的暂时先不补了,,也不会嘛qwq

H:签到

1 #include 
2 using namespace std; 3 int a[18],b[18]; 4 int main(){ 5 cin>>a[1]>>a[2]>>a[3]>>b[1]>>b[2]>>b[3]; 6 int ans = 0; 7 for(int i=1;i<=3;i++) 8 ans+=max(0,b[i]-a[i]); 9 cout<
<
View Code

C:按情况模拟一下,签到。当时队友因为这个题写炸了心态受到了影响然后我又不在((

#include 
using namespace std;int k,n;int a[100005];int num[100005];vector
vis[100005];int main(){ ios::sync_with_stdio(false); cin>>k>>n; int cnt = 0; int tmp = 0;//那一个超出k的数 for(int i=1;i<=n;i++){ cin>>a[i]; if(a[i]>k){ cnt++; tmp = a[i]; } else{ num[a[i]]++; } } for(int i=1;i<=k;i++){ vis[num[i]].push_back(i); } if(cnt>=2){ cout<<"*"<
View Code

B:签到题

题意:给你目标字符串,你每次可以输入一个字符,输入字符为元音是会在当前串会在输入后反转,求方案数。

样例三很明显了,两边的顺序是固定的,只考虑 中间 那一部分就好。特殊情况判一下

1 #include 
2 using namespace std; 3 string s; 4 bool yuanyin(char a){ 5 return a=='a'||a=='e'||a=='i'||a=='o'||a=='u'; 6 } 7 int main(){ 8 ios::sync_with_stdio(false); 9 cin>>s;10 int n = s.length();11 int odd = 0,even = 0;//我不会别的英语了12 for(int i=0;i
View Code

E:搜索题,可以利用数位dp的思想,唔数位dp我之前写过一篇博客所以这道题有了思路之后还是挺简单的。

题意:给你一个串和整数n,包含数字和'?','?'可以用任意数替代但不能含前导0,求能被n整除的最小串。

1 #include 
2 //为什么取余的运算优先级会比加减法高啊喂。。。 3 using namespace std; 4 int dp[1005][1005]; 5 string s;int n,l; 6 bool flag = false; 7 void dfs(int len,int mod,string ans){ 8 if(flag) return; 9 if(len==l){10 if(mod==0){11 cout<
<
>s>>n;32 l=s.length();33 dfs(0,0,"");34 if(!flag)35 cout<<"*"<
View Code

J:简单数学题,一个字符串,R代表能跳,P代表不能,青蛙可以从任何地方跳,求能跳回原点的步数n的方案数,n需要小于字符串长度。

很明显的gcd,然后判断一下因数就可以。

1 #include 
2 using namespace std; 3 int gcd(int x,int y){ 4 return y==0?x:gcd(y,x%y); 5 } 6 string s; 7 bool vis[100005]; 8 int main(){ 9 ios::sync_with_stdio(false);10 cin>>s;11 int n = s.length();12 for(int l=1;l
=l的位置有解那么
=n){21 vis[l]=true;22 }23 }24 }25 }26 int ans = 0;27 for(int i=1;i
View Code

I:次小生成树板子题,题意不说了很简单。很久没写过LCA的题了今天算是复习了一下。

对于给定的那条边,如果本来就在MST里,直接输出,如果不在,减去两点间的最长路径即可,最长路径和LCA的数组一起处理就可以。

1 #include 
2 using namespace std; 3 const int N = 1e5+5; 4 5 map
,int>mt; 6 7 int fa[N],ran[N]; 8 int find(int a){ 9 if(a==fa[a])return a; 10 return fa[a]=find(fa[a]); 11 } 12 void unite(int x,int y){ 13 x = find(x); 14 y = find(y); 15 if(x==y) return; 16 if(ran[x]
g[N],val[N]; 28 int par[N][22],maxx[N][22],dep[N]; 29 void dfs(int v,int fa){ 30 for(int i=0;i
dep[y]) 43 swap(x, y); 44 int tmp1 = mt[make_pair(x, y)];// 45 int res = 0; 46 for (int i = 20; i >= 0; i--){ 47 if (dep[y] - dep[x] >= (1 << i)) { 48 res = max(res,maxx[y][i]); 49 y = par[y][i]; 50 } 51 } 52 if(x==y) 53 return tmp1-res;//多的长度 54 //这两个一定在同一高度了 55 for(int i=20;i>=0;i--) { 56 if (par[x][i] == par[y][i]) 57 continue; 58 else { 59 res = max(res,maxx[x][i]); 60 res = max(res,maxx[y][i]); 61 x = par[x][i], y = par[y][i]; 62 } 63 } 64 res = max(res,maxx[x][0]); 65 res = max(res,maxx[y][0]); 66 return tmp1-res; 67 } 68 69 struct Edge{ 70 int from,to,cost; 71 Edge(){} 72 Edge(int from,int to,int cost):from(from),to(to),cost(cost){} 73 bool operator <(const Edge &b)const { 74 return cost
>n>>m; 95 for(int i=1;i<=m;i++){ 96 cin>>a>>b>>c; 97 edg[i]=Edge(a,b,c); 98 mt[make_pair(a,b)]=c; 99 mt[make_pair(b,a)]=c;100 }101 sort(edg+1,edg+1+m);102 int ans = 0;103 for(int i=1;i<=m;i++){104 int u = edg[i].from,v = edg[i].to,cost = edg[i].cost;105 if(!same(u,v)){106 unite(u,v);107 ans+=cost;108 g[u].push_back(v);109 g[v].push_back(u);110 val[u].push_back(cost);111 val[v].push_back(cost);112 }113 }114 dep[1]=1;dfs(1,1);115 init();116 //cout<
<
>q;118 while (q--){119 cin>>a>>b;120 if(par[a][0]==b||par[b][0]==a)//本来就在MST里121 cout<
<
View Code

F:离散化+树状数组。因为我是先学的线段树所以对树状数组不太熟。。。但还是能写下来的(((

思路:两个值都相同的先合并,然后按一维排序,另一维做最大上升子序列权值和。

1 #include 
2 using namespace std; 3 typedef long long ll; 4 const int N = 100005; 5 struct node{ 6 int a,b; 7 ll cost; 8 }p[N]; 9 int n,s[N*4];//离散化10 map
, ll> m;11 vector
l[N*4];12 ll c[N*4];13 int lowbit(int k){ return k&-k;}14 void update(int pos,ll num){15 while (pos<=4*N){16 c[pos]=max(c[pos],num);17 pos+=lowbit(pos);18 }19 }20 ll maxx(int pos){21 ll s = 0;22 while (pos>0){23 s=max(s,c[pos]);24 pos-=lowbit(pos);25 }26 return s;27 }28 int cmp(int a,int b){29 return a>b;30 }31 int main(){32 ios::sync_with_stdio(false);33 cin>>n;34 for(int i=1;i<=n;i++){35 cin>>p[i].a>>p[i].b>>p[i].cost;36 s[2*i]=p[i].a;37 s[2*i-1]=p[i].b;38 }39 sort(s+1,s+2*n+1);40 int cnt = unique(s+1,s+2*n+1)-s-1;41 for(int i=1;i<=n;i++){42 int a = lower_bound(s+1,s+1+cnt,p[i].a)-s;43 int b = lower_bound(s+1,s+1+cnt,p[i].b)-s;44 m[make_pair(a,b)]+=p[i].cost;45 l[a].push_back(b);46 }47 for(int i=1;i<=cnt;i++){48 sort(l[i].begin(),l[i].end(),cmp);49 for(int j=0;j
View Code

 

转载于:https://www.cnblogs.com/MXang/p/9801631.html

你可能感兴趣的文章
文件描述符和文件指针的相互转换
查看>>
Java:基本语法
查看>>
HTTP头的Expires与Cache-control
查看>>
ASIHTTPRequest 详解 例子
查看>>
小L 的二叉树(洛谷 U4727)
查看>>
从Azure上构建Windows应用程序映像
查看>>
并发系统实践1
查看>>
【beta】Scrum站立会议第6次....11.8
查看>>
java XML解析-我们到底能走多远系列(12)
查看>>
多线程并发库
查看>>
Props 和 IActorRef 3
查看>>
转载 页面加载完后执行js代码
查看>>
远程SSH连接服务与基本排错
查看>>
浏览器渲染页面原理
查看>>
VC dumpbin dll 导出 lib
查看>>
【Lua】Lua的几点优化原则
查看>>
兼容IE8以下,获取className节点的元素(document.getElementsByClassName()兼容写法)。
查看>>
安装apache
查看>>
git链接远程库
查看>>
【C#利用后台动态加载数据】Winform“防界面卡死”
查看>>