套题 codeforces 360
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的更多相关文章
- 套题 codeforces 359
A题:Free Ice Cream 注意要使用LL,避免爆int #include <bits/stdc++.h> #define scan(x,y) scanf("%d%d&q ...
- 套题 codeforces 361
A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...
- 套题 Codeforces Round #277 (Div. 2)
A. Calculating Function 水题,分奇数偶数处理一下就好了 #include<stdio.h> #include<iostream> using names ...
- Educational Codeforces Round 15 套题
这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...
- [codeforces 360]A. Levko and Array Recovery
[codeforces 360]A. Levko and Array Recovery 试题描述 Levko loves array a1, a2, ... , an, consisting of i ...
- 第46套题【STL】【贪心】【递推】【BFS 图】
已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...
- 【套题】qbxt国庆刷题班D1
Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...
- Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告
写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...
- Codeforces Round #579 (Div. 3) 套题 题解
A. Circle of Students 题目:https://codeforces.com/contest/1203/problem/A 题意:一堆人坐成一个环,问能否按逆时针或者顺时针 ...
随机推荐
- Jquery遍历选中的input标签
$("input[name='chkAgent']:[checked]").each(function () { alert($(this).attr("value&qu ...
- 关于兼容性——百分比对于IE浏览器的影响
之前为了适应页面放大或者缩小,很多宽度都是写的百分比,后来发现有产生换行现象 总结一下: 如果页面是满占位的,我想百分比在谷歌.火狐都应该没什么问题,在IE 就会产生换行 因为IE浏览器存在一个四舍 ...
- h5页面唤起app(iOS和Android),没有安装则跳转下载页面
浏览器和app没有通信协议,所以h5不知道用户的手机释放安装了app.因此只能是h5去尝试唤起app,若不能唤起,引导用户去下载我们的app. 微信里屏蔽了 schema 协议,如果在微信中打开h5, ...
- Mongodb 服务(windows环境下)因被强制关闭,导致服务不能启动的处理办法
环境:windows 8操作系统下 前置条件:因操作系统原因,没有先停止mongodb服务,直接重启操作系统. 导致结果:mongodb服务无法启动,弹出框报错. Windows 无法启动MongoD ...
- lnode满,维护记录
df 17% 正常 df -i 100% inode耗尽. | uniq -c 查出占用lnode最大的目录是 /var/spool/exim4/input 居然有15W多个小文件 exim4是邮件 ...
- pil
http://effbot.org/imagingbook/ 一.安装 pip install PIL --allow-external PIL --allow-unverified PIL 出现 ...
- js代码学习
运算符: 复杂运算符:Math.pow(2,53) //=>9007192145641435:2的53次幂 Math.round(.6) //=>1.0:四舍五入 Math.ceil ...
- 通过viewmodel找到view
如何通过viewmodel找到view? 之前的做法是,在view加载时(Loaded),将view保存到viewmodel中,后来想想Caliburn-Micro,自带方法可以通过viewmodel ...
- @helper函数使用方法
这个函数方法,我也是通过别人博客看到的,感觉不错和大家一起学习分享一下. 1.自定义函数方法,只在同一个view视图文件里调用 Controller public ActionResult Index ...
- (Python )格式化输出、文件操作、json
本节学习Python的格式化输出,文件操作以及json的简单用法 1.格式化输出 将非字符串类型转换成字符串,可以使用函数:str() 或者repr() ,(这两个函数的区别目前我还没搞懂,求解答) ...