首测: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 三校联考的更多相关文章

  1. 三校联考 Day3

    三校联考 Day3 大水题 题目描述:给出一个圆及圆上的若干个点,问两个点间的最远距离. solution 按极角排序,按顺序枚举,显然距离最远的点是单调的,线性时间可解出答案. 大包子的束缚 题目描 ...

  2. 【赛时总结】NOIP2018-三校联考1024

    ◇NOIP三校联考-1024◇ 发现以前的博客写得似乎都很水……基本上都没什么阅读量QwQ 决定改过自新╰( ̄ω ̄o) 就从这篇博客开始吧~ 现场考得无地自容,看到题解才发现一些东西……(我第三题还没 ...

  3. 【五校联考1day2】JZOJ2020年8月12日提高组T2 我想大声告诉你

    [五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一 ...

  4. [2019多校联考(Round 6 T3)]脱单计划 (费用流)

    [2019多校联考(Round 6 T3)]脱单计划 (费用流) 题面 你是一家相亲机构的策划总监,在一次相亲活动中,有 n 个小区的若干男士和 n个小区的若干女士报名了这次活动,你需要将这些参与者两 ...

  5. [多校联考2019(Round 5 T1)] [ATCoder3912]Xor Tree(状压dp)

    [多校联考2019(Round 5)] [ATCoder3912]Xor Tree(状压dp) 题面 给出一棵n个点的树,每条边有边权v,每次操作选中两个点,将这两个点之间的路径上的边权全部异或某个值 ...

  6. [多校联考2019(Round 5 T2)]蓝精灵的请求(二分图染色+背包)

    [多校联考2019(Round 5)]蓝精灵的请求(二分图染色+背包) 题面 在山的那边海的那边住着 n 个蓝精灵,这 n 个蓝精灵之间有 m 对好友关系,现在蓝精灵们想要玩一个团队竞技游戏,需要分为 ...

  7. [多校联考2019(Round 5 T3)]青青草原的表彰大会(dp+组合数学)

    [多校联考2019(Round 5)]青青草原的表彰大会(dp+组合数学) 题面 青青草原上有n 只羊,他们聚集在包包大人的家里,举办一年一度的表彰大会,在这次的表彰大会中,包包大人让羊们按自己的贡献 ...

  8. ZR10.1青岛集训三地联考

    ZR10.1青岛集训三地联考 谢谢dijk和smy A 题目大意: 已知斐波那契数列\(f\) 设 \[ F_i = \sum_{i = 0}^nf_if_{n - i} \] 求 \[ \sum_{ ...

  9. 【五校联考1day2】JZOJ2020年8月12日提高组T1 对你的爱深不见底

    [五校联考1day2]JZOJ2020年8月12日提高组T1 对你的爱深不见底 题目 Description 出乎意料的是,幸运E 的小R 居然赢了那个游戏.现在欣喜万分的小R 想要写一张明信片给小Y ...

随机推荐

  1. 【LeetCode234】Palindrome Linked List★

    题目描述: 解题思路: 判断一个单向链表是否是回文链表,并且要求O(n)的时间复杂度和O(1)的空间复杂度. 方法有以下几种: 1.遍历整个链表,将链表每个节点的值记录在数组中,再判断数组是不是一个回 ...

  2. python基础2之字符串、列表、字典、集合

    内容概要: 一.python2 or 3 二.字符串拼接 三.字符串 四.列表.元祖 五.字典 六.集合 七.练习 一.python2 or python3 目前大多使用python2.7,随着时间的 ...

  3. VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法

    原文:VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/ar ...

  4. Servlet——提交表单信息,Servlet之间的跳转

    HTML表单标签:<form></form> 属性: actoion:  提交到的地址,默认为当前页面 method:  表单提交方式 有get和post两种方式,默认为get ...

  5. 理解 NgModelController 中相关方法和属性

    1. 理解$formatters和$parsers方法 angular的双向绑定可以实现view和model中的值自动同步,但有时候我们不想让用户输入的(view值)和发送给后台的(model值)并不 ...

  6. CS100.1x Introduction to Big Data with Apache Spark

    CS100.1x简介 这门课主要讲数据科学,也就是data science以及怎么用Apache Spark去分析大数据. Course Software Setup 这门课主要介绍如何编写和调试Py ...

  7. 加速github、kaggle访问、加速python packge下载更改源

    OS: WIN10 加速github.kaggle访问 使用站长DNS工具(http://tool.chinaz.com/dns) 查询响应速度最快的网站服务器IP,将网站服务器IP和域名添加到电脑h ...

  8. Laravel 5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句

    Laravel5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句 Laravel 的 View 部分是内置了两套输出系统:直接输出和使用 Blade 引擎“编译”后输出,默认情况下它们 ...

  9. Mocha 单元测试框架简介

    前言: mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行. 使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运 ...

  10. LeetCode 551. Student Attendance Record I (C++)

    题目: You are given a string representing an attendance record for a student. The record only contains ...