Codeforces Round #321 (div. 2)
来源:互联网 发布:电脑端扫描仪软件 编辑:程序博客网 时间:2024/05/22 13:50
【A. Kefa and First Steps】
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>using namespace std;int main(){int n,a,b=-1,ans=0,maxn=-10;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a);if(a>=b){b=a;ans++;}else{maxn=max(maxn,ans);ans=1;b=a;}}maxn=max(maxn,ans);printf("%d\n",maxn);return 0;}
【B. Kefa and Company】
用优先队列做,先按照m由小到大排序,用优先队列维护m的差值为d的一段
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>#include <vector>#include <queue>using namespace std;#define inf 100005#define ll __int64struct node{ll m,s;}e[inf];struct cmpy{bool operator ()(const node n1,const node n2) {return n1.m>n2.m;}};bool cmp(node a,node b) {return a.m<b.m;}int main(){int n,d;scanf("%d%d",&n,&d);priority_queue<node,vector<node>,cmpy>q;for(int i=0;i<n;i++){scanf("%I64d%I64d",&e[i].m,&e[i].s);}ll ans=0,maxn=-10;sort(e,e+n,cmp);q.push(e[0]);ans=e[0].s;for(int i=1;i<n;i++){if(e[i].m-q.top().m>=d) {maxn=max(ans,maxn);while(e[i].m-q.top().m>=d && !q.empty()){node p=q.top();q.pop();ans-=p.s;}}q.push(e[i]);ans+=e[i].s;}maxn=max(maxn,ans);printf("%I64d\n",maxn);return 0;}
【C. Kefa and Park】
搜索
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>#include <vector>using namespace std;#define inf 100005vector<int>vec[inf];int tree[inf],vis[inf];int n,k,ans;void dfs(int u,int t){if(vec[u].size()==1 && vis[vec[u][0]]==1) {ans++;return;}vis[u]=1;int ti;for(int i=0;i<vec[u].size();i++){int v=vec[u][i];if(vis[v]==1) continue;if(tree[v]==0) ti=0;else ti=t+1;if(ti>k) continue;dfs(v,ti);}}int main(){memset(tree,0,sizeof(tree));memset(vis,0,sizeof(vis));scanf("%d%d",&n,&k);for(int i=1;i<=n;i++) scanf("%d",&tree[i]);for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);vec[u].push_back(v);vec[v].push_back(u);}ans=0;dfs(1,tree[1]);printf("%d\n",ans);return 0;}
【D. Kefa and Dishes】
状压dp,一共18 道菜,用s(1<<i)表示一种状态
dp[ ss ][ j ] = max(dp[ ss ][ i ]+p[ j ]+vis[ i ][ j ])
i表示这道菜已经吃过了,j表示接下来吃这道菜
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>using namespace std;#define ll __int64int p[20],vis[20][20];ll dp[(1<<18)+5][20];int main(){int n,m,k;scanf("%d%d%d",&n,&m,&k);for(int i=0;i<n;i++){scanf("%d",&p[i]);}memset(vis,0,sizeof(vis));for(int i=0;i<k;i++){int a,b;ll c;scanf("%d%d%d",&a,&b,&c);a--,b--;vis[a][b]=c;}for(int i=0;i<n;i++){dp[1<<i][i]=p[i];}int oo=1<<n;ll ans=0; for(int s=0;s<=oo;s++){int tot=0;for(int i=0;i<n;i++){if((s&(1<<i))==0) continue;tot++;for(int j=0;j<n;j++){if((s&(1<<j))!=0) continue;int ss=s|(1<<j);dp[ss][j]=max(dp[ss][j],dp[s][i]+p[j]+vis[i][j]);}}if(tot==m){for(int i=0;i<n;i++){ans=max(ans,dp[s][i]);}}}printf("%I64d\n",ans);return 0;}
【E. Kefa and Watch】
0 0
- Codeforces Round #321 (div. 2)
- Codeforces round #321 (DIV. 2)
- Codeforces Round #321 (Div. 2)
- Codeforces Round #321 (Div. 2)
- Codeforces Round #321 (Div. 2)
- 【codeforces】Codeforces Round #441(div.2)
- Codeforces Round #321 (Div. 2)(A)模拟
- Codeforces Round #321 (Div. 2)(C)模拟,DFS
- Codeforces Round #321 (Div. 2) 简要记录
- Codeforces Round #321 (Div. 2) ABC
- Codeforces Round #321 (Div. 2) B 二分
- Codeforces Round #321 (Div. 2) C DFS
- Codeforces Round #321 (Div. 2) D
- Codeforces Round #129 (Div. 2)
- Codeforces Round #158 (Div. 2) (完全)
- Codeforces Round #160 (Div. 2)(完全)
- Codeforces Round #161 (Div. 2)(完全)
- Codeforces Round #162 (Div. 2) (完全)
- 【小练】树状数组&线段树
- 表达式 -- 2015/09/22
- 练习9.2
- Java数据结构与算法之2的n次方判定
- systemctl 命令用法
- Codeforces Round #321 (div. 2)
- PHP面试
- iOS 自动集成单元测试 - Jenkins与xctool整合
- NYOJ 837 Wythoff Game(威佐夫博奕公式利用)
- UnityGUI 基础
- ZOJ.2421 Recaman's Sequence【暴力打表】 2015/09/24
- noip模拟小象涂色
- Android Studio安装SVN
- poj 3070 Fibonacci 【矩阵快速幂】