【NOIP2014TG】solution
链接:https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83|31
D1T1(rps)
题意:给你一个周期,以及胜负关系,求A和B的胜场。
解题思路:暴力抄表,然后暴力计算即可。
#include<cstdio>
#include<iostream>
using namespace std;
int a[],na,nb,b[],ansa,ansb,n;
int f[][]{{,,,,},{,,,,},{,,,,},{,,,,},{,,,,}};
int main(){
cin>>n>>na>>nb;
for (int i=; i<na; i++)
scanf("%d",&a[i]);
cin>>a[];
for (int i=; i<nb; i++)
scanf("%d",&b[i]);
cin>>b[];
for (int i=; i<=n; i++){
ansa+=f[a[i%na]][b[i%nb]];
ansb+=f[b[i%nb]][a[i%na]];
}
cout<<ansa<<" "<<ansb;
}
D1T2(link)
题意:给你棵树,求最大联合权值与联合权值和,(联合权值:距离为2的2个点的点权之积)
解题思路:枚举所有中间点,暴力算出所有的与其相连的点权之和与其点权平方和,用数学公式求出乘积和,最大的较好做,不多解释。
#include <stdio.h>
#define MN 200005
#define mod 10007
#define ll long long
#define v edge[j].to
#define max(a,b) ((a)>(b)?(a):(b))
int w[MN],head[MN],n,maxx,sum,cnt;
struct zxy{
int to,nxt;
}edge[MN<<];
inline int in(){
int x=,f=;char ch=getchar();
while(ch<''||ch>'') f=ch=='-'?-:,ch=getchar();
while(ch>=''&ch<='') x=(x<<)+(x<<)+ch-'',ch=getchar();
return x*f;
}
inline void ins(int x,int y){edge[++cnt].to=y,edge[cnt].nxt=head[x],head[x]=cnt;}
void init(){
n=in();
for (int i=; i<n; ++i){
register int x=in(),y=in();
ins(x,y);ins(y,x);
}
for (register int i=; i<=n; ++i) w[i]=in();
}
void solve(){
for (register int i=; i<=n; ++i){
register ll tmp=,tmpp=;register int ma1=,ma2=;
for (register int j=head[i]; j; j=edge[j].nxt){
tmp+=w[v],tmpp+=w[v]*w[v],tmp%=mod,tmpp%=mod;
if (w[v]>ma1) ma2=ma1,ma1=w[v];
else ma2=max(ma2,w[v]);
}
maxx=max(maxx,ma1*ma2),sum+=tmp*tmp-tmpp;sum%=mod;
}
printf("%d %d\n",maxx,sum);
}
int main(){init();solve();}
D1T3(bird)
题意:看题目吧= =就是flappy birds啊
解题思路:每次点击看成一个费用为1,体积为X[i]的物品,反之则。。。。然后按题意跑一遍求最小费用的背包,注意对高度>m的特殊处理与管道的判断。
#include <stdio.h>
#include <string.h>
#define MN 10005
#define MM 1005
#define inf 0x3f3f3f3f
#define min(a,b) ((a)<(b)?(a):(b))
int n,m,k,up[MN],down[MN],dp[][MM],bot[MN],top[MN],ansn,ans;
inline int in(){
int x=;char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x;
}
void init(){
n=in(),top[n]=m=in(),k=in();
for (int i=; i<n; ++i) top[i]=m,up[i]=in(),down[i]=in();
for (register int i=,s; i<=k; ++i) bot[s=in()]=in()+,top[s]=in()-;
}
void solve(){
for (register int i=; i<=n; ++i){
memset(dp[i&],0x3f,sizeof(dp[i&]));
register int minn=inf;
for (register int j=up[i-]+; j<m; ++j)
dp[i&][j]=min(dp[i&][j-up[i-]]+,min(dp[(i&)^][j-up[i-]]+,dp[i&][j]));
for (register int j=m-up[i-]; j<=m; ++j)
dp[i&][m]=min(dp[i&][j]+,min(dp[i&][m],dp[(i&)^][j]+));
for (register int j=down[i-]+; j<=m; ++j)
dp[i&][j-down[i-]]=min(dp[(i&)^][j],dp[i&][j-down[i-]]);
for (register int j=; j<bot[i]; ++j) dp[i&][j]=inf;
for (register int j=top[i]+; j<=m; ++j) dp[i&][j]=inf;
for (register int j=bot[i]; j<=top[i]; ++j) minn=min(minn,dp[i&][j]);
if (minn==inf){
puts("");
printf("%d",ansn);
return;
}
if ((top[i]^m)&&(bot[i])) ++ansn;
}ans=inf;
for (register int j=; j<=m; ++j)
ans=min(ans,dp[n&][j]);
printf("1\n%d",ans);
}
int main(){init();solve();}
D2T1(wireless)
我写了傻逼做法,反正这题就是傻逼模拟。
#include<stdio.h>
#define MN 130
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
int f[MN][MN],n,d,ans[MN][MN],ma,summ;
inline int in(){
int x=,f=;char ch=getchar();
while (ch<''||ch>'') f=ch=='-'?-:,ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x*f;
}
int main(){
d=in();n=in();
for (int i=; i<=n; ++i){
int x=in(),y=in(),l=in();
f[x][y]=l;
}
for (register int i=; i<; ++i)
for (register int j=; j<; ++j){
for (register int a=max(,i-d); a<=min(,i+d); ++a)
for (register int b=max(,j-d); b<=min(,j+d); ++b)
ans[i][j]+=f[a][b];
ma=max(ans[i][j],ma);
}
for (register int i=; i<; ++i)
for (register int j=; j<; ++j)
if (ma==ans[i][j]) summ++;
printf("%d %d",summ,ma);
}
D2T2(road)
题意:看题目吧= =。
解题思路:首先建反边然后从终点bfs一遍,计算一下入度,然后判断一下是否可行,再正向bfs一遍即可。
#include <stdio.h>
#include <string.h>
#define MN 10005
#define ME 200005
int head[MN],dis[MN],n,e,fb[MN],cnt,s,t,que[MN],du[MN],cntt[MN];
bool vis[MN];
struct zxy{
int to,nxt;
}edge[ME<<];
inline void ins(int x,int y,int *h){edge[++cnt].to=y,edge[cnt].nxt=h[x],h[x]=cnt;}
inline int in(){
int x=;char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<='') x=(x<<)+(x<<)+ch-'',ch=getchar();
return x;
}
inline void bfs(int s,int *hd){
int h=,t=;que[]=s;
memset(dis,/,sizeof(dis));
dis[s]=;vis[s]=;
while(h<t){
for (register int i=hd[que[++h]]; i; i=edge[i].nxt){
register int v=edge[i].to;++cntt[v];
if (!vis[edge[i].to]){
dis[v]=dis[que[h]]+;vis[v]=;que[++t]=v;
}
}
}
}
void init(){
n=in(),e=in();
for (register int i=; i<=e; ++i){
register int x=in(),y=in();++du[x];
ins(x,y,head);ins(y,x,fb);
}
s=in(),t=in();
}
void solve(){
bfs(t,fb);for (register int i=; i<=n; ++i) vis[i]=du[i]!=cntt[i];
bfs(s,head);if (!vis[t]){puts("-1");return;}
printf("%d",dis[t]);
}
int main(){init();solve();return ;}
D2T3(equation)
题意:看题目
解题思路:大丧题,欺负我数学不好。我们考虑选取mo数,然后优化掉高精度操作,然后注意一下多个mo防止出现恰好为mo数倍数的解,多用几个10000左右的质数应该就比较稳了。
#include <stdio.h>
#define MN 105
#define MM 1000005
#define ML 10005
const int mod[]={,,,,};
int a[][MN],ans[MM],ansn,n,b[][],m;char ch[ML];
inline void check(int x){
for (register int i=; i<; ++i)
for (register int j=n; j>=; --j)
b[i][x%mod[i]]=(b[i][x%mod[i]]*(x%mod[i])+a[i][j])%mod[i];
}
inline bool judge(int x){
for (register int i=; i<; ++i) if (b[i][x%mod[i]]) return ;
return ;
}
void init(){
scanf("%d%d",&n,&m);for (int i=; i<=n; ++i){
scanf("%s",ch);for (register int j=; ch[j]; ++j)
if (ch[j]>=''&&ch[j]<='')
for (register int k=; k<; ++k)
a[k][i]=(a[k][i]*+ch[j]-'')%mod[k];
if (ch[]=='-')
for (register int k=; k<; ++k) a[k][i]*=-;
}
}
void solve(){
for (register int i=; i<; ++i) check(i);
for (register int i=; i<=m; ++i) if (judge(i)) ans[++ansn]=i;
printf("%d\n",ansn);
for (register int i=; i<=ansn; ++i) printf("%d\n",ans[i]);
}
int main(){init();solve();}
【NOIP2014TG】solution的更多相关文章
- about家庭智能设备部分硬件模块功能共享【协同工作】solution
本人设备列表: Onda tablet {Android} wifi Desktop computer {win7.centos7} 外接蓝牙adapter PS interface 键盘.鼠标{与同 ...
- 【leetcode】solution in java——Easy1
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6409067.html 1:Hamming distance The Hamming distance betw ...
- 【436】Solution for LeetCode Problems
Coding everyday. ^_^ 1. Two Sum 重点知识:指针可以存储数值,通过 malloc 新建数组 int* returnSize:Size of the return arra ...
- 【NOIP2012TG】solution
D1T1(Vigenere) 题意:给你一个原串与一个密码串,问你按照题意规则加密后的密文. 解题思路:暴力模拟. #include <stdio.h> ],c[],u1[],u2[]; ...
- 【NOIP2016TG】solution
传送门:https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%7C33 D1T1(toys) 题意:有n个小人, ...
- 【NOIP2015TG】solution
链接:https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%2C32 D1T1(magic) 题意:看题目.. ...
- 【NOIP2013TG】solution
链接:https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%2C30 D1T1:转圈游戏(circle) 题意: ...
- 【NOIP2011TG】solution
老师最近叫我把NOIPTG的题目给刷掉,于是就开始刷吧= = 链接:https://www.luogu.org/problem/lists?name=&orderitem=pid&ta ...
- 【leetcode】solution in java——Easy5
转载请注明原文地址: 21:Assign Cookies Assume you are an awesome parent and want to give your children some co ...
随机推荐
- 设计模式NO.2
设计模式NO.2 本次博客内容为第二次设计模式的练习.根据老师的要求完成下列题目: 题目1 如果需要开发一个跨平台视频播放器,可以在不同操作系统平台(如Windows.Linux.UNIX等)上播放多 ...
- 微信qq,新浪等第三方授权登录的理解
偶们常说的第三方是指的微信,qq,新浪这些第三方,因为现在基本每个人都有qq或者微信,那么我们就可以通过这些第三方进行登录.而这些网站比如慕课网是通过第三方获取用户的基本信息 它会有个勾选按钮,提示是 ...
- 一种dubbo逻辑路由方案
背景介绍 现在很多的公司都在用dubbo.springcloud做为服务化/微服务的开发框架,服务化之后应用越来越多,链路越来越长,服务环境的治理变的很困难.比如:研发团队的人很多的,同时有几个分支在 ...
- 回收 PV - 每天5分钟玩转 Docker 容器技术(152)
当 PV 不再需要时,可通过删除 PVC 回收. 当 PVC mypvc1 被删除后,我们发现 Kubernetes 启动了一个新 Pod recycler-for-mypv1,这个 Pod 的作用就 ...
- 微信接口(一)创建菜单&自动回复
刚划拉完微信.做一个笔记这里的数据是写死的,还有一份是通过查询数据库进行自动回复,自定义菜单设置的.不过因为使用到数据库,最好在网站后台吧微信平台开发集成进去.所以代码较多就先不放了.有问题的地方请留 ...
- 记一次将公司网站http换成https
看了博客园将近一年了,一直都只是在被动的看,总觉得应该写点什么,但是又不知道该写点什么.今天正好公司要把网站由http换成https,那我就顺便记录一下吧. 由于之前没有弄过,所以就面向百度编程. 首 ...
- 刨析Maven(对pom.xml配置文件常用标签的解析)
昨天在阿里云看到了一句话,"当你Learning和Trying之后,如果能尽量把Teaching也做好,会促进我们思考".共勉! 这是关于Maven的第三篇博客,这次我们深入了解p ...
- C# 客户端程序调用外部程序的三种实现
简介 我们用C#来开发客户端程序的时候,总会不可避免的需要调用外部程序或者访问网站,本篇博客介绍了三种调用外部应用的方法,供参考 实现 第一种是利用shell32.dll,实现ShellExecute ...
- java配置环境变量,无法也行javac问题
最近换了公司,搭建开发环境的时候出了点小差错,写篇随笔记录下,下载jdk的时候要选择符合自己电脑的jdk版本,位数. 笔者之前下载的时候没注意下了个32bit的jdk,开发用eclipse的时候打不开 ...
- Oracle12c:支持通过创建identity columen来实现创建自增列
oracle12c之前如果需要创建自增列必须要通过sequence+trigger来实现.但是oracle12c已经可以像mysql,sqlserver一样通过identity column来设置自增 ...