LUOGU NOIP 2018 模拟赛 DAY1
T1
解题思路
这似乎是小学数学知识???mod 9就相当于各位之和mod 9,打表求了个逆元,等差数列求和公式就行了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std;
typedef long long LL; inline LL rd(){
LL x=,f=;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f?x:-x;
} LL l,r;
int q; int main(){
scanf("%d",&q);
while(q--){
l=rd(),r=rd();
printf("%lld\n",(r-l+)%*(l%+r%)%*%);
}
return ;
}
T2
解题思路
最短路,求出哈利在1点与T1点到其他点的最短路,再求出罗恩在一点与T1点到其他点的最短路,然后分类讨论就行了。
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue> using namespace std;
const int MAXN = ;
const int MAXM = ; inline int rd(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f?x:-x;
} int n,m,head[MAXN],cnt,k,T1,T2,ans;
int to[MAXM<<],nxt[MAXM<<],val[MAXM<<];
int dis[MAXN][]; //dis[x][1] 哈利1 dis[x][2] 罗恩1 dis[x][3] 哈利x dis[x][4] 罗恩x
bool lim[MAXN],vis[MAXN];
queue<int> Q; inline void add(int bg,int ed,int w){
to[++cnt]=ed,nxt[cnt]=head[bg],val[cnt]=w,head[bg]=cnt;
} void spfa_Harry(int st,int now){
memset(vis,false,sizeof(vis));
dis[st][now]=;Q.push(st);vis[st]=;
register int x,u;
while(!Q.empty()){
x=Q.front();Q.pop();vis[x]=;
for(register int i=head[x];i;i=nxt[i]){
u=to[i];
if(dis[x][now]+val[i]<dis[u][now]){
dis[u][now]=dis[x][now]+val[i];
if(!vis[u]){vis[u]=;Q.push(u);}
}
}
}
} void spfa_Ron(int st,int now){
memset(vis,false,sizeof(vis));
dis[st][now]=;vis[st]=;Q.push(st);
int x,u;
while(!Q.empty()){
x=Q.front();Q.pop();vis[x]=;
for(register int i=head[x];i;i=nxt[i]){
u=to[i];if(lim[u]) continue;
if(dis[x][now]+val[i]<dis[u][now]){
dis[u][now]=dis[x][now]+val[i];
if(!vis[u]) {vis[u]=;Q.push(u);}
}
}
}
} int main(){
memset(dis,0x3f,sizeof(dis));
n=rd(),m=rd(),k=rd();int x,y,z;
for(int i=;i<=k;i++) lim[rd()]=;
for(int i=;i<=m;i++){
x=rd(),y=rd(),z=rd();
add(x,y,z),add(y,x,z);
}
T1=rd(),T2=rd();
spfa_Harry(,);spfa_Harry(T1,);
spfa_Ron(,);spfa_Ron(T1,);
ans=min(min(max(dis[T1][],dis[T2][]),max(dis[T2][],dis[T1][]))
,min(min(dis[T1][],dis[T2][])+dis[T2][],min(dis[T1][],dis[T2][])+dis[T2][]));
cout<<ans<<endl;
return ;
}
T3
解题思路
大模拟,感觉没有时间复杂度难。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<algorithm> using namespace std;
const int MAXN = ; int n,m,c,k,cnt,mp[MAXN][MAXN];
int hx[MAXN],hy[MAXN],food,wx[MAXN],wy[MAXN];
int sx[]={,,-,},sy[]={-,,,};
bool exist[MAXN];
char s[MAXN][MAXN],zz[MAXN][MAXN]; struct Snack{
int num,len;
}S[MAXN]; void dfs(int x,int y){
S[cnt].len++;
mp[x][y]=cnt;bool flag=;
for(register int i=;i<=;i++){
int xx=x+sx[i],yy=y+sy[i];
if(xx<= || xx>n || yy<= || yy>m) continue;
if(s[xx][yy]!='#' || mp[xx][yy]==cnt) continue;
flag=;dfs(xx,yy);
}
if(!flag) wx[cnt]=x,wy[cnt]=y;
} void die(int x,int y,int id){
mp[x][y]=-;
for(register int i=;i<=;i++){
int xx=x+sx[i],yy=y+sy[i];
if(xx<= || xx>n || yy<= || yy>m) continue;
if(mp[xx][yy]!=id) continue;
die(xx,yy,id);
}
} inline bool pd(int x,int y){
if(x> && x<=n && y> && y<=m && mp[x][y]<=) return true;
return false;
} inline bool cmp(Snack A,Snack B){
if(A.len==B.len) return A.num<B.num;
return A.len>B.len;
} int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%s",s[i]+);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(s[i][j]=='&') mp[i][j]=-,food++;
if(s[i][j]=='@'){
cnt++;
hx[cnt]=i,hy[cnt]=j;
dfs(i,j);exist[cnt]=;
S[cnt].num=cnt;
}
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=m;j++)
// cout<<mp[i][j]<<" ";
// cout<<endl;
// }
for(int i=;i<=cnt;i++)
scanf("%s",zz[i]+);
for(int i=;i<=k;i++)
for(int j=;j<=cnt;j++){
if(!exist[j]) continue;
if(zz[j][i]=='D') {
hy[j]++;
if(!pd(hx[j],hy[j])) {
die(hx[j],hy[j]-,j);
food+=S[j].len;
exist[j]=;S[j].len=;
continue;
}
if(mp[hx[j]][hy[j]]==-){
food--;S[j].len++;
mp[hx[j]][hy[j]]=j;
continue;
}
mp[hx[j]][hy[j]]=j;
for(register int t=;t<=;t++){
int xx=wx[j]+sx[t],yy=wy[j]+sy[t];
if(mp[xx][yy]==j) {
mp[wx[j]][wy[j]]=;
wx[j]=xx,wy[j]=yy;
break;
}
}
}
if(zz[j][i]=='A') {
hy[j]--;
if(!pd(hx[j],hy[j])) {
die(hx[j],hy[j]+,j);
food+=S[j].len;
exist[j]=;S[j].len=;
continue;
}
if(mp[hx[j]][hy[j]]==-){
food--;S[j].len++;
mp[hx[j]][hy[j]]=j;
continue;
}
mp[hx[j]][hy[j]]=j;
for(register int t=;t<=;t++){
int xx=wx[j]+sx[t],yy=wy[j]+sy[t];
if(mp[xx][yy]==j) {
mp[wx[j]][wy[j]]=;
mp[xx][yy]=;
wx[j]=xx,wy[j]=yy;
break;
}
}
}
if(zz[j][i]=='W') {
hx[j]--;
if(!pd(hx[j],hy[j])) {
die(hx[j]+,hy[j],j);
food+=S[j].len;
exist[j]=;S[j].len=;
continue;
}
if(mp[hx[j]][hy[j]]==-){
food--;S[j].len++;
mp[hx[j]][hy[j]]=j;
continue;
}
mp[hx[j]][hy[j]]=j;
for(register int t=;t<=;t++){
int xx=wx[j]+sx[t],yy=wy[j]+sy[t];
if(mp[xx][yy]==j) {
mp[wx[j]][wy[j]]=;
mp[xx][yy]=;
wx[j]=xx,wy[j]=yy;
break;
}
}
}
if(zz[j][i]=='S') {
hx[j]++;
if(!pd(hx[j],hy[j])) {
die(hx[j]-,hy[j],j);
food+=S[j].len;
exist[j]=;S[j].len=;
continue;
}
if(mp[hx[j]][hy[j]]==-){
food--;S[j].len++;
mp[hx[j]][hy[j]]=j;
continue;
}
mp[hx[j]][hy[j]]=j;
for(register int t=;t<=;t++){
int xx=wx[j]+sx[t],yy=wy[j]+sy[t];
if(mp[xx][yy]==j) {
mp[wx[j]][wy[j]]=;
mp[xx][yy]=;
wx[j]=xx,wy[j]=yy;
break;
}
}
}
}
sort(S+,S++cnt,cmp);
// for(int i=1;i<=n;i++){
// for(int j=1;j<=m;j++)
// cout<<mp[i][j]<<" ";
// cout<<endl;
// }
for(int i=;i<=cnt;i++)
printf("%d %d\n",S[i].len,S[i].num);
printf("%d",food);
return ;
}
LUOGU NOIP 2018 模拟赛 DAY1的更多相关文章
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
		
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
 - 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
		
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
 - 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
		
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
 - CH Round #48 - Streaming #3 (NOIP模拟赛Day1)
		
A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...
 - CH Round #54 - Streaming #5 (NOIP模拟赛Day1)
		
A.珠 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20(NOIP模拟赛Day1)/珠 题解:sb题, ...
 - NOIP前模拟赛总结
		
NOIP前模拟赛总结 from 2018.10.7 to ??? Date Name Score(Rank) Problems 2018.10.7 McfXH AK Contest 42(?) 期望得 ...
 - 10.17(山东多校联合模拟赛 day1)
		
山东多校联合模拟赛 day1 题不难 rect [问题描述] 给出圆周上的 N 个点, 请你计算出以这些点中的任意四个为四个角,能构成多少个矩形. 点的坐标是这样描述的, 给定一个数组 v[1..N] ...
 - PKUSC 模拟赛 day1 下午总结
		
下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...
 - NOIP一系列模拟赛小结
		
NOIP越发接近了,于是自己也跟着机房的几位师兄一起做了几次NOIP模拟赛,收获颇多. #1-T1:求点集中的点能否只用三条与坐标轴平行的直线就能全部被经过,其实只要将横纵坐标排序后逐个点检查下就行. ...
 
随机推荐
- 织梦怎么调用栏目SEO标题
			
点击[模板][默认模板管理]找到模板文件名[list_article.htm],点击模板后面的修改,弹出修改模板代码页面.更改模板文件中<title>{dede:field.title/} ...
 - VS2010-MFC(工具栏:工具栏的创建、停靠与使用)
			
转自:http://www.jizhuomi.com/software/217.html 上一节教程讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使 ...
 - VS2010-MFC(常用控件:编辑框Edit Control)
			
转自:http://www.jizhuomi.com/software/181.html 编辑框(Edit Control)是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子 ...
 - JAVA 设计的七大原则
			
一.开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类.模块和函数应该对 扩展开放,对修改关闭. 所谓的开闭,也正是对扩展和修改两个行为的一个原则.强调 的 ...
 - iOS开发NSMutableArray数组越界处理
			
#import "NSArray+CrashArray.h" #import <objc/runtime.h> @implementation NSObject (Un ...
 - 访问配置信息的URL与配置文件的映射关系
 - Java基础:基本类型
			
1.基本类型 Java中有8种基本类型,分为4类,分别为: 整型:包括 byte . short. int . long 泛型:float.double 字符型:char 布尔型:boolean 2 ...
 - Java中String str=new String("a")和String str = "a"有什么区别?
			
Q: String A="ABC"; String B=new String("ABC"); 这两个值,A,B 是否相等,如果都往HashSet里面放,能放下吗 ...
 - threading线程中的方法(27-11)
			
t1.start() # 执行线程 t1.join() # 阻塞 t1.setDaemon(True) #守护线程 threading.current_thread() # 查看执行的是哪一个线程 t ...
 - 用户管理模块之mysql.user
			
不使用-h参数来指定登录host,默认会连接localhost,仅当mysql.user表中有一条对应的localhost访问授权(username@%不对任何主机做限制也不行)时登录才成功,否则登录 ...