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)的更多相关文章

  1. 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所 ...

  2. Codeforces Round #207 (Div. 1) A. Knight Tournament(STL)

    脑子又卡了...来一发set的,STL真心不熟. #include <stdio.h> #include <string.h> #include <iostream> ...

  3. Codeforces Round #207 (Div. 2) A. Group of Students

    #include <iostream> #include <vector> using namespace std; int main(){ ; cin >> m ...

  4. Codeforces Round #207 (Div. 1)B(数学)

    数学so奇妙.. 这题肯定会有一个循环节 就是最小公倍数 对于公倍数内的相同的数的判断 就要借助最大公约数了 想想可以想明白 #include <iostream> #include< ...

  5. Codeforces Round #207 (Div. 2)C

    读错题意了..线段树延迟标记 白刷这么多线段树 #include <iostream> #include<cstdio> #include<cstring> #in ...

  6. Codeforces Round #207 (Div. 1) B. Xenia and Hamming(gcd的运用)

    题目链接: B. Xenia and Hamming 题意: 要求找到复制后的两个字符串中不同样的字符 思路: 子问题: 在两串长度是最大公倍数的情况下, 求出一个串在还有一个串中反复字符的个数 CO ...

  7. Codeforces Round #207 (Div. 1) D - Bags and Coins 构造 + bitset优化dp + 分段查找优化空间

    D - Bags and Coins 思路:我们可以这样构造,最大的那个肯定是作为以一个树根,所以我们只要找到一个序列a1 + a2 + a3 .... + ak 并且ak为 所有点中最大的那个,那么 ...

  8. 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 ...

  9. Codeforces Round #207 (Div. 1) B (gcd的巧妙运用)

    比赛的时候不知道怎么写... 太弱了. 看了别人的代码,觉得这个是个经典的知识点吧. gcd的巧妙运用 自己想的时候苦苦思考怎么用dp求解. 无奈字符串太长而想不出好的算法. 其实在把a和b字符串都分 ...

随机推荐

  1. (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间

    亲测一: 1.找到D:\MyEclipse 8.5\configuration\ config.ini 这个文件 2.找到这一行instance.area.default 3.将后面的地址替换为你想要 ...

  2. bootstrap学习和使用的经验总结

    第一肯定是下载 然后就是目录介绍,因为bootstrap是个轻量级的框架,目录不是很多,所以很容易理解,主要有用的就是三个文件,bootstrap.js,bootstrap.css,bootstrap ...

  3. 深入理解Javascript变量作用域

    在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c.函数中声明的变量在整个函数 ...

  4. servlet HttpSession 监听器

    一.Servlet中对象作用域 1. ServletContext 上下文 应用服务器一启动就产生该对象,服务器关闭即销毁 作用于全局,所有Servlet ,相当于静态变量 2. HttpSessio ...

  5. KMP算法_读书笔记

    下面是KMP算法的实现伪代码: KMP_MATCHER ( T, P ) . n = T.length . m = P.length . next = COMPUTE_PREFIX_FUNCTION ...

  6. Oracle 检验身份证是否正确的存储过程

    ) ) ); ); ); ); ); ); ); ; , , , , , , , , , , , , , , , , , ); ;  , ) );  ..  loop )) ) ); , )), ), ...

  7. CI 笔记 数据库

    demo: 1.  建立数据库,driver, 字段 name,telphone,idcard,car,content 2. 建立model,Driver_model.php文件, 建立add方法, ...

  8. iOS SDwebImage 使用说明

    SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下 ...

  9. struts2 Action 接收参数的三种方法

    刚学Struts2 时 大家可能遇到过很多问题,这里我讲一下Action 接收参数的三种方法,我曾经在这上面摔过一回.所以要警醒一下自己..... 第一种:Action里声明属性,样例:account ...

  10. 217. Contains Duplicate(C++)

    217. Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your ...