CF424
A. Squats

题目意思:

有n(n为偶数)个x和X,求最少的变换次数,使得X的个数为n/2,输出变换后的序列。

解题思路:

统计X的个数ans,和n/2比較,少了的话,须要把n/2-ans个x变成X,多了的话须要把ans-n/2个X变成x.(从前往后扫一遍即可了)。

代码:

//#include<CSpreadSheet.h>

#include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#include<cmath>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#define M 1000000007
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; char save[220];
int n;
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout); while(~scanf("%d",&n))
{
int ans=0; scanf("%s",save+1);
for(int i=1;i<=n;i++)
if(save[i]=='X')
ans++;
printf("%d\n",abs(n/2-ans));
if(ans<n/2)
{
int cnt=0;
for(int i=1;i<=n;i++)
{
if(cnt>=(n/2-ans))
{
printf("%c",save[i]);
continue;
}
if(save[i]=='x')
{
cnt++;
printf("X");
}
else
printf("X");
}
}
else
{
int cnt=0;
for(int i=1;i<=n;i++)
{
if(cnt==(ans-n/2))
{
printf("%c",save[i]);
continue;
}
if(save[i]=='X')
{
cnt++;
printf("x");
}
else
printf("x");
}
}
putchar('\n'); }
return 0;
}

CF 424B.
Megacity

题目意思:

给一个中心城市的坐标(0,0)和人口s,n个周围城市。告诉n个城市的人口及位置坐标,求以中心城市为圆心的最小的半径,使得人口总数超过1000000-s.

解题思路:

先求出每一个城市距离中心城市的距离,然后对距离从小到大排序,然后依次扫描,假设达到要求,就退出输出最小的半径。

代码:

//#include<CSpreadSheet.h>

#include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#include<cmath>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#define M 1000000007
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; #define Maxn 1100
struct Point
{
double x,y;
double dis;
int v;
}pp[Maxn];
int n,s;
int dp[Maxn]; bool cmp(struct Point a,struct Point b)
{
return a.dis<b.dis;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout); while(~scanf("%d%d",&n,&s))
{
for(int i=1;i<=n;i++)
{
double x,y; scanf("%lf%lf%d",&x,&y,&pp[i].v);
pp[i].x=x;
pp[i].y=y;
pp[i].dis=sqrt(x*x+y*y);
}
sort(pp+1,pp+n+1,cmp); /*for(int i=1;i<=n;i++)
printf("i:%d %lf\n",i,pp[i].dis);*/
double ans;
if(s>=1000000)
{
printf("0\n");
continue;
}
int lef=1000000-s;
int i=1; while(lef>0&&i<=n)
{
ans=pp[i].dis;
lef-=pp[i].v;
i++;
}
if(lef>0)
{
printf("-1\n");
continue;
} printf("%lf\n",ans); }
return 0;
}

CF 424C.
Magic Formulas

题目意思:

给定pi,求Q。

解题思路:

抑或运算满足交换律和结合律。

原式能够等价于先对pi所有抑或。然后对每一个i(1=<i<=n),求出1~n对i求模再抑或,能够发现一直是1~i-1 1~i-1..... 所以假设n/i是偶数抑或值为0。假设是奇数抑或值为1^2^3^4...^i-1 最后余数是1~n%i .

预处理出dp[i]=1^2^3..^i

代码:

//#include<CSpreadSheet.h>

#include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#include<cmath>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#define M 1000000007
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; #define Maxn 1100000 int dp[Maxn];
int n; void init()
{
dp[0]=0;
for(int i=1;i<=1000000;i++)
dp[i]=dp[i-1]^i;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
init();
while(~scanf("%d",&n))
{
int ans=0; for(int i=1;i<=n;i++)
{
int p; scanf("%d",&p);
ans=ans^p; if((n/i)&1) //ÆæÊý
{
ans=ans^dp[i-1];
}
ans=ans^dp[n%i];
}
printf("%d\n",ans);
}
return 0;
}

CF 424D.
Biathlon Track

题目意思:

给一个2维矩阵。给三个參数tp(相等),tu(大于),td(小于),t(总时间),每一个格子有个权值,求一个矩阵(长>=3&&宽>=3),使得边缘走完的总时间T,与t尽可能靠近。输出矩阵的左上角坐标和右下角坐标。

解题思路:

dp+预处理

o(n^3*lgn)  枚举两列i,j 把最后一行的 形如 |_| 值丢进set里,从第n-2行開始枚举,求出形如 |_|  的值v,二分查找t-v 找到最接近的,更新。

使用set<pair<int,int> >里的lower_bound函数。

此题的关键在于仅仅用枚举三维。两列和一行 构造 |_| 形状。直接用lower_bound得出最接近的矩形的值。

l[i][j]表示从位置(i,j)水平走到左边界的时间值

r[i][j]表示从最左边向右水平走到位置(i,j)所需时间值

u[i][j]表示从位置(i,j)竖直向上走到上边界的时间值

d[i][j]表示从上边界竖直向下走到位置(i,j)所需时间值

代码:

//#include<CSpreadSheet.h>

#include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#include<cmath>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#define M 1000000007
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; #define Maxn 330 int save[Maxn][Maxn],l[Maxn][Maxn],r[Maxn][Maxn],u[Maxn][Maxn],d[Maxn][Maxn];
int n,m,t;
set<pair<int,int> >mys;
int x1,yy1,x2,y2;
int tp,tu,td,ans; void get()
{
for(int i=0;i<=n;i++)
save[i][0]=0;
for(int i=0;i<=m;i++)
save[0][i]=0;
//memset(l,0,sizeof(l));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{ if(j!=1) //这个能够不要 仅仅求时间差
{
if(save[i][j]>save[i][j-1])
r[i][j]=r[i][j-1]+tu,l[i][j]=l[i][j-1]+td;
else if(save[i][j]==save[i][j-1])
r[i][j]=r[i][j-1]+tp,l[i][j]=l[i][j-1]+tp;
else
r[i][j]=r[i][j-1]+td,l[i][j]=l[i][j-1]+tu;
}
if(i!=1) //这个能够不要 仅仅求时间差
{
if(save[i][j]>save[i-1][j])
u[i][j]=u[i-1][j]+td,d[i][j]=d[i-1][j]+tu;
else if(save[i][j]==save[i-1][j])
u[i][j]=u[i-1][j]+tp,d[i][j]=d[i-1][j]+tp;
else
u[i][j]=u[i-1][j]+tu,d[i][j]=d[i-1][j]+td;
}
//printf("i:%d j:%d r:%d l:%d u:%d d:%d\n",i,j,r[i][j],l[i][j],u[i][j],d[i][j]);
//system("pause");
}
} int get_down(int i,int j,int k) //求出 |_|
{
return d[k][j]+u[k][i]+l[k][j]-l[k][i];
}
int get_up(int i,int j,int k) //求出 |_| 注意两竖的为负。方向
{
return -d[k][j]-u[k][i]+r[k][j]-r[k][i];
}
void update(int i,int j,int k,set<pair<int,int> >::iterator it,int up)
{
int ff=(*it).first,ss=(*it).second; if(abs(ff+up-t)<ans)
{
ans=abs(ff+up-t);
x1=k,yy1=i;
x2=ss,y2=j;
}
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(~scanf("%d%d%d",&n,&m,&t))
{
scanf("%d%d%d",&tp,&tu,&td);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&save[i][j]);
get();
ans=INF;
for(int i=1;i<=m;i++)
{
for(int j=i+2;j<=m;j++)
{
mys.clear();
mys.insert(make_pair(get_down(i,j,n),n)); for(int k=n-2;k>=1;k--)
{
int temp=get_up(i,j,k); set<pair<int,int> >::iterator it; it=mys.lower_bound(make_pair(t-temp,k)); if(it!=mys.end())
update(i,j,k,it,temp);
if(it==mys.begin())
{
mys.insert(make_pair(get_down(i,j,k+1),k+1));
continue;
}
it--;
update(i,j,k,it,temp);
mys.insert(make_pair(get_down(i,j,k+1),k+1)); }
}
}
//printf("%d\n",get_up(1,4,1)+get_down(1,4,4));
//printf("%d\n",ans);
printf("%d %d %d %d\n",x1,yy1,x2,y2);
}
return 0;
}

Codeforces Round #242 (Div. 2) &lt;A-D&gt;的更多相关文章

  1. Codeforces Round #242 (Div. 2) C题

    题目链接:http://codeforces.com/contest/424/problem/C, 想来一个小时,就是做不出,都做出来了,悲剧! 分析:我们知道交换异或的顺序不影响答案! 然后就是求t ...

  2. Codeforces Round #242 (Div. 2) A. Squats

    注意题目一次只能改变一个松鼠,Pasha can make some hamster ether sit down or stand up.是单数不是复数 #include <iostream& ...

  3. Codeforces Round #242 (Div. 2) B. Megacity

    按照半径排序,然后累加人数直到超过百万 #include <iostream> #include <algorithm> #include <cmath> #inc ...

  4. Codeforces Round #242 (Div. 2) C. Magic Formulas

    解题思路是: Q=q1^q2.......^qn = p1^p2......^pn^((1%1)^....(1%n))^((2%1)^......(2%n))^.... 故Q的求解过程分成两部分 第一 ...

  5. Codeforces Round #242 (Div. 2) C. Magic Formulas (位异或性质 找规律)

    题目 比赛的时候找出规律了,但是找的有点慢了,写代码的时候出了问题,也没交对,还掉分了.... 还是先总结一下位移或的性质吧: 1.  交换律 a ^ b = b ^ a 2. 结合律 (a^b) ^ ...

  6. Codeforces Round #242 (Div. 2) A~C

    题目链接 A. Squats time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputou ...

  7. Codeforces Round #242 (Div. 2)C(找规律,异或运算)

    一看就是找规律的题.只要熟悉异或的性质,可以秒杀. 为了防止忘记异或的规则,可以把异或理解为半加运算:其运算法则相当于不带进位的二进制加法. 一些性质如下: 交换律: 结合律: 恒等律: 归零律: 典 ...

  8. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  9. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

随机推荐

  1. centos之jdk安装

    1.环境说明 系统:centos6.7, 2.6.32-573.el6.x86_64; jdk:jdk1.7.0_80 2.下载jdk并上传      下载jdk-7u80-linux-x64.tar ...

  2. 走进C标准库(1)——assert.h,ctype.h

    默默觉得原来的阅读笔记的名字太土了,改了个名字,叫做走进C标准库. 自己就是菜鸟一只,第一次具体看C标准库,文章参杂了对<the standard C library>的阅读和对源码的一些 ...

  3. MYSQL 错误日志

    背景知识 : 就算我们不配置mysql的错误文件,它也会有一个默认的,在data文件夹下保存(.err文件) 还好这个文件保存在哪我们还是可以配置的 配置方法: log-err=E:\DB\mysql ...

  4. SQL Server 查看数据页面

    第一步: 找到表的第一页dbcc ind(db_name,table_name,-1); 例子. dbcc ind(studio,person,-1);# pageFID  是文件号   pagePI ...

  5. git创建标签

    创建标签 在Git中打标签非常简单,首先,切换到需要打标签的分支上: $ git branch * dev master $ git checkout master Switched to branc ...

  6. overfllow的解析

    参数是scroll时候,必会出现滚动条.参数是auto时候,子元素内容大于父元素时出现滚动条.参数是visible时候,溢出的内容出现在父元素之外.参数是hidden时候,溢出隐藏.

  7. mysql 5.6密码强度插件使用

    在mysql 5.6对密码的强度进行了加强,推出了validate_password 插件.支持密码的强度要求. 此插件要求版本:5.6.6 以上版本安装方式: 1.安装插件:(默认安装了插件后,强度 ...

  8. 《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  9. 前端新人学习笔记-------html/css/js基础知识点

    即将毕业的软件工程大学生一枚,秋季招聘应聘的是Android,今年来到公司实习,要求做前端开发,所以一切只有现学,现在根据视频来学习,然后开这个博客记录一下自己的学习过程,废话不多说,开写. 4月6日 ...

  10. api文档生成工具 C#

    要为编写的程序编写文档,这是件费力气的事,如果能自动生成就好了. 不怕做不到,就怕想不到.这不,搜索到了Sandcastle 比较好的参考文章: 1.Sandcastle官方网址: http://sh ...