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 题意:给我们一个矩阵,问你根据连连看的玩法可以消去其中的元素 解法:连连看怎么玩,就怎么写,别忘记边界 ...
随机推荐
- 图像处理之增强---图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法
申明:本文非笔者原创,原文转载自:http://blog.csdn.net/onezeros/article/details/6342661 两组图像:左边较暗,右边较亮 第一行是原图像,他们下面是用 ...
- php CURL 模拟 POST 提交数据
<?php function liansuo_post($url,$data){ // 模拟提交数据函数 $curl = curl_init(); // 启动一个CURL会话 curl_seto ...
- Android-运行时权限
由于拨打电话数据用户的隐私,再者由于在5.0之后Android更注重于用户的隐私权限,为此出现了在低版本没有的问题,而在高版本出现的个别问题! Intent intent = new Intent(I ...
- EasyPlayer实现视频播放局部缩放、广角平移功能(类似水滴直播,快手视频)
本文转自:http://blog.csdn.net/jyt0551/article/details/56063869 视频播放局部缩放.广角平移功能 在预览图片的时候,利用手势控制图片的缩放.平移,已 ...
- 基于EasyIPCamera实现的RTSP跨平台拉模式转发流媒体服务器
本文转自博客:http://blog.csdn.net/xinlanbobo/article/details/53224445 上一篇博客<EasyIPCamera通过RTSP协议接入海康.大华 ...
- leetcode题目解答报告(2)
Pascal's Triangle 题目描述 Given numRows, generate the first numRows of Pascal's triangle. For example, ...
- window cmd 自动补全
1. 用命令里输入regedit注册表 WIN+R 快捷输入 regedit regedit2. 键值改为9(十进制) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Co ...
- Android Studio 卡顿解决
每次升级/安装 Android Studio 之后最好都修改一下这个参数:到 Android Studio 安装目录,找到 bin/studio(64?).vmoptions(文件名可能因操作系统而不 ...
- js获取dom对象style样式的值
js获取到的dom对象的style通常是没有值得,因为我们都写在外部文件中,从慕课网上见到讲师封装的一个方法,挺不错.特此记录下来. function getStyle(obj,attr){ if(o ...
- 【应用】SVG动态 时钟
没有做秒针,只做了分针和时针,5分钟以后来看应该可以看到效果╮(╯-╰)╭ <!DOCTYPE html> <html> <head> <title>& ...