HGOI20180823 三校联考
首测:220qwq(算差的好吧)
后来改了一个地方:300qwq(算慢的好吧)

std被踩qwq

注意:输入数据第一行忘记输入n,亲脑补
题解:
多项式除法(若最后除出的答案为1那么就是成功),对于f(x)=0的一个解x=e 单项式(x-e)必然是f(x)的一个因式
而解是[1,20]的正整数,那么暴力搜索e的值。就行
AC代码:
# include <bits/stdc++.h>
# define Rint register int
using namespace std;
const int MAXN=;
int r[MAXN],a[MAXN],t[MAXN],n,ans[MAXN],last[MAXN];
inline bool chu(int e)//多项式除法(x-e)
{
memcpy(t,a,sizeof(a));
memset(r,,sizeof(r));
for (Rint i=n;i>=;i--) {
if (t[i]==) continue;
int k=t[i];
r[i-]=k;
t[i]=; t[i-]=t[i-]+k*e;
}
for (Rint i=;i<=n;i++)
if (t[i]!=) return false;
return true;
}
inline void dfs(int x,int tot)
{
if (tot==n) return;
for (Rint i=;i<=;i++) {
if (chu(i)) {
memcpy(last,a,sizeof(a));
memcpy(a,r,sizeof(r));
ans[++ans[]]=i;
dfs(i,tot+);
memcpy(a,last,sizeof(last));
}
}
}
int main()
{
freopen("equation.in","r",stdin);
freopen("equation.out","w",stdout);
scanf("%d",&n);
for (Rint i=;i<=n;i++) scanf("%d",&a[i]);
memset(ans,,sizeof(ans));
dfs(,);
for (Rint i=;i<=n;i++) printf("%d ",ans[i]);
printf("\n");
return ;
}

题解:配对?马上想到二分图。 怎么建图?
加起来是质数那么就连双向边,然后跑一边匈牙利算法,答案除以二就是答案
然而这是针对数字不为0的情况,如果数字为0,那么分奇数偶数考虑
显然 (奇数)+(奇数)!=质数
(偶数)+(偶数)!=质数
左边是奇数右边是偶数,然后加起来是质数连单向边,跑匈牙利算法
这里程序用了第一种方法
# include <bits/stdc++.h>
# define Rint register int
using namespace std;
const int MAXN=;
int n,a[MAXN],pre[MAXN],ans=;
bool mp[MAXN][MAXN],vis[MAXN];
bool prime[];
inline bool is_prime(int x)
{
if (x==) return false;
if (x==) return true;
return prime[x];
}
inline bool find(int u)
{
for (Rint i=;i<=n;i++)
if ((!vis[i])&&(mp[u][i])) {
vis[i]=true;
if (pre[i]==-||find(pre[i])){
pre[i]=u;
return true;
}
}
return false;
}
inline void solve()
{
memset(pre,-,sizeof(pre));
for (Rint i=;i<=n;i++){
memset(vis,false,sizeof(vis));
if (find(i)) ans++;
}
}
inline int read()
{
int X=,w=; char c=;
while(c<''||c>'') {w|=c=='-';c=getchar();}
while(c>=''&&c<='') X=(X<<)+(X<<)+(c^),c=getchar();
return w?-X:X;
}
void getprime(int n)
{
memset(prime,true,sizeof(prime));
for (int i=;i<=n;i++) {
if (prime[i]==false) continue;
for (int j=i+i;j<=n;j+=i) prime[j]=false;
}
}
int main()
{
freopen("prime.in","r",stdin);
freopen("prime.out","w",stdout);
getprime();
scanf("%d",&n);
memset(mp,false,sizeof(mp));
for (Rint i=;i<=n;i++) a[i]=read();
for (Rint i=;i<=n;i++)
for (Rint j=;j<=n;j++)
if ((i!=j)&&(is_prime(a[i]+a[j]))) mp[i][j]=true,mp[j][i]=true;
ans=;
solve();
printf("%d\n",ans/);
return ;
}




题解:和斗地主有几分胜似,暴力dfs是正解(不知道我斗地主会打几行)
句子1 句子2 句子3 句子4 将牌
对于每个句子0表示由三张相同的牌组成,1表示3张花色相同且连续的牌组成
dfs(p1,p2,p3,p4,now)表示句子1,句子2,句子3,句子4的状态是p1,p2,p3,p4(都是0 1),now表示当前的句子是句子now
然后搜索所有状态,判断剩下的牌是不是符合条件就可以了
程序如下
# include <bits/stdc++.h>
using namespace std;
struct node{
char s[];
};
struct qwq{
int hua,num;
}w[];
vector<node>v;
char s[];
int a[][];
bool judge()
{
bool flag=false;
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if (a[i][j]>) if (a[i][j]==) return ;
else return ;
}
bool flag;
void dfs(int p1,int p2,int p3,int p4,int now)
{
if (now==) {
if (judge()) { flag=true;return; }
else return;
}
if (now==) {
if (p1==) {
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if (a[i][j]>=) {
a[i][j]-=;
w[].hua=w[].hua=w[].hua=i;
w[].num=w[].num=w[].num=j;
dfs(p1,p2,p3,p4,now+);
a[i][j]+=;
}
} else {
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if ((a[i][j]>)&&(a[i][j+]>)&&(a[i][j+]>)) {
a[i][j]--;a[i][j+]--;a[i][j+]--;
w[].hua=w[].hua=w[].hua=i;
w[].num=j;w[].num=j+;w[].num=j+;
dfs(p1,p2,p3,p4,now+);
a[i][j]++;a[i][j+]++;a[i][j+]++;
}
}
} else if (now==){
if (p2==) {
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if (a[i][j]>=) {
a[i][j]-=;
w[].hua=w[].hua=w[].hua=i;
w[].num=w[].num=w[].num=j;
dfs(p1,p2,p3,p4,now+);
a[i][j]+=;
}
} else {
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if ((a[i][j]>)&&(a[i][j+]>)&&(a[i][j+]>)) {
a[i][j]--; a[i][j+]--; a[i][j+]--;
w[].hua=w[].hua=w[].hua=i;
w[].num=j;w[].num=j+;w[].num=j+;
dfs(p1,p2,p3,p4,now+);
a[i][j]++;a[i][j+]++;a[i][j+]++;
}
}
} else if (now==){
if (p3==) {
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if (a[i][j]>=) {
a[i][j]-=;
w[].hua=w[].hua=w[].hua=i;
w[].num=w[].num=w[].num=j;
dfs(p1,p2,p3,p4,now+);
a[i][j]+=;
}
} else {
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if ((a[i][j]>)&&(a[i][j+]>)&&(a[i][j+]>)) {
a[i][j]--;a[i][j+]--;a[i][j+]--;
w[].hua=w[].hua=w[].hua=i;
w[].num=j;w[].num=j+;w[].num=j+;
dfs(p1,p2,p3,p4,now+);
a[i][j]++;a[i][j+]++;a[i][j+]++;
}
}
} else if (now==){
if (p4==) {
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if (a[i][j]>=) {
a[i][j]-=;
w[].hua=w[].hua=w[].hua=i;
w[].num=w[].num=w[].num=j;
dfs(p1,p2,p3,p4,now+);
a[i][j]+=;
}
} else {
for (int i=;i<=;i++)
for (int j=;j<=;j++)
if (a[i][j]>&&a[i][j+]>&&a[i][j+]>) {
a[i][j]--;a[i][j+]--;a[i][j+]--;
w[].hua=w[].hua=w[].hua=i;
w[].num=j;w[].num=j+;w[].num=j+;
dfs(p1,p2,p3,p4,now+);
a[i][j]++;a[i][j+]++;a[i][j+]++;
}
}
}
}
bool check()
{
for (int a=;a<=;a++)
for (int b=;b<=;b++)
for (int c=;c<=;c++)
for (int d=;d<=;d++)
{
flag=false;
dfs(a,b,c,d,);
if (flag) return true;
}
return false;
}
int main()
{
freopen("mahjong.in","r",stdin);
freopen("mahjong.out","w",stdout);
for (int i=;i<=;i++) {
scanf("%s",s);
node tmp;
memcpy(tmp.s,s,sizeof(s));
v.push_back(tmp);
}
memset(a,,sizeof(a));
for (int i=;i<v.size();i++) {
if (v[i].s[]=='w') a[][v[i].s[]-'']++;
else if (v[i].s[]=='p') a[][v[i].s[]-'']++;
else if (v[i].s[]=='s') a[][v[i].s[]-'']++;
}
int ansp=,ansnum=;
for (int i=;i<v.size();i++) {
int ch,num;
if (v[i].s[]=='w') ch=;
else if (v[i].s[]=='p') ch=;
else if (v[i].s[]=='s') ch=;
num=v[i].s[]-'';
a[ch][num]--;
int cnt=;
for (int j=;j<=;j++)
for (int k=;k<=;k++)
{
int tt=-a[j][k];
if (tt==) continue;
a[j][k]++;
if (check()) cnt+=tt;
a[j][k]--;
}
if (cnt>ansnum) {
ansnum=cnt; ansp=i+;
}
a[ch][num]++;
}
printf("%d %d\n",ansp,ansnum);
return ;
}
HGOI20180823 三校联考的更多相关文章
- 三校联考 Day3
三校联考 Day3 大水题 题目描述:给出一个圆及圆上的若干个点,问两个点间的最远距离. solution 按极角排序,按顺序枚举,显然距离最远的点是单调的,线性时间可解出答案. 大包子的束缚 题目描 ...
- 【赛时总结】NOIP2018-三校联考1024
◇NOIP三校联考-1024◇ 发现以前的博客写得似乎都很水……基本上都没什么阅读量QwQ 决定改过自新╰( ̄ω ̄o) 就从这篇博客开始吧~ 现场考得无地自容,看到题解才发现一些东西……(我第三题还没 ...
- 【五校联考1day2】JZOJ2020年8月12日提高组T2 我想大声告诉你
[五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一 ...
- [2019多校联考(Round 6 T3)]脱单计划 (费用流)
[2019多校联考(Round 6 T3)]脱单计划 (费用流) 题面 你是一家相亲机构的策划总监,在一次相亲活动中,有 n 个小区的若干男士和 n个小区的若干女士报名了这次活动,你需要将这些参与者两 ...
- [多校联考2019(Round 5 T1)] [ATCoder3912]Xor Tree(状压dp)
[多校联考2019(Round 5)] [ATCoder3912]Xor Tree(状压dp) 题面 给出一棵n个点的树,每条边有边权v,每次操作选中两个点,将这两个点之间的路径上的边权全部异或某个值 ...
- [多校联考2019(Round 5 T2)]蓝精灵的请求(二分图染色+背包)
[多校联考2019(Round 5)]蓝精灵的请求(二分图染色+背包) 题面 在山的那边海的那边住着 n 个蓝精灵,这 n 个蓝精灵之间有 m 对好友关系,现在蓝精灵们想要玩一个团队竞技游戏,需要分为 ...
- [多校联考2019(Round 5 T3)]青青草原的表彰大会(dp+组合数学)
[多校联考2019(Round 5)]青青草原的表彰大会(dp+组合数学) 题面 青青草原上有n 只羊,他们聚集在包包大人的家里,举办一年一度的表彰大会,在这次的表彰大会中,包包大人让羊们按自己的贡献 ...
- ZR10.1青岛集训三地联考
ZR10.1青岛集训三地联考 谢谢dijk和smy A 题目大意: 已知斐波那契数列\(f\) 设 \[ F_i = \sum_{i = 0}^nf_if_{n - i} \] 求 \[ \sum_{ ...
- 【五校联考1day2】JZOJ2020年8月12日提高组T1 对你的爱深不见底
[五校联考1day2]JZOJ2020年8月12日提高组T1 对你的爱深不见底 题目 Description 出乎意料的是,幸运E 的小R 居然赢了那个游戏.现在欣喜万分的小R 想要写一张明信片给小Y ...
随机推荐
- 【本地服务器】windows下nginx安装操作教程
1.下载nginx 下载地址: (可选择下载 Stable version 版本) 2.把安装放到C盘或其他盘的根目录,并解压文件压缩包,可以重命名解压的文件夹,方便找到路径 (注意不要直接双击 ...
- CentOS 建立本地yum源服务器
安装CentOS系统,配置系统的网络环境 配置静态IP vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet O ...
- 20155301 Exp9 Web安全基础
20155301 Exp9 Web安全基础 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 答 :原理: 利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web ...
- web窗体的运用
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebAp ...
- cli 开发记录
最近要开发一个 cli,主要作用是方便同事生成前端项目,做了一天半,基本参考的是 vue-cli. cli 要实现的功能: 用 cnpm install zt-cli -g 全局安装,这个就要将你做的 ...
- [转]JVM系列三:JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java ...
- More Effective C++ Item14:明智运用exception specifications
使用exception specifications你必须非常仔细去确保,函数调用的子函数.注册的回调函数不会违背约定.而设计模板内部的异常更难确保. 设计回调机制的时候,如果调用方规定了不抛出异常, ...
- Asp.Net_Ajax调用WebService返回Json前台获取循环解析
利用JQuery的$.ajax()可以很方便的调用 asp.net的后台方法.但往往从后台返回的json字符串不能够正确解析,究其原因,是因为没有对返回的json数据做进一步的加工.其实,这里只需 要 ...
- arduino驱动安装
方法一:使用官方提供的一键安装程序安装 打开Arduino在你电脑上的位置如果你的电脑是32位系统,就运行dpinst-x86.exe如果是64位系统,就运行dpinst-amd64.exe然后在弹出 ...
- B1030 完美数列 (25 分)
这是一道二分法的题目,许久不使用二分法,感觉有点生疏. #include<bits/stdc++.h> using namespace std; const int MAXN=100000 ...