江西理工大学南昌校区新生赛
Posted 樱花落舞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了江西理工大学南昌校区新生赛相关的知识,希望对你有一定的参考价值。
潘神的排序
解法:排序(什么为什么错了这么多次QAQ??解法就是排序啊)
sort(a,a+3) cout<<a[1]<<endl;
字符串解压
解法:字符串处理(处理字符串中的数字就好了,代码给出)
(当然可以用%d%c来快速处理~)
注意:如果题目是反过来告诉字符串,让你压缩会怎么办?
for(i=0;i<k;i++) { if(a[i]>=\'0\'&&a[i]<=\'9\') { c=(a[i]-\'0\')+c*10;continue; } else { for(j=1;j<=c;j++) printf("%c",a[i]); c=0; } }
lfforu的围巾
解法:答案不给出,母函数模板(不懂的去查他的模板,大概就是我下面写的那样,注意取模)
for(int i=0;i<=n;i++) { a[i]=1; b[i]=0; } for(int i=2;i<=n;i++) { for(int j=0;j<=n;j++) { for(int k=0;k+j<=n;k+=i*i) { b[k+j]+=a[j]; } } for(int z=0;z<=n;z++) { a[z] = b[z]%mod; b[z] = 0; } } cout<<a[n]<<endl;
不要你离开
解法:难度我猜不在于算出概率,算概率只有去判断一下就好了
化简可以用公约数~(暴力求出所有解法也是可以的,如下面的形式)
if(a>=b) max=a; else max=b; if(max==1) printf("1/1"); if(max==2) printf("5/6"); if(max==3) printf("2/3"); if(max==4) printf("1/2"); if(max==5) printf("1/3"); if(max==6) printf("1/6");
屏幕检测
解法:模拟,如果让你求0011000111000 有多少个连续的1,估计题目有容易的多
现在变成二维形式,还是一样的解法
我们加边界,当出现*时,判断左边是否有.,右边是否有*,或者说单独存在这一个*,统计一下
#include <iostream> #include <stdio.h> #include <string> using namespace std; string s[105]; int main(){ int n,m; for(int i=0;i<=105;i++){ s[0]+=\'.\'; } while(cin>>n>>m){ for(int i=1;i<=n;i++){ cin>>s[i]; s[i]=\'.\'+s[i]+\'.\'; } s[n+1]=s[0]; int cnt1=0,cnt2=0; for(int i=1;i<=n;i++){ for(int k=1;k<=m;k++){ if(s[i][k]==\'*\'){ if(s[i-1][k]==\'.\' && s[i+1][k]==\'*\'){ cnt1++; } if(s[i][k-1]==\'.\' && s[i][k+1]==\'*\'){ cnt1++; } if(s[i-1][k]==\'.\' && s[i+1][k]==\'.\' && s[i][k-1]==\'.\' && s[i][k+1]==\'.\'){ cnt2++; } } } } cout<<cnt2<<" "<<cnt1<<endl; } }
袁少的觉醒
解法:参考http://www.cnblogs.com/yinghualuowu/p/5160313.html
疯狂的南昌小婊砸
解法:时间原因不知道怎么去说明白,先略过吧>~<
贪财的小艾
解法:一道模拟或者说是LCA。。(防ak题嘛,你懂得)
用map放每一个节点的对应边的权值,然后进行更新或者查询(具体看题目要求)
是不是说的有点简单了。
#include <bits/stdc++.h> using namespace std; #define ll long long map<pair<ll,ll>,ll>m; int main() { int n; scanf("%d",&n); while(n--) { ll ty,u,v,w; scanf("%I64d",&ty); if(ty==1) { scanf("%I64d%I64d%I64d",&u,&v,&w); if(v<u)swap(u,v); while(v!=u) { if(v>u) { m[{v,v/2}]+=w; m[{v/2,v}]+=w; v/=2; } else if(u>v) { m[{u,u/2}]+=w; m[{u/2,u}]+=w; u/=2; } } } else { ll sum=0; scanf("%I64d%I64d",&u,&v); if(v<u)swap(u,v); while(v!=u) { if(v>u) { sum+=m[{v,v/2}]; v/=2; } else if(u>v) { sum+=m[{u,u/2}]; u/=2; } } printf("%I64d\\n",sum); } } return 0; }
以上是关于江西理工大学南昌校区新生赛的主要内容,如果未能解决你的问题,请参考以下文章