2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】
吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障!
04正在酝酿中!!!马上更新!!!!!
思路:最小生成树就是1到各个点,ans=n*(n+1)/2-1;
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAX=1000010;
LL n,m;
int main()
{
int t,i,j;
int cas=1;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
LL sum=0;
sum=n*(n+1)/2-1;
printf("Case #%d: ",cas++);
printf("%lld\n",sum);
}
return 0;
}
思路:满足条件的整数对(A,B)或(B,A).
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAX=1000010;
LL n,m;
int main()
{
int t,i,j;
int cas=1;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&n,&m);
printf("Case #%d:\n",cas++);
if(n>m)
swap(n,m);
if(n==m)
{
printf("1\n");
printf("%lld %lld\n",n,m);
}
else
{
printf("2\n");
printf("%lld %lld\n",n,m);
printf("%lld %lld\n",m,n); }
}
return 0;
}
05
题意:
连连看
就是四周两个相同就YES,然后里面的相邻相同也OK
#include <bits/stdc++.h>
using namespace std;
typedef long long LL; const int N=35;
int ma[N][N];
map<int,int>mp;
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
int a,b; bool Judge(int x,int y)
{
if(x<1||y<1||x>a||y>b)
return 0;
return 1;
} int main()
{
int T,cas=1;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&a,&b);
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
scanf("%d",&ma[i][j]); printf("Case #%d: ",cas++);
if(a==1&&b==1)
{
puts("No");
continue;
}
int flag=0;
mp.clear();
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)
{
for(int k=0;k<4;k++)
{
int xx=i+dx[k];
int yy=j+dy[k];
if(Judge(xx,yy))
{
if(ma[i][j]==ma[xx][yy])
{
flag=1;
break;
}
}
}
if(flag)
break;
}
if(flag)
break;
}
if(flag)
{
puts("Yes");
continue;
}
for(int i=1;i<=a;i++)//1列
{
if(!mp[ma[i][1]])
mp[ma[i][1]]=1;
else
{
flag=1;
break;
}
}
if(flag)
{
puts("Yes");
continue;
}
mp.clear();
for(int i=1;i<=a;i++) //b列
{
if(!mp[ma[i][b]])
mp[ma[i][b]]=1;
else
{
flag=1;
break;
}
}
if(flag)
{
puts("Yes");
continue;
}
mp.clear();
for(int i=1;i<=b;i++) //1行
{
if(!mp[ma[1][i]])
mp[ma[1][i]]=1;
else
{
flag=1;
break;
}
}
if(flag)
{
puts("Yes");
continue;
}
mp.clear();
for(int i=1;i<=b;i++)//a行
{
if(!mp[ma[a][i]])
mp[ma[a][i]]=1;
else
{
flag=1;
break;
}
}
if(flag)
{
puts("Yes");
continue;
}
puts("No");
}
return 0;
}
06:
定义集合里的点必须要满足
1 重要的点
2 是两个不同的重要的点的最近公共祖先
其中一个
然后每次询问给出不重要的点,问你集合最多几个点
思路:
对于LCA的操作其实就是对于这个结点,有两个子树里是重要点就一定是这两个结点的LCA了。
先预处理一下所有结点的关系,然后对于有两个出度的结点判断一下两个子树是否有重要的点就好了;
#include <bits/stdc++.h>
using namespace std; const int N=1e5+10; struct asd{
int to;
int next;
};
asd q[N*4];
int tol,head[N*4];
int pre[N];
int num[N],fei[N];
bool vis[N];
vector<int>pb;
int n,k; void add(int a,int b)
{
q[tol].to=b;
q[tol].next=head[a];
head[a]=tol++;
} void init()
{
tol=0;
memset(head,-1,sizeof(head));
for(int i=1;i<=n;i++)
{
fei[i]=0;
num[i]=0;
vis[i]=false;
}
} void dfs(int x)
{
for(int v=head[x];v!=-1;v=q[v].next)
{
int to=q[v].to;
if(vis[to]) continue;
num[x]++;
vis[to]=1;
pre[to]=x;
dfs(to);
}
} bool dfs_judge(int x)
{
int sum=0;
for(int v=head[x];v!=-1;v=q[v].next)
{
int to=q[v].to;
if(pre[to]==x)
{
if(fei[to]!=k)
return 1;
else
{
if(dfs_judge(to))
return 1;
}
}
}
return 0;
} int main()
{
int T;
int cas=1;
scanf("%d",&T);
while(T--)
{
int qq,a,b;
int m;
scanf("%d%d",&n,&qq);
init();
for(int i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
printf("Case #%d:\n",cas++);
vis[1]=true;
dfs(1);
int ans;
for(k=1;k<=qq;k++)
{
scanf("%d",&m);
pb.clear();
ans=n-m;
while(m--)
{
int x;
scanf("%d",&x);
fei[x]=k;
if(num[x]<2) continue;
pb.push_back(x);
}
int sum;
for(int i=0;i<pb.size();i++)
{
int u=pb[i];
sum=0;
for(int v=head[u];v!=-1;v=q[v].next)
{
int to=q[v].to;
if(pre[to]!=u)
continue;
if(fei[to]!=k)
sum++;
else
{
if(dfs_judge(to))
sum++;
}
if(sum>=2)
{
ans++;
break;
}
}
}
printf("%d\n",ans);
}
}
return 0;
}
08:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define E 2.71828
#define MOD 1000000007
#define N 200010
#define M 5010 int a[N*2];
int main()
{
int T,cas = 1;
scanf("%d",&T);
while(T--)
{
memset(a,0,sizeof(a));
int n;
scanf("%d",&n);
int num = 0;
int l = n;
int r = n-1;
int i1 = -INF;
int i2 = INF;
int flag = 1;
printf("Case #%d:\n",cas++);
while(n--)
{
char s[10];
scanf("%s",s);
if(strcmp(s,"PUSH") == 0)
{
int x,i;
scanf("%d",&x);
if(flag)
{
a[++r] = x;
i = r;
}
else
{
a[--l] = x;
i = l;
}
if(x==0)
{
i1 = max(i1,i);
i2 = min(i2,i);
}
num++;
}
else if(strcmp(s,"POP") == 0)
{
if(flag)
r--;
else
l++;
num--;
}
else if(strcmp(s,"QUERY") == 0)
{
if(num <= 0)
{
puts("Invalid.");
continue;
}
if(i1==-INF && i2==INF)
{
int len = r-l+1;
if(len&1)
puts("1");
else
puts("0");
continue;
}
if(num == 1)
{
if(r != n-1)
printf("%d\n",a[r]);
else
printf("%d\n",a[l]);
continue;
}
if(flag)
{
int ling = min(i1,i2);
int len = ling-l+1;
if(ling == r)
len--;
if(len&1)
puts("1");
else
puts("0");
}
else
{
int ling = max(i1,i2);
int len = r-ling+1;
if(ling == l)
len--;
if(len&1)
puts("1");
else
puts("0");
}
}
else
{
flag = !flag;
}
}
}
return 0;
}
2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】的更多相关文章
- HDU 5925 Coconuts 【离散化+BFS】 (2016CCPC东北地区大学生程序设计竞赛)
Coconuts Time Limit: 9000/4500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- HDU 5926 Mr. Frog's Game 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
Mr. Frog's Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- HDU 5924 Mr. Frog’s Problem 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
Mr. Frog's Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
Minimum's Revenge Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)
Auxiliary Set Time Limit: 9000/4500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- 2016CCPC东北地区大学生程序设计竞赛 (2018年8月22日组队训练赛)
题目链接:http://acm.hdu.edu.cn/search.php?field=problem&key=2016CCPC%B6%AB%B1%B1%B5%D8%C7%F8%B4%F3%D ...
- 2016CCPC东北地区大学生程序设计竞赛 1008 HDU5929
链接http://acm.hdu.edu.cn/showproblem.php?pid=5929 题意:给你一种数据结构以及操作,和一种位运算,最后询问:从'栈'顶到低的运算顺序结果是多少 解法:根据 ...
- 2016CCPC东北地区大学生程序设计竞赛 1005 HDU5926
链接http://acm.hdu.edu.cn/showproblem.php?pid=5926 题意:给我们一个矩阵,问你根据连连看的玩法可以消去其中的元素 解法:连连看怎么玩,就怎么写,别忘记边界 ...
随机推荐
- Sum It Up POJ 1564 HDU 杭电1258【DFS】
Problem Description Given a specified total t and a list of n integers, find all distinct sums using ...
- php 批量删除数据
php 批量删除数据 :比如我们在看邮箱文件的时候,积攒了一段时间以后,看到有些文件没有用了 这时候我们就会想到把这些 没用的文件删除,这时候就用到了批量删除数据的功能,这里我是用了数据库原有的一个表 ...
- CentOS 7 yum安装路径查询方法
先执行下面的命令,查看所有的已安装软件名称. rpm -qa 然后执行 rpm -ql 软件名称 就可以显示软件的安装路径.
- 基于live555实现的跨平台高性能RTSPServer流媒体服务器EasyIPCamera
本文转自EasyDarwin团队成员kim的博客:http://blog.csdn.net/jinlong0603/article/details/52366412 简介 EasyIPCamera是由 ...
- Redis persistence demystified
https://redis.io/topics/persistence http://oldblog.antirez.com/post/redis-persistence-demystified.ht ...
- 各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包----转
在开发基于数据库的应用系统时,需要在项目中进行数据源的配置来为数据 库的操作取得数据库连接.配置不同数据库的数据源的方法大体上都是相同的,不同的只是不同数据库的JDBC驱动类和连接URL以及相应的数据 ...
- Delphi的类方法不是静态方法
Delphi中,类方法不是你理解的静态方法 Delphi中的类方法与C++类中的static方法完全没有可比性.Delphi中的类方法是有Self的,而Self就是类本身(注意不是对象),而这个Sel ...
- java 浮点数
package precisenumber; //import java.util.*;public class PreciseNumber { public int fore; public int ...
- 操作系统:Bochs 2.6.8的配置文件bochsrc.bxrc修改
由于现在Bochs 2.6.8相比之前有些改动,之前的配置文件不能直接运行,针对配置文件需要有些修改. 1. 配置文件 ######################################## ...
- Linux ARM交叉编译工具链制作过程【转】
本文转载自:http://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/02/21/2920999.html 一.下载源文件 源代码文件及其版本与下载 ...