B. BSUIR Open X

从nnn个字符串中任选两个进行拼接,求拼接成"BSUIROPENX"的方法数。

思路:
首先统计各字符串的出现次数,
再对"BSUIROPENX"进行拆分,
拆分所得两字符串出现此时之积即为答案

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const int INF=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> P;
const int mod=1e9+7;
unordered_map<string,ll>mp;
string t="BSUIROPENX";
int main(){int n;cin>>n;for(int i=0;i<n;i++){string s;cin>>s;mp[s]++;}ll ans=0;for(int i=0;i<t.size();i++){string a=t.substr(0,i);string b=t.substr(i);ans+=mp[a]*mp[b];}cout<<ans<<endl;return 0;
}

L. Long integer

给定一个十进制数x0x_0x0​和qqq次查询,每次查询可以实现以下两种操作:
1、在原数字的最右边加上一个数字ddd
2、删除现有数字最右边那一位上的数字
每次输出xxx变化之后,对1e9+7取余的结果。

思路:
一边计算,一遍取模
(也可不用字符串,用栈来维护顶部增减数字,时间会省很多很多)

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const int INF=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<P,int> PP;
const int mod=1e9+7;
ll ksm(ll a,ll b){ll ans=1;while(b){if(b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}
int main(){string s;cin>>s;int q;cin>>q;ll ans=0;ll div=ksm(10,mod-2);//逆元for(int i=0;i<s.size();i++){ans=(ans*10+s[i]-'0')%mod;}while(q--){char ch;cin>>ch;if(ch=='+'){char t;cin>>t;s+=t;ans=(ans*10+t-'0')%mod;}else{int l=s.size();int k=s[l-1]-'0';ans=(ans-k+mod)%mod;ans=ans*div%mod;s=s.substr(0,l-1);}  cout<<ans<<endl;}return 0;
}

C. Crossed out letter

给出两个字符串s0s_0s0​和s1s_1s1​,其中,s0s_0s0​是由字符串sss删除某个特定的字符xxx得到的,s1s_1s1​也是是由字符串sss删除相同位置的字符xxx或者删除其他不同位置上的字符xxx得到的。试求能通过相应操作得到上述字符串的sss,如果这样的sss不存在,则输出“IMPOSSIBLE”。

思路:
这道题关键是读题。。。题目意思没有完全审清导致被卡了很久很久,无用功也做了不少。

some single character某一个字符
而不是一些字符,如果some是“一些”的意思,“character”应该是复数啊!!!
没想到败在了这么简单的单词上边。。。

如果读懂了,只能删除一个字符的话,那就相当于给你这样两个字符串:
(删除不同位置的X)

X…
…X
直接遍历两个字符串,当出现不同字符时,说明该位置存在字符的删除

需要正序、倒序各遍历一次,找到两个存在字符删除的位置,然后将被删除的字符(出现不同的字符)重新插入。
如果是删除相同位置的X,那么一定会得到两个完全相同的字符串,这种情况在s0s_0s0​的基础上再随便加一个字符输出就好啦!

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const int INF=0x3f3f3f3f;
typedef long long ll;
const int mod=1e9+7;
int main(){string a,b;cin>>a>>b;if(a==b){a+="b";cout<<a<<endl;return 0;}int len=a.size();int l=0,r=len-1;while(l<len&&a[l]==b[l]) l++;while(r>=0&&a[r]==b[r]) r--;if(a.substr(l+1,r-l)==b.substr(l,r-l)){string ans=a.substr(0,l)+a[l]+b.substr(l,r-l)+b[r]+b.substr(r+1);cout<<ans<<endl;}else if(a.substr(l,r-l)==b.substr(l+1,r-l)){string ans=a.substr(0,l)+b[l]+a.substr(l,r-l)+a[r]+a.substr(r+1);cout<<ans<<endl; } else{cout<<"IMPOSSIBLE\n";}return 0;
}

I. Items in boxes

现有2n2^n2n个不同的盒子,每个盒子里面放有aaa个不同的物品,试求从没个盒子里恰好都取出一个物品的方案数xxx
输出x%2n+2x\%2^{n+2}x%2n+2的值

思路:
枚举一些情况,推出公式
打表找规律

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const int INF=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<P,int> PP;
const int mod=1e9+7;
/*
ll ksm(ll a,ll b,ll mod){ll ans=1;while(b){if(b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans%mod;
}
*/
int main(){/*打表for(int n=1;n<=10;n++){for(int a=0;n<=10;n++){cout<<ksm(a,1<<n,1<<(n+2))<<" ";}cout<<endl;}*/ll n,m;cin>>n>>m;if(n==1){ll a=m%4;if(a==0) cout<<"0\n";else if(a==1||a==3) cout<<"1\n";else if(a==2) cout<<"4\n";}else{if(m&1) cout<<"1\n";else cout<<"0\n";}return 0;
}

K. K-ones xor

给n,m,k,和一个长度为n的数组aaa,在[0,2m)[0,2^m)[0,2m)范围内寻找一个xxx,且xxx的二进制表示中1的个数不能超过kkk个。
对数组进行如下修改:
ai=max(ai,ai⊕x)a_i=max(a_i,a_i\oplus x)ai​=max(ai​,ai​⊕x)
求能够让数组和达到最大的xxx,如果这样的xxx不止一个,则输出最小的那个。
数据范围:
1≤n≤1051\leq n \leq 10^51≤n≤105
1≤m≤301\leq m \leq 301≤m≤30
0≤k≤m0\leq k \leq m0≤k≤m
0≤ai≤2m0\leq a_i \leq 2^m0≤ai​≤2m

思路:
xxx的二进制表示中1的个数不能超过kkk个
且k的值不会超过30,可以考虑二进制枚举,
xxx最多mmm位,每一次枚举,考虑将xxx的哪一位变为1,数组和可以变大;
相当于每一次枚举,xxx的二进制多一个1(如果不能找到使数组和变大的,也有可能不变),最多k个1。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
const int mod=1e9+7;
int n,m,k;
ll a[maxn];
ll cal(ll x){ll ans=0;for(int i=0;i<n;i++){ans+=max(a[i],a[i]^x);}return ans;
}
int main(){ cin>>n>>m>>k;for(int i=0;i<n;i++){cin>>a[i];}ll ans=0;ll mmax=cal(ans);//注意不能初始化为0while(k--){int idx=-1;for(int i=0;i<m;i++){if(ans&(1<<i)) continue;//二进制的第i位是否有1ll sum=cal(ans+(1<<i));if(sum>mmax){//能使数组和变大,则标记该位mmax=sum;idx=i;}}if(idx!=-1){ans+=(1<<idx);}else break;}cout<<ans<<endl;return 0;
}

2019-2020 10th BSUIR Open Programming Championship. Semifinal 补题相关推荐

  1. 2016-2017 7th BSUIR Open Programming Contest. Final 补题

    题目链接 https://codeforces.com/gym/102133 参考题解 A - Tree Orientation 简要题意: 给定 nnn 个结点的无向树,根为 111 号点,问有多少 ...

  2. 2020牛客国庆集训派对day2 补题J

    2020牛客国庆集训派对day2 补题J:VIRUS OUTBREAK 题目描述 The State Veterinary Services Department recently reported ...

  3. 【解题报告】2017-2018 8th BSUIR Open Programming Contest-C Good subset 线性基+线段树

    2017-2018 8th BSUIR Open Programming Contest. Semifinal C题Good subset. 训练上做了三个小时硬肝出来,先写的trie,然后知道铁用线 ...

  4. 动态改变_【学校动态】在坚守与改变中追求卓越——礼县二中召开2019—2020学年度秋季学期第二次全体教职工大会...

    点击上方"礼县第二中学"关注我们 礼县二中召开2019-2020学年度秋季学期第二次全体教职工大会 9月22日晚,礼县二中召开2019-2020学年度秋季学期第二次全体教职工大会. ...

  5. 《2019~2020网络安全态势观察报告》重磅发布!

    [导读]过去一年多,各种 APT 攻击事件.勒索挖矿事件,数据泄露事件,漏洞攻击事件仍然不绝于耳.从 ATT&CK 模型框架的兴起到实战化攻防环境的建立,从反序列化漏洞的攻防博弈到 VPN 漏 ...

  6. mastercam后处理升级_MastercamX9,2017,2018,2019,2020各版本后处理(功能全面)2019-11-23更新...

    马上注册,结识高手,享用更多资源,轻松玩转三维网社区. 您需要 登录 才可以下载或查看,没有帐号?注册 x 本帖最后由 737852701 于 2019-11-27 08:17 编辑& y4 ...

  7. 2019, XII Samara Regional Intercollegiate Programming Contest 解题报告

    2019 XII Samara Regional Intercollegiate Programming Contest 传送门 A. Rooms and Passages 题意: 有 n+1n+1n ...

  8. 2018/2019/2020/2021/2022/2023年度计划阅读书籍(持续更新)

    2018/2019/2020/2021/2022/2023年度计划阅读书籍 1. Java加密与解密的艺术(第二版) 作者:梁栋 在读 2. Spring源码深度解析 作者:郝佳 在读 3. 深入理解 ...

  9. 预测超级计算机排名2020,足球超级计算机预测2019/2020英超联赛排名

    原标题:足球超级计算机预测2019/2020英超联赛排名 英超联赛很快就将拉开帷幕,人们都在急切地等待着.球迷们已经开始猜测他们俱乐部的最终排名怎么样了.但是光凭人们自己要想 预测英超联赛的最终结果是 ...

最新文章

  1. 查看电脑wifi密码
  2. Chromium内核原理之网络栈HTTP Cache
  3. java如何获取tree_如何从javac插件获取memberselecttree中的表达式类型?
  4. 21复变函数的积分(七)
  5. 包级别的 TCP/UDP 负载均衡和NAT(Network Address Translate)
  6. 16.2.4 登录到 SMTP 服务器
  7. re模块compile方法
  8. JS中如何设置背景图片?
  9. 欧几里得算法(求解最大公约数的优质方法)以及原理拓展
  10. 数据链路层——局域网扩展
  11. 水果 hdu 1263 模拟
  12. 使用python实现用微信远程控制电脑
  13. mysql保留小数位数函数
  14. shell小记:dirname
  15. GStreamer1.0 工具用法
  16. LaTeX使用CJK支持中文排版
  17. Android 隐私数据_Android安全警告:10亿台安卓设备不再支持安全更新
  18. 图像特征(二)——形状特征(主轮廓特征、区域特征、图像的矩及Hu矩)
  19. 小学生10以内加减运算练习系统(c语言)
  20. 如何选择负载均衡设备?

热门文章

  1. linux du | sort 命令查找磁盘占用大户
  2. 如果期权买方真有这么好,为什么大户和机构都不做,而是散户在做!!!
  3. python一对小兔子一年后长大成大兔子;一对大兔子每半年生一对小兔子。大兔子的繁殖期为4年,兔子的寿命是6年。假定第一年年初投放了一对小兔子,试编程计算,第n年末(不考虑死亡情况)总共会有多少对兔子
  4. golang 实现时间差
  5. Note For Linux By Jes(16)-软件安装:原始码与 Tarball
  6. 安装黑苹果提示未能安装_黑苹果安装过程中经常出现的问题及解决方法
  7. linux小红帽网卡设定,linux下网卡如何开启flow control
  8. 【conda解决】安装Torchvision后使用PIL报错,ImportError: cannot import name 'PILLOW_VERSION' from 'PIL'
  9. java 访问网址并将返回结果的json数组转换为List<String>
  10. Siri怎么重置主人声音