A题:Opponents

直接模拟

#include <bits/stdc++.h>
using namespace std;
char ch[];
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
int p=,sta=,first=,ans;
for(int i=;i<k;i++)
{
sta=;
scanf("%s",ch);
for(int i=;i<n;i++) sta&=(ch[i]-'');
if(sta==) p++;
if(sta==||(i==k-))
{
if(first) {ans=p;first=;}
else
{
ans=max(ans,p);
}
p=;
}
}
printf("%d\n",ans);
}
return ;
}

B题: Lovely Palindromes
偶数长度的回文串
可以把这个回文串当做两半来处理,对于任何一个数字,只要把它反转后加到
数字尾,就可以形成一个回文串,且符合偶数长度的条件
既然任何数字都可以,那么第n个数就是以n来构造的

#include <bits/stdc++.h>
using namespace std;
const int Max=1e5+;
char ch[Max];
int main()
{
while(~scanf("%s",ch))
{
printf("%s",ch);
reverse(ch,ch+strlen(ch));
printf("%s\n",ch);
}
return ;
}

C题:NP-Hard Problem
要求将一张图分成两个顶点集合,每个集合包含所有的边
要使得这样的集合成立,必须把每一条边上的两点分别分到两个集合中去
可以利用并查集分点,一个集合祖先节点小于等于n(小于等于(因为n+n))
另一个祖先节点大于n。
这两个集合有没有交集取决于同一条边上的两个顶点不能在同一集合

#include <bits/stdc++.h>
using namespace std;
const int Max=1e5+;
int fa[Max*];
int find(int x)
{
return fa[x]==-?x:fa[x]=find(fa[x]);
}
void Union(int x,int y)
{
int f1=find(x),f2=find(y);
if(f1!=f2) fa[f1]=f2;
}
vector<int>ans1,ans2;
int vis[Max];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(fa,-,sizeof(fa));
memset(vis,,sizeof(vis));
int u,v,flag=;
for(int i=;i<=m;i++)
{
scanf("%d%d",&u,&v);
if(find(u)==find(v)) flag=; //两个顶点已经在同一集合,无解
Union(u,v+n);
Union(u+n,v);
vis[u]=vis[v]=;
}
ans1.clear();ans2.clear();
for(int i=;i<=n;i++)
{
if(!vis[i]) continue;
if(find(i)<=n) ans1.push_back(i);
else ans2.push_back(i);
}
if(ans1.empty()||ans2.empty()||flag) puts("-1");
else
{
if(ans1.size()>ans2.size()) swap(ans1,ans2);
printf("%d\n",ans1.size());
for(int i=;i<ans1.size();i++)
{
if(i) printf(" ");
printf("%d",ans1[i]);
}
printf("\n%d\n",ans2.size());
for(int i=;i<ans2.size();i++)
{
if(i) printf(" ");
printf("%d",ans2[i]);
}
puts("");
}
}
return ;
}

同样地,既然已经知道了解这道题的关键就是让每一条边的两个点分散到
两个不同的集合里面,那么直接dfs进行染色也是一个简洁易写的方法

#include <bits/stdc++.h>
using namespace std;
const int Max=1e5+;
vector<int>G[Max];
vector<int>ans1,ans2;
int vis[Max],col[Max];
bool dfs(int u,int c,int pre)
{
col[u]=c;
int v;
for(int i=;i<G[u].size();i++)
{
v=G[u][i];
if(v==pre) continue;
if(col[v]==c) return ;
if(col[v]!=-) continue;
if(!dfs(v,!c,u)) return ;
}
return ;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(vis,,sizeof(vis));
memset(col,-,sizeof(col));
int u,v;
for(int i=;i<=m;i++)
{
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
vis[u]=vis[v]=;
}
int root,flag=;
for(int i=;i<=n;i++) if(vis[i])
{
root=i;
if(col[root]!=-) continue;
if(!dfs(root,,)) flag=;
}
if(flag) puts("-1");
else
{
ans1.clear();ans2.clear();
for(int i=;i<=n;i++)
{
if(col[i]==) ans1.push_back(i);
if(col[i]==) ans2.push_back(i);
}
if(ans1.size()>ans2.size()) swap(ans1,ans2);
printf("%d\n",ans1.size());
for(int i=;i<ans1.size();i++)
{
if(i) printf(" ");
printf("%d",ans1[i]);
}
printf("\n%d\n",ans2.size());
for(int i=;i<ans2.size();i++)
{
if(i) printf(" ");
printf("%d",ans2[i]);
}
puts("");
}
}
return ;
}

D题:Remainders Game
已知:
x mod c1 = m1
x mod c2 = m2
......
x mod cn = mn
这里要求知道x mod (k)的值,那么就要求lcm(c1,c2,c3,.....,cn)==k,并且ci之间互质

#include <bits/stdc++.h>
#define scan(x,y) scanf("%d%d",&x,&y)
using namespace std;
typedef long long LL;
const int Max=1e5+;
int n,m;
LL gcd(LL a,LL b)
{
return b==?a:gcd(b,a%b);
}
int main()
{
scan(n,m);
LL ans=;
int x;
for(int i=;i<=n;i++)
{
scanf("%d",&x);
ans=gcd((LL)m,ans*(LL)x/gcd(ans,x));
}
if(ans==(LL)m) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return ;
}

E题:The Values You Can Make
有n个价值不一的硬币,问能够凑出的所有面值(<=m)
dp[i][j],意为已经拥有j面值的情况下,能否凑成j面值
1.dp[0][0]=1
2.if(dp[l-x][j]) dp[l][j]=1 and dp[l][j+x]=1;
3.已拥有的硬币转移方向应该从大到小,因为用一枚硬币不能使用多次,不能对后面的
数值持续影响

#include <bits/stdc++.h>
using namespace std;
const int Max=+;
short dp[Max][Max];
vector<int>ans;
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
memset(dp,,sizeof(dp));
dp[][]=;
int x;
for(int i=;i<n;i++)
{
scanf("%d",&x);
for(int l=k;l>=x;l--)
{
for(int r=;r<=k-x;r++)
{
if(dp[l-x][r]) dp[l][r]=dp[l][r+x]=;
}
}
}
ans.clear();
for(int i=;i<=k;i++)
{
if(dp[k][i]) ans.push_back(i);
}
printf("%d\n",ans.size());
for(int i=;i<ans.size();i++)
{
if(i) printf(" ");
printf("%d",ans[i]);
}
puts("");
}
return ;
}

套题 codeforces 360的更多相关文章

  1. 套题 codeforces 359

    A题:Free Ice Cream 注意要使用LL,避免爆int #include <bits/stdc++.h> #define scan(x,y) scanf("%d%d&q ...

  2. 套题 codeforces 361

    A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...

  3. 套题 Codeforces Round #277 (Div. 2)

    A. Calculating Function 水题,分奇数偶数处理一下就好了 #include<stdio.h> #include<iostream> using names ...

  4. Educational Codeforces Round 15 套题

    这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...

  5. [codeforces 360]A. Levko and Array Recovery

    [codeforces 360]A. Levko and Array Recovery 试题描述 Levko loves array a1, a2, ... , an, consisting of i ...

  6. 第46套题【STL】【贪心】【递推】【BFS 图】

    已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...

  7. 【套题】qbxt国庆刷题班D1

    Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...

  8. Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告

    写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...

  9. Codeforces Round #579 (Div. 3) 套题 题解

    A. Circle of Students      题目:https://codeforces.com/contest/1203/problem/A 题意:一堆人坐成一个环,问能否按逆时针或者顺时针 ...

随机推荐

  1. 最近自己封装了个JS脚本,用来创建和操作Table

    基于JQuery封装的Table操作脚本 /** 依赖JQuery **/ (function () { var Table = window.Table = function (rowCount, ...

  2. Thailand vs Soros

    | exchange rate | | Thailand | Soros | |---------------+---------+----------+---------| | | orgin | ...

  3. numberOfRowsInSection方法什么时候调用

    昨天在代码里遇到个问题,很简单的数组越界,但是真心觉得自己把数据处理的思路都理清了不应该会出现这种情况,而且打印出来出现了"灵异事件",那就是行数只有14行,但是cell加载到了1 ...

  4. sk_buff封装和解封装网络数据包的过程详解(转载)

    http://dog250.blog.51cto.com/2466061/1612791 可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体 ...

  5. JavaWeb技术(一):JDBC简介

    一.  JDBC简介 1. Java Database Connectivity(JDBC) 使用JDBC可以对数据库进行访问 2. JDBC的核心接口 1)DriverManager 驱动管理器接口 ...

  6. 【openresty】向lua代码中传递参数

    前面介绍FormInputNginxModule模块时,明白了openresty如何获取post提交的数据. 然后,如果需要通过lua处理这些数据,需要把数据作为参数传递到lua中,lua获取了这些数 ...

  7. 获取 IP 地址

    package j2se.core.net.base; import java.net.InetAddress;import java.net.UnknownHostException; public ...

  8. android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别

    android Activity类中的finish().onDestory()和System.exit(0) 三者的区别 Activity.finish() Call this when your a ...

  9. PHP获取当前服务器信息的基本语句

    下面是PHP获取当前服务器信息的基本语句. PHP程式版本: <?PHP echo PHP_VERSION; ?> ZEND版本: <?PHP echo zend_version() ...

  10. 【Mail】邮件的基础知识和原理

    电子邮件概念 电子邮件是-种用电子手段提供信息交换的通信方式,是互联网应用最广的服务.通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费).非常快速的方式(几秒钟之内可以 ...