题目链接

C. Primitive Primes

题意:

给定两个多项式 相乘得到h(x)的多项式,求h多项式中某个系数不能p整除,输出这个系数的位置

做法:什么是本原多项式?献上百度百科

只能说这个题跟本源多项式的定义很像,本原多项式保证了一定有解,由于

做法就是 两个多项式第一个系数不被mod整除的位置加起来,因为如果前面都能呗mod整除,第n+m这个位置的卷积都是从前面卷积过来的,前面都被mod整除,那么构成 其他系数就是 被mod整除的,仅仅是第i项 和第j项相乘不是mod的倍数

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=(b);++i)
#define mem(a,x) memset(a,x,sizeof(a))
#define pb push_back
#define pi pair<int, int>
#define mk make_pair
using namespace std;
typedef long long ll;
const int N=1e6+10;
const ll mod=1e9+7;
ll a[N],b[N],n,m,p,ans1,ans2;
ll input(){ll x=0,f=0;char ch=getchar();while(ch<'0'||ch>'9') f|=ch=='-',ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return f? -x:x;
}
int main()
{n=input();m=input();p=input();rep(i,1,n) a[i]=input();for(int i=1;i<=n;i++)if(a[i]%p&&ans1==0) ans1=i;rep(i,1,m) b[i]=input();for(int i=1;i<=m;i++)if(b[i]%p&&ans2==0) ans2=i;printf("%lld\n",ans1+ans2-2);
}

D. Nash Matrix

题意:题意:你有一个n*n的棋盘,每个格子都有一个操作:往上走U,往下走D,往左走L,往右走R,呆在原地X,现在要构造这个棋盘。

现在给出从每个格子开始走最后会停在的地方(x,y),如果x=-1,y=-1,代表一直循环下去;然后让你输出每个格子是哪种操作,如果不存在就输出INVALID。

做法:从呆着原地的格子开始bfs找到一些路径,再从(-1,-1)的位置开始bfs一下,由于无限循环走只需要两个相邻的格子都是(-1,-1)就能实现了,也是简单的bfs一下即可

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=(b);++i)
#define mem(a,x) memset(a,x,sizeof(a))
#define pb push_back
#define pi pair<int, int>
#define mk make_pair
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}typedef pair<int,int> P;
const int N=1e3+10;
pair<int,int> ma[N][N];
char ans[N][N];
char s[5]="ULDR";
int vis[N][N],dir[4][2]={1,0,0,1,-1,0,0,-1};int fll=1,n;void bfs(P p){queue<P> que;que.push(p);ans[p.first][p.second]='X';vis[p.first][p.second]=1;while(que.size()){P np=que.front();que.pop();for(int i=0;i<4;i++){int x=np.first+dir[i][0];int y=np.second+dir[i][1];if(x<1||x>n||y<1||y>n)continue;if(vis[x][y]) continue;if(ma[x][y]!=p) continue;vis[x][y]=1;ans[x][y]=s[i];que.push(P(x,y));}}
}
void bfs1(P p){queue<P> que;que.push(p);vis[p.first][p.second]=1;int f=0;while(que.size()){P np=que.front();que.pop();for(int i=0;i<4;i++){int x=np.first+dir[i][0];int y=np.second+dir[i][1];if(x<1||x>n||y<1||y>n)continue;if(vis[x][y]) continue;if(ma[x][y]!=P(-1,-1))continue;if(!f){f=1;ans[p.first][p.second]=s[(i+2)%4];}vis[x][y]=1;ans[x][y]=s[i];que.push(P(x,y));}}fll&=f;
}int main(){scanf("%d",&n);rep(i,1,n)rep(j,1,n)scanf("%d %d",&ma[i][j].first,&ma[i][j].second);rep(i,1,n)rep(j,1,n)if(!vis[i][j]&&ma[i][j]==P(i,j))   bfs(P(i,j));rep(i,1,n)rep(j,1,n)if(!vis[i][j]&&ma[i][j]==P(-1,-1))    bfs1(P(i,j));rep(i,1,n)rep(j,1,n)if(!vis[i][j]) fll=0;if(!fll) puts("INVALID");else{puts("VALID");rep(i,1,n){rep(j,1,n)    printf("%c",ans[i][j]);puts("");}}return 0;
}
/*
2
1 1 -1 -1
2 2 2 2
*/

E. Team Building

题意:大意:n个人,选k个观众,p个球员,每个人当观众的能力为ai, 在每个位置的能力为s[i][j],让你选择p+k 个人使得能力和最大。

不太会写,搜的题解:来源

两个条件如果分开讨论的话,

只考虑a[i]  直接把a从大往小排序选前k个即可,

只考虑选球员,p<=7  状压一下,套个dp转移一下就行。

这里就是两个合在一起了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int n,p,k;
ll dp[N][(1<<7)],s[N][10],a[N],d[N];
bool cmp(int x,int y)
{return a[x]>a[y];
}
int main()
{scanf("%d%d%d",&n,&p,&k);for(int i=1;i<=n;++i) {scanf("%d",&a[i]);d[i]=i;}for(int i=1;i<=n;++i)for(int j=1;j<=p;++j) scanf("%d",&s[i][j]);sort(d+1,d+1+n,cmp);memset(dp,-1,sizeof(dp));dp[0][0]=0;int len=1<<p;for(int i=1;i<=n;++i){for(int j=0;j<len;++j){int t=0;for(int q=0;q<p;++q) if((1<<q)&j) t++;if(i-1-t>=k&&dp[i-1][j]!=-1) dp[i][j]=dp[i-1][j];//选满了else if(i-1-t<k&&dp[i-1][j]!=-1)dp[i][j]=max(dp[i][j],dp[i-1][j]+a[d[i]]);//没选满 由于a[i]排了序,所以这里必定选才是最大}for(int j=0;j<len;++j)for(int q=0;q<p;++q)if(!((1<<q)&j)&&dp[i-1][j]!=-1)dp[i][j|(1<<q)]=max(dp[i][j|(1<<q)],dp[i-1][j]+s[d[i]][q+1]);}//printf("dp[1][0]:%lld dp[1][1]:%lld\n",dp[1][0],dp[1][1]);printf("%lld\n",dp[n][(1<<p)-1]);return 0;
}

CodeCraft-20 (Div. 2)(C(本原多项式) D (BFS) E (状压+dp))相关推荐

  1. Tunnels HDU - 4856 (bfs状压dp)

    Tunnels HDU - 4856 Bob is travelling in Xi'an. He finds many secret tunnels beneath the city. In his ...

  2. [2021-09-09 T3] 序列/luogu P3943 星空(异或差分+bfs最短路+状压dp)

    序列 description solution code description 题目描述 长度为nnn的序列,初始全为000,每次可以选择⼀个数ai(1≤i≤l)a_i(1\le i\le l)ai ...

  3. HDU-4856 Tunnels(BFS状压DP)

    Tunnels http://acm.hdu.edu.cn/showproblem.php?pid=4856 Time Limit: 3000/1500 MS (Java/Others)    Mem ...

  4. QDUOJ 来自xjy的签到题(bfs+状压dp)

    来自xjy的签到题 Description 爱丽丝冒险来到了红皇后一个n*n大小的花园,每个格子由'.'或'#'表示,'.'表示爱丽丝可以到达这个格子,'#'表示爱丽丝不能到达这个格子,爱丽丝每1分钟 ...

  5. Codeforces Round #585 (Div. 2) E. Marbles 状压dp + 逆序对

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑数列最终的状态一定是相同颜色在一起,所以我们发现他的颜色是有顺序的!显然可以用状压dpdpdp来枚举颜色的顺序,但是又有问题了,你怎么确定当前这个 ...

  6. [状压DP][BFS][哈希]JZOJ 3243 Cube

    Description 你被困在一个密室里.经过一轮摸索,你在密室里有所发现: 1.密室是一个呈m×n网格的长方形,地面有六个格子被上了色: 2.密室地面部分格子可能有障碍物: 3.密室的某一格有一个 ...

  7. HDU - 3247 Resource Archiver(AC自动机+状压dp+bfs)

    题目链接:点击查看 题目大意:给出 n 个目标串和 m 个病毒串,要求构造出一个长度最短的,且包含全部 n 个目标串,但是不能包含任意一个病毒串的01字符串,输出其最短长度 题目分析:比较综合的一道题 ...

  8. Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp

    传送门 文章目录 题意: 思路: 题意: 给你一个串,只包含前kkk个字母和???,定义fif_ifi​表示第iii个字母在串中出现的最长连续长度,你现在需要将???替换为前kkk个字母,使得mini ...

  9. Codeforces Round #622 (Div. 2) D. Happy New Year 状压dp

    传送门 文章目录 题意: 思路: 题意: n≤1e5,m≤1e9,k≤8.n\le 1e5,m\le 1e9,k\le 8.n≤1e5,m≤1e9,k≤8. 思路: 注意到题目中保证了每个孩子至多收到 ...

最新文章

  1. 微信小程序框架封装登录,网络请求等公共模块及调用示例
  2. Linux下支持rz/sz上传下载文件
  3. matlab中svd函数用法总结
  4. easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍
  5. Windows 10 IoT Core 17101 for Insider 版本更新
  6. sql 2008 每次打开一个表都要登录_如何实现一个简易的orm
  7. bond解除 centos7_centos7上实现bonding
  8. 键值 keyCode事件属性
  9. 网页与服务器 — 重定向常见异常状态码
  10. 关于值传递和指针传递
  11. RADIUS服务器的演变过程
  12. SiteMesh框架
  13. Docker学习笔记08-----Docker Harbor使用详解
  14. 还记得儿时的那片海么?
  15. 极客时间左耳听风-高效学习
  16. 7-3 计算平均成绩(15 分)(转载)
  17. Error - 使用statsmodels报错ModuleNotFoundError: No module named 'pandas.tseries.tools'
  18. Android Studio配置阿里云代理,Gradle 配置国内镜像
  19. 通过电影票房预测来一览机器学习一般流程
  20. 4位数字验证码图片识别 +tensorflow+CNN

热门文章

  1. FTP 登陆的常见问题与FTP命令集锦
  2. 以太坊的MPT树,以及编码,leveldb存储
  3. sbm matlab,超效率sbm模型matlab-如何用matlab估计空间杜宾模型
  4. 华大单片机HC32L136定时器时间如何计算
  5. 数据结构——用户登陆系统
  6. WGS84、GCJ-02、BD-09、图吧坐标简介及坐标转换实现(java版)
  7. 2D卷积与3D卷积的区别
  8. 计算机人离开后保护,设置屏幕保护密码防止他人在自己离开时偷窥
  9. yagmail发邮件辅助系统(一)
  10. MATLAB对数图拟合,求助,MATLAB中对数分布拟合问题