chd校内选拔赛题目+题解
题目链接 A. Currency System in Geraldion
有1时,所有大于等于1的数都可由1组成。没有1时,最小不幸的数就是1.
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- void solve(){
- int n,x;
- scanf("%d",&n);
- int flag = ;
- for(int i = ; i<=n; i++){
- scanf("%d",&x);
- if(x == ) flag = ;
- }
- if(flag) printf("-1\n");
- else printf("1\n");
- }
- int main()
- {
- solve();
- return ;
- }
神之队友,八个if条件秒A,orz...
最后给的两个矩形每个长和宽翻过来倒过去,有四种情况。再和给的第一个矩形匹配总共有八种情况。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- void solve(){
- int a1,b1,a2,b2,a3,b3;
- cin>>a1>>b1>>a2>>b2>>a3>>b3;
- int flag = ;
- if(a2+a3<=a1 && max(b2,b3)<=b1) flag = ;
- if(a2+a3<=b1 && max(b2,b3)<=a1) flag = ;
- if(a2+b3<=a1 && max(b2,a3)<=b1) flag = ;
- if(a2+b3<=b1 && max(b2,a3)<=a1) flag = ;
- if(b2+a3<=a1 && max(a2,b3)<=b1) flag = ;
- if(b2+a3<=b1 && max(a2,b3)<=a1) flag = ;
- if(b2+b3<=a1 && max(a2,a3)<=b1) flag = ;
- if(b2+b3<=b1 && max(a2,a3)<=a1) flag = ;
- if(flag) printf("YES\n");
- else printf("NO\n");
- }
- int main()
- {
- solve();
- return ;
- }
题意:给定每一个字母出现的个数ai,组成一个最长的字母串.
此字母串满足的条件:
1.其中的每个字母出现的总次数不超过ai.
2.每个字母出现的次数必须是不同的。
题解:这个题直接贪心。 从最大值开始,拿第一组样例,2 5 5来说
排序后2 5 5,从最后5开始,找局部最优解。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- int a[];
- void solve(){
- int n;
- scanf("%d",&n);
- for(int i = ; i<n; i++) scanf("%d",&a[i]);
- sort(a,a+n);
- int maxn = 1e9+;
- long long sum = ;
- for(int i = n-; i>=; i--){
- if(maxn == ) break;
- if(maxn>=a[i]){
- sum += a[i];
- maxn = a[i] - ;
- }
- else{
- sum += maxn;
- maxn--;
- }
- }
- printf("%I64d\n",sum);
- }
- int main()
- {
- solve();
- return ;
- }
记得寒假做过这道水题,我发现我一见到做过的题就懵了。。。
就把第一个人票数一直和后面最大的比较,如果此人最大的小于后面最大的,他就再得一票,后面最大的那个就减一票,ans+1,排序,直到后面没有比它还大的。数据较小,不会超时,至于司老大说的二分法我还没有领会。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- int a[];
- void solve(){
- int n,ans = ;
- scanf("%d",&n);
- for(int i = ; i<n; i++) scanf("%d",&a[i]);
- while(){
- sort(a+,a+n);
- if(a[n-]<a[]) break;
- a[n-]--;
- a[]++;
- ans++;
- }
- printf("%d\n",ans);
- }
- int main()
- {
- solve();
- return ;
- }
我想说这个题寒假也做过……
题意:对于每个人,他都想找到能和他组成最大力量的人匹配。
题解:所以从大到小排序后,我从最大值入手,找到后取出标记,再继续找下一个未被标记且最大的值,贪心思想。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- const int maxn = ;
- int cnt[maxn][maxn];
- int flag[maxn],ans[maxn];
- struct node{
- int x,y,v;
- }arr[maxn*maxn];
- bool cmp(node A,node B){
- return A.v>B.v;
- }
- void solve(){
- int n;
- scanf("%d",&n);
- int k = ;
- for(int i = ; i<=n*; i++){
- for(int j = ; j<i; j++){
- scanf("%d",&cnt[i][j]);
- arr[k].x = i;
- arr[k].y = j;
- arr[k].v = cnt[i][j];
- k++;
- }
- }
- sort(arr,arr+k,cmp);
- for(int i = ; i<k; i++){
- if(!flag[arr[i].x]&&!flag[arr[i].y]){
- ans[arr[i].x] = arr[i].y;
- ans[arr[i].y] = arr[i].x;
- flag[arr[i].x] = ;
- flag[arr[i].y] = ;
- }
- }
- for(int i = ; i<*n; i++){
- printf("%d ",ans[i]);
- }
- printf("%d\n",ans[*n]);
- }
- int main()
- {
- solve();
- return ;
- }
老柴一眼看出来这是道dfs题,可惜没时间做了。。。
题解:首先记录每个点的度数方便找到叶子节点。通过记录路上连续的猫的个数,判断是否走该点,然后继续遍历。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<vector>
- using namespace std;
- typedef long long ll;
- const int maxn = 1e5+;
- vector<int> path[maxn];
- int cat[maxn],leaf[maxn];
- int vis[maxn];
- int n,m,num = ;
- void dfs(int u,int numcat){
- if(vis[u]) return;
- else vis[u] = ;
- if(cat[u]) numcat++;
- else numcat = ;
- if(numcat>m) return;//判断猫的数量是否超过m
- if(leaf[u] == &&u != ) num++;//记录方案数
- for(int i = ; i<path[u].size(); i++){
- dfs(path[u][i],numcat);
- }
- }
- void solve(){
- scanf("%d%d",&n,&m);
- for(int i = ; i<=n; i++) scanf("%d",&cat[i]);
- int x,y;
- for(int i = ; i<=n-; i++){
- scanf("%d%d",&x,&y);
- path[x].push_back(y);
- path[y].push_back(x);
- leaf[x]++;//寻找叶子节点
- leaf[y]++;
- }
- dfs(,);
- printf("%d\n",num);
- }
- int main()
- {
- solve();
- return ;
- }
找规律题目,这么多if else写的我醉醉的。。。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<vector>
- using namespace std;
- void solve(){
- int n,i = ,j = ,k = ;
- scanf("%d",&n);
- getchar();
- char c;
- for(int p = ; p<n; p++){
- scanf("%c",&c);
- if(c == 'B') i++;
- else if(c == 'G') j++;
- else if(c == 'R') k++;
- }
- if(i >= && j == && k == ) puts("B");
- else if(i == && j >= && k == ) puts("G");
- else if(i == && j == && k >= ) puts("R");
- else if(i == && j == && k == ) puts("R");
- else if(i == && j == && k == ) puts("G");
- else if(i == && j == && k == ) puts("B");
- else if(i > && j == && k == ) puts("GR");
- else if(i > && j == && k == ) puts("GR");
- else if(i == && j > && k == ) puts("BR");
- else if(i == && j == && k > ) puts("BG");
- else if(i == && j > && k == ) puts("BR");
- else if(i == && j == && k > ) puts("BG");
- else puts("BGR");
- }
- int main()
- {
- solve();
- return ;
- }
我还想说这个题寒假也做过。。。
唯一分解定理。即 : n = p1^e1* p2^e2 * p3^e3* … * pr^er;其中p为质数。
注意数据范围,所有素数乘起来便没有平方。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- typedef long long ll;
- ll p[];
- void solve(){
- ll n;
- scanf("%I64d",&n);
- int ans = ;
- for(ll i = ; i*i<=n; i++){
- if(n%i == ){
- p[ans++] = i;
- while(n%i == ){
- n /= i;
- }
- }
- }
- if(n>) p[ans++] = n;
- ll sum = ;
- for(int i = ; i<ans; i++){
- sum = sum*p[i];
- }
- printf("%I64d\n",sum);
- }
- int main()
- {
- solve();
- return ;
- }
I 和 G两个题还没看,未完待续。。。
chd校内选拔赛题目+题解的更多相关文章
- 20191029校内ACM部分题解
20191029校内ACM部分题解 https://codeforces.com/group/32W4q7bPme/contest/257710 B数学 给定一个在\([0,1]\)等概率随机区间的随 ...
- ZROI 部分题目题解
ZROI 部分题目题解 335 首先发现一个性质: 对于最短的边而言,所有点的路径如果经过了这条边,那么路径的权值就是这条边的边权(废话) 那么我们把最短的边拎出来,可以发现,博物馆确定时,每个点按照 ...
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)
一.标题:正则表示 正则表达式表示了串的某种规则或规律.恰当地使用正则表达式,可以使得代码简洁.事半功倍.java的很多API都支持正则表达式作为参数.其中的String.split就是这样. ...
- Tarjan & LCA 套题题目题解
刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...
- LuoguB2001 入门测试题目 题解
Update \(\texttt{2021.7.3}\) 经测试,本题 \(a,b\) 范围在 long long,对代码进行了修改,并修改一些笔误,更新了数据范围. \(\texttt{2021.7 ...
- cogs 自己出的题目 题解报告
第一题很简单嘛,就是裸的动态树分治嘛 对于每一层的重心维护子树路径的信息和子树到上一层重心的点的信息 空间复杂度O(nlogn) 对于每一层我们按dis排序,之后记录军队数量的前缀和 查询的时候我们只 ...
- Gym - 101480 CERC 15:部分题目题解(队内第N次训练)
-------------------题目难度较难,但挺有营养的.慢慢补. A .ASCII Addition pro:用一定的形式表示1到9,让你计算加法. sol:模拟. solved by fz ...
- 【qboi冲刺NOIP2017复赛试题4】 全套题目+题解+程序
作为一个好人(验题人),我给大家奉上下这套题的题解,并且预祝大家这套题能够AK: T1题面:Alice现在有n根木棍,他们长度为1,2,3....n,Bob想把某一些木棍去掉,使得Alice剩下的木棍 ...
随机推荐
- [google面试CTCI] 1-7.将矩阵中特定行、列置0
[字符串与数组] Q:Write an algorithm such that if an element in an MxN matrix is 0, its entire row and colu ...
- C++之Effective STL
今天看了下websocket的知识,了解到这是html5新增的特性,主要用于实时web的通信.之前客户端获取服务端的数据,是通过客户端发出请求,服务端进行响应的模式,或者通过ajax每隔一段时间从后台 ...
- mac os 上安装mysqldb血泪史
昨天下午在mac上安装mysql-python一直未遂今天查了很多资料终于成功了 最后还是在stackoverflow点击打开链接(好网站啊,一般有什么技术问题在这都能找到)上找到了答案,废话少数: ...
- Java读书笔记1
Java逍遥游记读书笔记 前言 必须先来一句,这是入门级别,高手勿喷~ 写Android的时候总有一些语句不是很理解,其实大部分是Java的内容,所以想系统的学下Java. 这本书——<Java ...
- UISearchDisplayController UISearchBar
分组表+本地搜索 UISearchDisplayController UISearchBar 的使用 效果图 @interface CityListViewController :UIViewCon ...
- xml数据解析
xml数据解析 在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.Kiss ...
- sqlserver2005级联删除
在你建表,建主外键的时候,在下面有几个选项,有一个是级联删除和一个级联更新,勾选上就可以了
- 密码配置配置SSH免密码登陆
在本文中,我们主要介绍密码配置的内容,自我感觉有个不错的建议和大家分享下 我的用户名是master 1.安装ssh(若没安装的话) sudo apt-get install ssh 2.配置为可以免密 ...
- Linux centos7环境下安装MySQL的步骤详解
Linux centos7环境下安装MySQL的步骤详解 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执行 ...
- JS高程5.引用类型(5)Array类型的操作方法
一.操作方法 1.concat()方法 基于当前数组中的所有项创建一个新数组.具体说,是先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组.在没有给concat() ...