Codeforces Round #207 (Div. 2)
A:超级大水题;
代码:
#include<cstdio>
#define maxn 105
using namespace std;
int n,a[maxn],x,y,ans;
int main()
{
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%d",&x);
a[i]=a[i-]+x;
ans+=x;
}
scanf("%d%d",&x,&y);
int i;
for(i=; i<=n; i++)
if(a[i]>=x&&a[i]<=y&&(ans-a[i])>=x&&(ans-a[i])<=y)
{
printf("%d",i+);
break;
}
if(i>n)printf("");
return ;
}
B:因为每次跳舞最多只有一个人以前跳过,所以很简单;
#include<cstdio>
#define maxn 100005
using namespace std; int n,m,color[maxn],x,y,z; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(color[x]!=)
{
color[y]=(-color[x])/+;
color[z]=(-color[x]-color[y]);
}
else if(color[y]!=)
{
color[x]=(-color[y])/+;
color[z]=(-color[x]-color[y]);
}
else if(color[z]!=)
{
color[x]=(-color[z])/+;
color[y]=(-color[x]-color[z]);
}
else
{
color[x]=;
color[y]=;
color[z]=;
}
}
for(int i=;i<=n;i++)
printf("%d ",color[i]);
return ;
}
C:自己没出,学习了大神们的代码
用并查集来缩点太妙了!
#include <cstdio>
using namespace std;
#define maxn 300100
int r[maxn],ret[maxn];
int find(int x)
{
if(x!=r[x])r[x]=find(r[x]);
return r[x];
}
int n,m,L,R,x;
int main()
{
scanf("%d%d",&n,&m);
for(int i=; i<=n+; i++)r[i]=i;
while(m--)
{
scanf("%d%d%d",&L,&R,&x);
int u;
u=find(L);
while()
{
if(u>=x)break;
ret[u]=x;
r[u]=u+;
u=find(u);
}
u=find(x+);
while()
{
if(u>R)break;
ret[u]=x;
r[u]=u+;
u=find(u);
}
}
for(int i=; i<=n; i++)
printf("%d ",ret[i]);
return ;
}
本题还可以用线段树来做,可惜当初学得太渣了!
花了一个下午学习线段树的延迟标记,终于会敲了!
线段树版代码:
#include<cstdio>
#define maxn 300010
using namespace std; struct tree
{
int l,r,flag;
tree *left,*right;
} tr[maxn<<]; int m,n,ans,a[maxn],b[maxn],c[maxn],treecount; void build(tree *root,int l,int r)
{
root->l=l;
root->r=r;
root->flag=;
if(l==r)return;
int mid=(l+r)>>;
treecount++;
root->left=tr+treecount;
treecount++;
root->right=tr+treecount;
build(root->left,l,mid);
build(root->right,mid+,r);
} void insert(tree *root,int l,int r,int w)
{
if(l<=root->l&&r>=root->r)
{
root->flag=w;
return;
}
if(root->flag!=)
{
root->left->flag=root->right->flag=root->flag;
root->flag=;
}
int mid=(root->l+root->r)>>;
if(r<=mid)insert(root->left,l,r,w);
else if(l>=mid+)insert(root->right,l,r,w);
else
{
insert(root->left,l,mid,w);
insert(root->right,mid+,r,w);
}
} void query(tree *root,int x)
{
if(root->l==root->r){ans=root->flag;return;}
if(root->flag!=)
root->left->flag=root->right->flag=root->flag;
int mid=(root->l+root->r)>>;
if(x<=mid)query(root->left,x);
else query(root->right,x);
} int main()
{
scanf("%d%d",&n,&m);
build(tr,,n);
for(int i=; i<m; i++)
scanf("%d%d%d",&a[i],&b[i],&c[i]);
for(int i=m-; i>=; i--)
{
if(c[i]!=a[i])insert(tr,a[i],c[i]-,c[i]);
if(c[i]!=b[i])insert(tr,c[i]+,b[i],c[i]);
}
insert(tr,c[m-],c[m-],);
for(int i=; i<=n; i++)
{
query(tr,i);
printf("%d ",ans);
}
return ;
}
D:
假设la是第一个字符串的长度,lb是第二个的长度;
如果求出他们的最小公倍数 l 长度的串的哈密顿距离就行了;
但是不能直接求;
方法:找到任一一串中每个字符所对应的另外一个字符串中所出现的字符;
然后统计起来,乘上相应的倍数就行了!
代码:
#define maxn 1000005
#define ll long long
#include<cstring>
#include<iostream>
using namespace std; char a[maxn],b[maxn];
ll cnt[maxn][];
ll gcd(ll x,ll y)
{
return (x%y)?gcd(y,x%y):y;
}
int main()
{
ll n,m,la,lb,g,l,ans;
cin>>n>>m;
cin>>a>>b;
la=strlen(a),lb=strlen(b);
g=gcd(la,lb);
l=la/g*lb;
ans=l;
for(ll i=;i<lb;i++)
cnt[i%g][b[i]-'a']++;
for(ll i=;i<la;i++)
ans-=cnt[i%g][a[i]-'a'];
cout<<ans*(n*la/l)<<endl;
return ;
}
E: 贪心
1.首先合并1和2,变成3;
2.如果1有剩,将1合并成3;如果合并完了之后还有剩:剩1,有3,+1;否则+2;
3.如果2有剩,将3个2合并成3,如果合并完之后还有剩,剩1个,有4,+1;否则+2;
代码:
#include<iostream>
using namespace std;
int n,ans,a[],x,s;
int main()
{
cin>>n;
while(n--)
{
cin>>x;
a[x]++,s+=x;
}
if(s<||s==){cout<<"-1";return ;}
ans+=x=a[]<a[]?a[]:a[];
a[]-=x,a[]-=x,a[]+=x;
if(a[])
{
ans+=*(x=a[]/);
a[]-=x*;
a[]+=x;
if(a[])
{
if(a[]==&&a[])ans++;
else ans+=;
}
}
else
{
ans+=*(x=a[]/);
a[]-=x*;
a[]+=x*;
if(a[])
{
if(a[]==&&a[])ans++;
else ans+=;
}
}
cout<<ans;
}
Codeforces Round #207 (Div. 2)的更多相关文章
- Codeforces Round #207 (Div. 1) A. Knight Tournament (线段树离线)
题目:http://codeforces.com/problemset/problem/356/A 题意:首先给你n,m,代表有n个人还有m次描述,下面m行,每行l,r,x,代表l到r这个区间都被x所 ...
- Codeforces Round #207 (Div. 1) A. Knight Tournament(STL)
脑子又卡了...来一发set的,STL真心不熟. #include <stdio.h> #include <string.h> #include <iostream> ...
- Codeforces Round #207 (Div. 2) A. Group of Students
#include <iostream> #include <vector> using namespace std; int main(){ ; cin >> m ...
- Codeforces Round #207 (Div. 1)B(数学)
数学so奇妙.. 这题肯定会有一个循环节 就是最小公倍数 对于公倍数内的相同的数的判断 就要借助最大公约数了 想想可以想明白 #include <iostream> #include< ...
- Codeforces Round #207 (Div. 2)C
读错题意了..线段树延迟标记 白刷这么多线段树 #include <iostream> #include<cstdio> #include<cstring> #in ...
- Codeforces Round #207 (Div. 1) B. Xenia and Hamming(gcd的运用)
题目链接: B. Xenia and Hamming 题意: 要求找到复制后的两个字符串中不同样的字符 思路: 子问题: 在两串长度是最大公倍数的情况下, 求出一个串在还有一个串中反复字符的个数 CO ...
- Codeforces Round #207 (Div. 1) D - Bags and Coins 构造 + bitset优化dp + 分段查找优化空间
D - Bags and Coins 思路:我们可以这样构造,最大的那个肯定是作为以一个树根,所以我们只要找到一个序列a1 + a2 + a3 .... + ak 并且ak为 所有点中最大的那个,那么 ...
- Codeforces Round #207 (Div. 2)A B C E 水 思路 set 恶心分类
A. Group of Students time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #207 (Div. 1) B (gcd的巧妙运用)
比赛的时候不知道怎么写... 太弱了. 看了别人的代码,觉得这个是个经典的知识点吧. gcd的巧妙运用 自己想的时候苦苦思考怎么用dp求解. 无奈字符串太长而想不出好的算法. 其实在把a和b字符串都分 ...
随机推荐
- 标准差(standard deviation)和标准误差(standard error)你能解释清楚吗?
by:ysuncn(欢迎转载,请注明原创信息) 什么是标准差(standard deviation)呢?依据国际标准化组织(ISO)的定义:标准差σ是方差σ2的正平方根:而方差是随机变量期望的二次偏差 ...
- GO的跨平台数扰类型
基本数据类型的包装: 1.跨平台,用于移植 2.不同的框架类型包装的类型(MFC ,WIN32SDK,C) 3.基本数据类型的组装成的结构体 4.宏定义 数字类型 Go 也有基于架构的类型,例如:in ...
- HDU2024JAVA
C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- Ⅵ.AngularJS的点点滴滴-- 指令
指令 基本用法 <html> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.2/angul ...
- Linux下搭建Oracle11g RAC(6)----安装Grid Infrastructure
从此步骤开始,我们正式安装Grid软件: ① 以grid用户登录图形界面,执行/home/grid/grid/runInstaller,进入OUI的图形安装界面: ② 进入OUI安装界面后,选择第3项 ...
- The hacker's sanbox游戏
第一关:使用/usr/hashcat程序,对passwd中root的密码进行解密,得到gravity98 执行su,输入密码gravity98. 第二关:获取提供的工具,wget http://are ...
- Visual Studio的性能测试工具
vs果然是宇宙最强大的IDE,这句话我经常挂在嘴边,反正觉得它挺强大 整个听技术经理说性能测试,然后我就觉得宇宙最强大的IDE应该 也有测试工具吧,那么我就百度了一下,又看看vs的选项,果然真有一个性 ...
- HTML5 <a>标签download 属性
一.简单实例 <a href="../images/1.jpg" download="下载图片.jpg"> 点击按钮下载 </a> 二. ...
- ASP.NET程序如何更新发布
ASP.NET程序如何更新发布 一.首先右键项目,点击“发布” 然后,新建名称.类型选择文件,然后点击下一步: 点击发布即可! 二.
- HDU2035 人见人爱A^B(快速幂)
描述: 求A^B的最后三位数表示的整数.说明:A^B的含义是“A的B次方”. 输入: 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A ...