2018 hncpc 部分题
A.字符画
签到
http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2163
#include<bits/stdc++.h> using namespace std; int w; void go(){for(int i=1;i<=w;i++)cout<<"."; } int main(){cin>>w;cout<<"ooo";go();cout<<"ooo";go();cout<<"ooo";go();cout<<"ooo\n";cout<<"..o";go();cout<<"o.o";go();cout<<".o.";go();cout<<"o.o\n";cout<<"ooo";go();cout<<"o.o";go();cout<<".o.";go();cout<<"ooo\n";cout<<"o..";go();cout<<"o.o";go();cout<<".o.";go();cout<<"o.o\n";cout<<"ooo";go();cout<<"ooo";go();cout<<"ooo";go();cout<<"ooo\n";return 0; }
View Code
B.2018
打表规律
http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2164
#include<bits/stdc++.h> #define LL long long using namespace std; LL dp[2005][2005]; int main(){int n,m;for(int i=1;i<=2000;i++){dp[1][i]=dp[i][1]=i;}for(int i=2;i<=2000;i++)for(int j=2;j<=2000;j++){dp[i][j]=dp[i-1][j]+dp[i][j-1]+1;dp[i][j]=dp[i][j]%1000000007;}while(~scanf("%d %d",&n,&m)){printf("%lld\n",dp[n][m]*dp[n][m]%1000000007);}return 0; }
View Code
C.时间旅行
读题签到
http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2165
#include<bits/stdc++.h> #define LL long long using namespace std; int main(){int n,m;while(~scanf("%d %d",&n,&m)){if(n>m) cout<<n<<"\n";else cout<<m+1<<"\n";}return 0; }
View Code
D.卖萌表情包
贪心,找到表情优先级即可
http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2166
#include<bits/stdc++.h> #define LL long long using namespace std; char s[1005][1005]; bool vis[1005][1005]; void go(int i,int j){vis[i][j]=1; } int main(){int n,m;while(~scanf("%d %d",&n,&m)){int ans=0;memset(vis,0,sizeof(vis));memset(s,0,sizeof(s));for(int i=1;i<=n;i++)scanf("%s",s[i]+1);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(vis[i][j]) continue;if(s[i][j]=='^'){if(!vis[i+1][j-1]&&!vis[i+1][j+1]&&s[i+1][j-1]=='v'&&s[i+1][j+1]=='v'){go(i+1,j-1);go(i+1,j+1);go(i,j);ans++;}else if(!vis[i][j+2]&&!vis[i+1][j+1]&&s[i][j+2]=='^'&&s[i+1][j+1]=='v'){ans++;go(i,j+2);go(i+1,j+1);go(i,j);}}else if(s[i][j]=='<'){if(!vis[i-1][j+1]&&!vis[i+1][j+1]&&s[i+1][j+1]=='>'&&s[i-1][j+1]=='>'){ans++;go(i+1,j+1);go(i-1,j+1);go(i,j);}else if(!vis[i+1][j+1]&&!vis[i+2][j]&&s[i+1][j+1]=='>'&&s[i+2][j]=='<'){ans++;go(i+2,j);go(i+1,j+1);go(i,j);}} }}cout<<ans<<"\n";}return 0; }
View Code
J.买一送一
因为题目是一棵树,u点的贡献 == u(fa)的贡献 + 商品的总数 -(第一次出现此商品前的商品个数)
http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2172
#include<bits/stdc++.h> #define LL long long using namespace std; vector<int> v[100005]; int a[100005]; LL f[100005]; int vis[100005]; int pre[100005]; void dfs(int u,int cnt){for(int i=0;i<(int)v[u].size();i++){int to=v[u][i];if(!vis[a[u]]) cnt++;vis[a[u]]++;f[to]=f[u]+cnt-pre[a[to]];int hv=pre[a[to]];pre[a[to]]=cnt;dfs(to,cnt);if(--vis[a[u]]==0) cnt--;pre[a[to]]=hv;} } int main(){int n;while(~scanf("%d",&n)){for(int i=1;i<=n;i++) v[i].clear();memset(vis,0,sizeof(vis));memset(f,0,sizeof(f));memset(pre,0,sizeof(pre));for(int i=2;i<=n;i++){int u;scanf("%d",&u);v[u].push_back(i);}for(int i=1;i<=n;i++) scanf("%d",&a[i]); dfs(1,0);for(int i=2;i<=n;i++) printf("%lld\n",f[i]);}return 0; }
View Code
K.Use FFT
我们将多项式a * 多项式b 得出如下
a0*b0 a0*b1 a0*b2 a0*b3 等于a0 * b3前缀和
a1*b0 a1*b1 a1*b2 等于a1 *b2前缀和
a2*b0 a2*b1
a3*b0
http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2173
#include<bits/stdc++.h> #define LL long long #define mod 1000000007 using namespace std; LL a[500005],b[500005]; LL sum[1000005]; int main(){int n,m,l,r;while(~scanf("%d %d %d %d",&n,&m,&l,&r)){for(int i=1;i<=n+1;i++)scanf("%lld",&a[i]);for(int i=1;i<=m+1;i++){scanf("%lld",&b[i]);sum[i]=(sum[i-1]+b[i]+mod)%mod;}for(int i=m+2;i<=r+1;i++)sum[i]=sum[i-1];LL ans=0;for(int i=1;i<=n+1;i++){ans=(ans+a[i]*(sum[r+1]-sum[l]+mod)%mod+mod)%mod;if(l>0) l--;if(r>=0) r--; else break;}printf("%lld\n",(ans+mod)%mod);}return 0; }
View Code
H.千万不要用树套树
对于每个查询 答案等于 -1r左边的线段个数 + l+1右边的线段个数(这样就不会重复)
我们用两个线段树维护 一个维护左线段 一个维护右线段
http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2170
#include<bits/stdc++.h> #define LL long long #define mod 1000000007 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; const int maxn = 100005; int sum1[maxn<<2],sum2[maxn<<2],cnt[maxn]; void update1(int l,int r,int rt,int pos){if(l==r){sum1[rt]+=1;return ;}int m=(l+r)>>1;if(pos<=m) update1(lson,pos);else update1(rson,pos);sum1[rt]=sum1[rt<<1]+sum1[rt<<1|1]; } void update2(int l,int r,int rt,int pos){if(l==r){sum2[rt]+=1;return ;}int m=(l+r)>>1;if(pos<=m) update2(lson,pos);else update2(rson,pos);sum2[rt]=sum2[rt<<1]+sum2[rt<<1|1]; } int query1(int l,int r,int rt,int L,int R){if(L<=l&&r<=R){return sum1[rt];}int m=(l+r)>>1;int ans=0;if(L<=m) ans+=query1(lson,L,R);if(R>m) ans+=query1(rson,L,R);return ans; } int query2(int l,int r,int rt,int L,int R){if(L<=l&&r<=R){ return sum2[rt];}int m=(l+r)>>1;int ans=0;if(L<=m) ans+=query2(lson,L,R);if(R>m) ans+=query2(rson,L,R);return ans; } int main(){int n,q;while(~scanf("%d %d",&n,&q)){int all=0;for(int i=1;i<=n*4;i++){if(i<=n) cnt[i]=0;sum1[i]=sum2[i]=0;}while(q--){int op,l,r;scanf("%d",&op);if(op==1){scanf("%d %d",&l,&r);if(l==r) cnt[l]++;update1(1,n,1,l);update2(1,n,1,r);all++;}else {scanf("%d %d",&l,&r);int ans=all;if(n>=l+1) { ans-=query1(1,n,1,l+1,n);}if(r-1>=1) { ans-=query2(1,n,1,1,r-1);}if(r-l==2) ans+=cnt[l+1];printf("%d\n",ans);}}}return 0; }
View Code
转载于:https://www.cnblogs.com/MengX/p/10645119.html
2018 hncpc 部分题相关推荐
- 牛客网 2018校招真题 美团点评 K的倍数
Description 牛客网 2018校招真题 K的倍数 Solving Ideas sum[i + 1]: 表示序列p[0]...p[i]的和 从长度最大的子串开始判断,当剩余需要判断子串长度不可 ...
- 牛客网 2018校招真题 摩拜 排序次数
Description 牛客网 2018校招真题 排序次数 Solving Ideas 将数组a的元素拷贝到数组b 对数组b进行排序 对比数组b,统计数组a中已排序的元素个数 如:a = [2, 11 ...
- 牛客网 2018校招真题 滴滴出行 寻找丑数
Description 牛客网 2018校招真题 寻找丑数 Solving Ideas 参考<剑指offer>丑数 Time complexity : O(n)O(n)O(n) Space ...
- 牛客网 2018校招真题 爱奇艺 最后一位
Description 牛客网 2018校招真题 最后一位 Solving Ideas 二分查找 Solution import java.io.BufferedReader; import java ...
- 牛客网 2018校招真题 京东 回文
Description 牛客网 2018校招真题 回文 Solving Ideas 计算以str[str.length() - 1]为结尾的最大的回文长度,从而判断最少需要追加多少个字母才能使整个串成 ...
- 牛客网 2018校招真题 美团点评 关灯游戏
Description 牛客网 2018校招真题 关灯游戏 Solving Ideas 只与最右边的数字有关,如果最右边的数字为1,则Alice赢,否则Bob赢 假设最右边的数字为1 因为Alice是 ...
- 牛客网 2018校招真题 网易 骰子游戏
Description 牛客网 2018校招真题 骰子游戏 Solving Ideas 参考<剑指offer>n个骰子的点数 考虑用两个数组来存储骰子点数的每一个总数出现的次数. 在一次循 ...
- 牛客网 2018校招真题 美团点评 重要节点
Description 牛客网 2018校招真题 重要节点 Solving Ideas BFS 创建一个标记数组arrive,arrive[i][j]为true表示从i可以到达j, false则不能 ...
- 牛客网 2018校招真题 招商银行信用卡 整数成绩最大化
Description 牛客网 2018校招真题 整数成绩最大化 Solving Ideas 当n>4时,最大受益为尽可能拆分出更多的数字3,最后一个不足3的,若其为1则分给其中一个3,得到4, ...
最新文章
- 怎么复制链接伟html,index.html
- linux查看节点使用进程后退出,Linux通过端口号查看使用进程-结束进程
- [收集] C++ memset ,memcpy 和strcpy 的区别
- 如何修改mysql服务器,怎么修改mysql服务器地址
- Kafka本身的架构
- ThinkPHP5.0.5RCE
- python 经典排序算法
- SpringBoot 整合 Shiro实践
- SVM支持向量机习题解答
- 微波遥感SNAP(四)——检测地表沉降(2)相位解缠与地理编码
- CSDN写博客怎么插入数学公式(干货满满呦)
- Java学习从入门到放弃
- Spring Cloud从入门到精通(四):熔断器 Hystrix
- OpenCV实现图片锐化
- 精益管理研究院陈逸超 | 用精益思维创造数据价值金矿
- django 下mailgun的使用
- java服务端集成极光消息推送
- 【Baxter机器人末端轨迹坐标采集和轨迹还原】
- 申请QQ密码保护,保护号码安全!(转)
- 一名拿到阿里、京东、百度等公司offer的Java程序员年终总结
热门文章
- 字符在计算机中是如何表示的?
- JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点
- android uri转drawable,Glide4(URL转File,URL转Drawable)
- 曼彻斯特解密_曼彻斯特编码解码方法与流程
- What are training set, validation set and test set?
- CODEVS-3303-翻转区间
- [JLOI2011]不重复数字
- BZOJ 4032 luogu P4112 [HEOI2015]最短不公共子串 (DP、后缀自动机)
- mysql 异常关机后 无法查数据_MySQL数据库非法关机造成数据表损坏怎么排查 | 学步园...
- python标准输入输出用来干什么_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...