Codeforces Round #270

A - Design Tutorial: Learn from Math

题意:给出n,求出两个合数x和y使x+y=n。

题解:暴力筛合数,然后暴力找

 //#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll __int64
#define usint unsigned int
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,x,n) for(int i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1.out","w",stdout) bool a[]; int main() {
int x,i,n,j;
RD(n);
int n2=n/;
for(x=; x<=n2; x++) {
if(a[x]==) {
for(i=x+x; i<=n; i+=x) {
a[i]=;
}
}
}
for(x=;x<=n2;x++){
if(a[x]== && a[n-x]==)break;
}
printf("%d %d\n",x,n-x);
return ;
}

B - Design Tutorial: Learn from Life

题意:一堆人从1楼坐电梯,电梯一次最多装K人,给出各个人要去的各个楼层,上下电梯时间忽略不计,电梯移动一层需要1秒,求最少需要多少时间才能送完所有人并且电梯回到1楼。

题解:贪心,优先送最高的,空位顺便送低的。

 //#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll __int64
#define usint unsigned int
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,x,n) for(int i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1.out","w",stdout) int a[]; int main() {
int n,k,i,j,x,ans;
RD2(n,k);
REP(i,n) {
RD(x);
a[x]++;
}
x=;
ans=;
for(i=;i>=;i--) {
if(a[i]>) {
a[i]-=x;
int t=a[i]/k;
int tt=t*k;
int ttt=tt>=a[i]?t:t+;
ans+=ttt*(i-)*;
x=ttt*k-a[i];
//printf("%d %d %d\n",i,ttt,ans);
}
}
WN(ans);
return ;
}

C - Design Tutorial: Make It Nondeterministic

题意:每个人可以用自己的姓或者名字作为ID,给出各个人的名字,给出一个排名序列,若有一种选择ID的方法可以使排名正确,则输出YES,否则输出NO。

题解:贪心,排名1的人选字典序少的那个,然后都优先选字典序小的,不行了就选大的,再不行就NO。

 //#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll __int64
#define usint unsigned int
#define mz(array) memset(array, 0, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,x,n) for(int i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1.out","w",stdout) char s[][][]; int cmp(char a[],char b[]) {
int la=strlen(a),lb=strlen(b);
int l=min(la,lb);
int i;
for(i=; i<l; i++) {
if(a[i]>b[i])return ;
if(b[i]>a[i])return -;
}
if(la>lb)return ;
if(lb>la)return -;
return ;
} int main() {
int n;
RD(n);
REP(i,n) {
scanf(" %s%s",s[i][],s[i][]);
//printf("%d %s!%s!\n",i,s[i][0],s[i][1]);
}
char q[];
int x,y=,z,j;
RD(x);
y=x-;
if(cmp(s[y][],s[y][])==-) z=;
else z=;
bool flag=;
REP(i,n-) {
RD(x);
x--;
if(cmp(s[x][],s[x][])==-) j=;
else j=;
if(cmp(s[x][j] , s[y][z])==-){
if(cmp(s[x][j^], s[y][z])==-){
flag=;
break;
}else{
y=x;
z=j^;
}
}else{
y=x;
z=j;
}
}
if(flag)puts("YES");
else puts("NO");
return ;
}

D - Design Tutorial: Inverse the Problem

题意:给出各个点距离的邻接矩阵,判断这是不是一棵树。

题解:先根据样例特判一些情况,然后最小生成树,我是用可撸斯卡尔,当要加入的边的两个点x和y已经在同一集合,则判它们的距离是否正确。我的方法是找到一个中间点v,使x-v和v-y有路,找到(xv距离) + (vy距离)最小的那个值,当作x到y的距离。这是因为可撸斯卡尔是从小往大加边,肯定有至少一个中间点能使得这个有路。复杂度O(n^3),略高,姿势不对就要TLE……更好的解法可以看这里:http://www.cnblogs.com/forgot93/p/4000850.html

 //#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll __int64
#define usint unsigned int
#define mz(array) memset(array, 0, sizeof(array))
#define mf1(array) memset(array, -1, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,x,n) for(int i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("1.out","w",stdout)
const int inf=*1e9+;
const int maxn=;
const int maxm=maxn*maxn; int a[][];
int n; int bx[maxm],by[maxm],bz[maxm];
int bn;
inline void add(const int &x,const int &y,const int &z){
bx[bn]=x;
by[bn]=y;
bz[bn]=z;
bn++;
} int d[maxm];
bool cmp(const int &x,const int &y){
return bz[x]<bz[y];
} int f[maxm];
int gf(const int &x){
if(f[x]==-)return x;
f[x]=gf(f[x]);
return f[x];
} struct Edge{
int next,v,l;
}e[maxm];
int head[maxn],en; inline void addedge(const int &x,const int &y,const int &z){
e[en].v=y;
e[en].l=z;
e[en].next=head[x];
head[x]=en;
en++;
} int dis[maxn][maxn]; inline void gank(const int &x,const int &y){
int mi=inf;
for(int i=head[x];i!=-;i=e[i].next){
if(dis[y][e[i].v]!=-){
//printf("(%d) %d + %d = %d\n",e[i].v,e[i].l,dis[y][e[i].v],e[i].l + dis[y][e[i].v]);
mi=min(mi , e[i].l + dis[y][e[i].v]);
}
}
dis[y][x]=dis[x][y]=mi;
} bool farm(){
int i,j,k,x,y,z;
bn=;
REP(i,n){
REP(j,n){
if(i!=j){
if(a[i][j]==)return ;
}else{
if(a[i][j]!=)return ;
}
}
}
REP(i,n){
REP(j,i){
if(a[i][j]!=a[j][i])return ;
add(i,j,a[i][j]);
}
}
REP(i,bn){
d[i]=i;
}
sort(d,d+bn,cmp);
mf1(f);
//mf1(head);
REP(i,n)REP(j,n)dis[i][j]=-;
en=;
mf1(head);
REP(i,n)dis[i][i]=;
//en=0;
REP(i,bn){
int q=d[i];
int &x=bx[q],&y=by[q],&z=bz[q];
int fx=gf(x),fy=gf(y);
if(fx!=fy){
addedge(x,y,z);
addedge(y,x,z);
dis[x][y]=z;
dis[y][x]=z;
f[fx]=fy;
}else{
if(dis[x][y]==-) gank(x,y);
//printf("dis[%d][%d]=%d , z=%d\n",x,y,dis[x][y],z);
if(dis[x][y]!=z)return ;
}
}
return ;
} int main() {
int i;
RD(n);
REP(i,n)REP(j,n) RD(a[i][j]);
if(farm())puts("YES");
else puts("NO");
return ;
}

codeforces #270 ABCD的更多相关文章

  1. Codeforces #270 D. Design Tutorial: Inverse the Problem

    http://codeforces.com/contest/472/problem/D D. Design Tutorial: Inverse the Problem time limit per t ...

  2. Codeforces Round #270 1003

    Codeforces Round #270 1003 C. Design Tutorial: Make It Nondeterministic time limit per test 2 second ...

  3. Codeforces Round #270 1002

    Codeforces Round #270 1002 B. Design Tutorial: Learn from Life time limit per test 1 second memory l ...

  4. Codeforces Round #270 1001

    Codeforces Round #270 1001 A. Design Tutorial: Learn from Math time limit per test 1 second memory l ...

  5. Codeforces Round #258 (Div. 2)[ABCD]

    Codeforces Round #258 (Div. 2)[ABCD] ACM 题目地址:Codeforces Round #258 (Div. 2) A - Game With Sticks 题意 ...

  6. Codeforces Round #270 A~D

    Codeforces Round #270 A. Design Tutorial: Learn from Math time limit per test 1 second memory limit ...

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

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

  8. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

  9. Codeforces Beta Round #80 (Div. 2 Only)【ABCD】

    Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...

随机推荐

  1. 配置jdk相关的记录

    1.8.0_60JAVA_HOME=/usr/local/java/jdk1.8.0_60JRE_HOME=${JAVA_HOME}/jreCLASSPATH=.:${JAVA_HOME}/lib:$ ...

  2. BZOJ1024 [SCOI2009]生日快乐

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  3. 树莓派启用root账户

    树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的. debian里root账户默认没有密码,但账户锁定. 当需要root权限时, 直接执行 sudo su 即可切 ...

  4. 在打开vs解决方案时,怎样让所以打开的项目自动折叠

    使用VS 2010中的扩展性,搜PowerCommands,PowerCommands扩展在Visual Studio 2010中添加了数十个有用的的命令, Collapse Projects(折叠项 ...

  5. PowerDesigner给两个表添加reference,中间显示外键信息步骤

    如题,我用的是PowerDesigner15,其他的应该也类似. 解决方法: 右击reference,就是那条线,选中format,然后是content->center,在null,name,c ...

  6. 洛谷P1288 取数游戏II

    题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...

  7. MVC项目经验杂谈

    ASP.NET MVC 绝大多数的公司已经用上了ASP.NET MVC,博主手里也做了不少个MVC的项目,在这里分享一下我在项目中是如何使用MVC的 打造通用的异常处理 项目上线运行,并不是所有的时候 ...

  8. EF-CodeFirst-3搞事

    本文学习旺杰兄的 CodeFirst 系列教程而写.尽量摆脱之前的影子写出自己的理解 表间关系.级联删除 简单玩法已经走通了,但是我就是想搞点事出来.今天来搞搞表间关系和级联删除 表间关系 毫无疑问在 ...

  9. 【Beta】第一次任务发布

    后端 整理以下5个环节的API文档:登录注册.收藏以及获取收藏.个人信息的获取以及更新.发送实验数据以获取PDF报告 验收条件:每个接口说明请求格式(请求方式,请求内容)和返回格式 例: 请求 方式: ...

  10. linux下memcache的运用,和php结合小案例。

    由于是采用脚本安装的memache,所以软件的依赖关系我就不操心了,脚本已经帮我装好了和php的关联关系,实在是很省心.后续如果有需要,我会针对windows和linux各写一个安装和配置的说明,一来 ...