吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障!

04正在酝酿中!!!马上更新!!!!!

 01题意:有一个n个点的图,对于任意两个不同的点,他的权值是两个点下标的最小公倍数,求最小生出树。

思路:最小生成树就是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;
}
 03题意:给你两个整数A,B,求多少对(C,D)满足A/B+B/A<=C/D+D/C;A≤C≤B,A≤D≤B

思路:满足条件的整数对(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:

 就是末位是0的话,如果这个栈不止1个元素  那答案一定是1,

 那么我们直接找离栈底最近的0就好了,0到栈底的那些1,运算答案和奇偶个数有关
用两个数组模拟正的到的,开一个flag模拟一下是哪个栈

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

  1. HDU 5925 Coconuts 【离散化+BFS】 (2016CCPC东北地区大学生程序设计竞赛)

    Coconuts Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  2. HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)

    Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

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

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

  5. HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)

    Minimum's Revenge Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)

    Auxiliary Set Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

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

  8. 2016CCPC东北地区大学生程序设计竞赛 1008 HDU5929

    链接http://acm.hdu.edu.cn/showproblem.php?pid=5929 题意:给你一种数据结构以及操作,和一种位运算,最后询问:从'栈'顶到低的运算顺序结果是多少 解法:根据 ...

  9. 2016CCPC东北地区大学生程序设计竞赛 1005 HDU5926

    链接http://acm.hdu.edu.cn/showproblem.php?pid=5926 题意:给我们一个矩阵,问你根据连连看的玩法可以消去其中的元素 解法:连连看怎么玩,就怎么写,别忘记边界 ...

随机推荐

  1. php 去除html标记-strip_tags和htmlspecialchars的区别

    strip_tags 去掉 HTML 及 PHP 的标记. 语法: string strip_tags(string str); 传回值: 字串 函式种类: 资料处理 内容说明 本函式可去掉字串中包含 ...

  2. Linux把查询结果写入到文本

    在Linux命令模式下,可以将查询结果写入文件.大概有两种方式,增量写入和覆盖写入. 增量写入: #iostat -m >> /tmp/iostat.txt 覆盖写入: #iostat - ...

  3. android studio 程序真机执行中文显示乱码

    代码里中文显示正常,真机执行后中文显示乱码,解决的方法: build.gradle中加入一句 android { compileOptions.encoding = "GBK" }

  4. iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)

     本文转载至 http://blog.csdn.net/liuwuguigui/article/details/39494597       IOS8UIAlertViewUIActionSheet ...

  5. 美化你的APP——从Toolbar開始

    Toolbar是什么 Toolbar是Google在Android 5.0中推出的一款替代ActionBar的View.ActionBar必须得作为Activity内容的一部分,而Toolbar能够放 ...

  6. 遇到的一个Form表单自动提交问题解决办法

    Form 表单中只有一个 input 元素时按回车会默认提交表单.有的时候我们希望按回车可以进行列表查询,但是查询后表单被自动提交了,然后刷新了整个页面.这个时候就需要对这个 Form 表单处理一下以 ...

  7. indexDB操作(部分方法不太会使用)

    <script type="text/javascript"> //打开数据库 function openDB(name,version){ var version = ...

  8. Hihocoder #1121 二分图一•二分图判定( bfs或者dfs搜索实现 搜索的过程中进行 节点标记 *【模板】)

    对于拿到的相亲情况表,我们不妨将其转化成一个图.将每一个人作为一个点(编号1..N),若两个人之间有一场相亲,则在对应的点之间连接一条无向边.(如下图) 因为相亲总是在男女之间进行的,所以每一条边的两 ...

  9. CSU 1554 SG Value —— 思维

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554 Description The SG value of a set (mult ...

  10. iOS:UITextField中文输入法输入时对字符长度的限制

      如题的问题,又是个让我抓狂了大半天的问题,还是做个记录,有与类似问题的同学可参考,但不一定对.具体问题还需具体分析.我遇到的需求是这样的:有一个输入框,输入框内输入文字,文字字数限制在20字.   ...