题解

今天是信心赛吗?


第一题——方程式(equation)

【题目描述】

  • 给出n次方程的系数,求出所有根(重根也要输出)。
  • n≤7n≤7n\leq 7,根的大小1≤x≤201≤x≤201\leq x \leq20且为整数

  • 求根其实很简单,数据这么小,暴力就好了。主要问题是重根
  • 手打模拟大除法的系数。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define LL long long
using namespace std;
void fff(){freopen("equation.in","r",stdin);freopen("equation.out","w",stdout);
}
int n,cnt;
LL a[10],t[10];
bool check(LL x){if(cnt==0&&a[0]==0) return false;LL sum=1;for(int i=cnt-1;i>=0;i--){sum=sum*x+1ll*a[i];}if(sum==0) return true;return false;
}
void modify(LL x){memcpy(t,a,sizeof(LL)*sizeof(t));for(int i=cnt;i>=0;i--){t[i]=a[i+1];a[i]-=t[i]*(-x);}t[cnt]=0;while(t[cnt]==0) cnt--;memcpy(a,t,sizeof(LL)*sizeof(t));
}
int main(){fff();scanf("%d",&n);cnt=n;for (int i=0;i<=n;i++) scanf("%lld",&a[i]);for(LL i=1;i<=20;i++){while(check(i)){printf("%lld ",i);modify(i);}}
}

第二题——高维宇宙(prime)

【题目描述】

  • 给出n个整数,求有多少对数的和是质数。
  • 范围n≤40,2≤ai≤1000n≤40,2≤ai≤1000n\leq 40,2\leq a_i\leq1000

  • 数据这么小,一看就是二分图匹配。
  • 先筛出质数,然后n2n2n^2处理出能够相连的边。
  • 然后求最大图匹配。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
void fff(){freopen("prime.in","r",stdin);freopen("prime.out","w",stdout);
}
const int MAXA=10000;
vector <int> prime;
bool visited[MAXA];
void oula(){prime.clear();for (int i=2;i<MAXA;i++){if(!visited[i]) prime.push_back(i);for(int j=0;j<(int)prime.size()&&prime[j]*i<MAXA;j++){visited[prime[j]*i]=true;if(i%prime[j]==0) break;}}
}
int n;
int a[44];
struct Edge{int nxt,to;
}e[555];
int head[88],tot=0;
void add(int u,int v){e[++tot].nxt=head[u];e[tot].to=v;head[u]=tot;
}
int toy[100],tox[100];
bool dfs(int u){for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;if(!visited[v]){visited[v]=true;if(!toy[v]||dfs(toy[v])){tox[u]=v;toy[v]=u;return true;}}}return false;
}
int max_connect(){int k=0;for(int i=1;i<=n;i++){memset(visited,false,sizeof(visited));k+=dfs(i);}return k;
}
int main(){fff();oula();scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d",&a[i]);for(int j=1;j<i;j++){int t=a[i]+a[j];int pos=lower_bound(prime.begin(),prime.end(),t)-prime.begin();if(prime[pos]==t){add(i,j);add(j,i);}}}printf("%d",max_connect()/2);
}

第三题——mahjong(mahjong)

【题目描述】

  • 给出14张麻将牌,要求打出某一张牌之后听牌的张数最多
  • 牌分为3种,条、桶、万,数量分别从1-9,每张最多4张。
  • 听牌是指再拿一张就能够胡牌,如果一种牌有多张,那就算多种情况
  • 胡牌需要有1组将牌和4组句子
  • 将牌是指两张相同的牌
  • 句子是指三张连续数量的牌(种类相同),或者三张相同的牌

  • 暴力题,枚举打出每一张牌之后拿进每张牌之后最多的数量。
  • 很明显,必须也只能有一组将牌。
  • 出现相同的牌记得过滤。
  • 记录当前的牌的张数。进行dfs。
  • 真的没什么好讲的…直接看代码吧…

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
void fff(){freopen("mahjong.in","r",stdin);freopen("mahjong.out","w",stdout);
}
char ch[2];
int a[15];
int cnt[30];
bool visited[30],flag;
int Hash(){int x=0;swap(ch[0],ch[1]);if(ch[0]=='s') x=10*0;else if(ch[0]=='w') x=10;else x=10*2;x+=ch[1]-'0';return x;
}
bool dfs(int i,int num,int rest){if(flag) return true;if(rest<0) return false;if(i==30&&rest==0){flag=true;return flag;}if(i==30&&rest>0) return false;if(cnt[i]==0) return dfs(i+1,num,rest);bool ans=false;if(cnt[i]>=1&&cnt[i+1]>=1&&cnt[i+2]>=1){cnt[i]--;cnt[i+1]--;cnt[i+2]--;ans=dfs(i,num,rest-3);cnt[i]++;cnt[i+1]++;cnt[i+2]++;}if(ans){flag=true;return flag;}if(cnt[i]>=2&&num==0){cnt[i]-=2;ans=dfs(i,num+1,rest-2);cnt[i]+=2;}if(ans){flag=true;return flag;}if(cnt[i]>=3){cnt[i]-=3;ans=dfs(i,num,rest-3);cnt[i]+=3;}if(ans){flag=true;return flag;}return false;
}int main(){fff();for(int i=1;i<=14;i++){scanf("%s",ch);a[i]=Hash();cnt[a[i]]++;}int ans_pos,ans_num=0;for(int i=1;i<=14;i++){if(visited[a[i]]) continue;visited[a[i]]=true;cnt[a[i]]--;int count=0;for(int j=1;j<=30;j++){if(j%10==0) continue;cnt[j]++;flag=false;count+=dfs(1,0,14)*(4-cnt[j]+1);cnt[j]--;}cnt[a[i]]++;if(count>ans_num){ans_num=count;ans_pos=i;}}cout<<ans_pos<<' '<<ans_num;}

HGOI8.23集训题解相关推荐

  1. 23春-第三次集训题解

    23春-第三次集训题解 L1-1 植树问题 某学校植树节开展植树活动,已知树苗有m株,参加植树的同学有n人(且m>n),请问每位同学平均可以植树几株?还有几株剩余? 输入格式: 输入两个整数m和 ...

  2. 2017国庆 雅礼集训 题解合集

    D1 D1 T1:Clique: 我做的题太少啦,这都没看出来.首先,这个式子是 c[i]−c[j]>=dis(i,j) c[i]-c[j] >= dis(i,j),即在数轴上这样的圆,如 ...

  3. 【某集训题解】【DAY 2 T3】与非

    题目描述 作为一名新世纪共产主义的接班人,你认识到了资本主义的软弱性与妥协性,决定全面根除资本主义,跑步迈入共产主义.但是当你即将跨入共产主义大门的时候,遇到了万恶的资本家留下的与非电路封印,经过千辛 ...

  4. 2018第一次校队集训题解

    问题 A: 豆豆强的蛋糕店 时间限制: 1 Sec  内存限制: 128 MB 提交: 29  解决: 3 [提交] [状态] [讨论版] [命题人:外部导入] [Edit] [TestData] 题 ...

  5. HGOI11.1集训题解

    题解 我觉得我剩下的日子已经不多了,这一份题解很有写的意义. 第一题--序列(sequence) [题目描述] 小Z 有一个序列,定义f(x)为x 在十进制下的位数,特别地,求∑1≤i<j≤nf ...

  6. 2019 SUST暑期集训题解(计算几何(二))

    A . 梦想成为天文学家 这道题是一个原题,我们要用向量的知识来解决它,求解的就是四点共面. //四个点三个向量 构成一个行列式 行列式的结果为0则共面否则不共面 #include<iostre ...

  7. SUST 2019暑期集训题解(差分约束+生成树+传递闭包)

    A 这个不等式组很眼熟吧 这道题的话上课讲过就是根据不等式建图然后跑一下最短路就可以了. #include<iostream> #include<cstring> #inclu ...

  8. 2019 SUST暑期集训题解(计算几何(平面几何))

    A 来,求个三角形面积玩玩. 利用叉乘的特性就直接得到三角形的面积,如果三点共线则三点不构成三角形.此时叉乘结果为0. #include<iostream> #include<cst ...

  9. SUST暑期集训题解(可持久化数据结构)

    A 可持久化线段树 #include<iostream> #include<cstdio> #include<cstring> #include<algori ...

最新文章

  1. linux内核tor03,Linux内核x86架构引导协议4(翻译)
  2. iOS 仿通讯录索引
  3. Linux文件目录结构2
  4. naarray查询 swift_数据分析库之Numpy
  5. java mouseenter_关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
  6. 软件工程 - 设计模式学习之工厂方法模式Factory Method
  7. mysql 索引能不能太多,mysql索引太多了?
  8. Oracle数据库中dual是什么东西啊?
  9. ad怎么批量改元器件封装_ad中如何批量修改封装
  10. Office协同办公讲解以及软件归纳
  11. 健身房训练计划—背部
  12. 《管理信息系统》考研复试整理
  13. P1873 [COCI 2011/2012 #5] EKO / 砍树
  14. 前端的岗位以及初步了解
  15. jmeter配置原件
  16. 论文学习:基于集成YOLO算法的蝴蝶检测与分类
  17. Web.config详解+asp.net优化
  18. 红警ol总是服务器满 可服务区显示流程,红警OL:11月27日部分服务器数据互通合服公告...
  19. 【数据结构】剑指 Offer P200——八皇后问题的排列解法
  20. 点评中国的5G试验频段

热门文章

  1. Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
  2. 怎么重装电脑系统,小熊一键重装电脑系统教程
  3. 事关年终奖,备受关注的项目绩效管理攻略来喽
  4. 大学计算机应用基础的简介,大学计算机应用基础资料
  5. Python爬取360手机助手评论——以百度地图为例
  6. 邮箱 名字 地址url正则表达式
  7. 【厚积薄发系列】Python项目总结1—后端常驻程序的基本要求
  8. 题解报告:P1577 切绳子(二分答案)
  9. c语言知识点总结(摘自head first c)
  10. react 三种通信方式(父传子、子传父、兄弟传值)