【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 ...
随机推荐
- Beta阶段敏捷冲刺报告-DAY5
Beta阶段敏捷冲刺报告-DAY5 Scrum Meeting 敏捷开发日期 2017.11.6 会议时间 12:00 会议地点 软工所 参会人员 全体成员 会议内容 乱序问题的解决,异常输入提示 讨 ...
- java实现找一个数范围内所有的一
一.题目内容 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数.要求:写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12) = 5. ...
- Web前端性能分析
Web前端性能通常上代表着一个完全意义上的用户响应时间,包含从开始解析HTML文件到最后渲染完成开始的整个过程,但不包括在输入url之后与服务器的交互阶段.下面是整个过程的各个步骤: 开始解析html ...
- window.showModalDialog
//新版本谷歌没有window.showModalDialog,创建一个window.openif(window.showModalDialog == undefined){ window.show ...
- python之路--day13-模块
1,什么是模块 模块就是系统功能的集合体,在python中,一个py文件就是一个模块, 例如:module.py 其中module叫做模块名 2,使用模块 2.1 import导入模块 首次带入模块发 ...
- MMA8451重力加速度计通过写内部校准寄存器进行校准
|版权声明:本文为博主原创文章,未经博主允许不得转载. AN4069应用笔记中提到MMA8451的三个轴重力校准有两种方法, 第一种方法是简易校准,将贴有MMA8451的设备整体,Z轴正面朝上放在校准 ...
- Windows中添加自己的程序到开机启动中(添加服务,添加注册表)
在系统启动的时候启动自己想要启动的程序: 方法一:利用开机启动文件夹 将exe文件或exe文件的快捷方式复制到(启动)文件夹下 以win7为例:开始→所有程序→启动→鼠标右键打开 方法二:添加系统服务 ...
- Nagios监控的部署与配置
[安装Nagios] yum install -y httpd httpd-devel httpd-tools mysql mysql-devel mysql-server php php-devel ...
- JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换
首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是j ...
- Trensient的使用介绍
1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过 ...