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

  1. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  2. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  3. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  4. CH Round #48 - Streaming #3 (NOIP模拟赛Day1)

    A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...

  5. 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题, ...

  6. NOIP前模拟赛总结

    NOIP前模拟赛总结 from 2018.10.7 to ??? Date Name Score(Rank) Problems 2018.10.7 McfXH AK Contest 42(?) 期望得 ...

  7. 10.17(山东多校联合模拟赛 day1)

    山东多校联合模拟赛 day1 题不难 rect [问题描述] 给出圆周上的 N 个点, 请你计算出以这些点中的任意四个为四个角,能构成多少个矩形. 点的坐标是这样描述的, 给定一个数组 v[1..N] ...

  8. PKUSC 模拟赛 day1 下午总结

    下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...

  9. NOIP一系列模拟赛小结

    NOIP越发接近了,于是自己也跟着机房的几位师兄一起做了几次NOIP模拟赛,收获颇多. #1-T1:求点集中的点能否只用三条与坐标轴平行的直线就能全部被经过,其实只要将横纵坐标排序后逐个点检查下就行. ...

随机推荐

  1. Perl 变量

    Perl 变量 变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间. 解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型.浮点型.字符串等. 上一 ...

  2. 线段树离散化+区间更新——cf1179C好题

    绝对是很好的题 把问题转化成当第i个询问的答案是数值x时是否可行 要判断值x是否可行,只要再将问题转化成a数组里>=x的值数量是否严格大于b数组里的>=x的值 那么线段树叶子结点维护对于值 ...

  3. spring整合shiro框架

    上一篇文章已经对shiro框架做了一定的介绍,这篇文章讲述使用spring整合shiro框架,实现用户认证已经权限控制 1.搭建环境 这里不在赘述spring环境的搭建,可以简单的搭建一个ssm框架, ...

  4. C#实现程序开机启动

    如何用c#实现开机启动?其实用c#实现程序的开机启动大致有两种方法,就是写入注册表或者采用服务程序,最近一直研究着用C#来操作注册表,下面介绍的方法便是用注册表来实现程序随开机启动(高手就不用看了,嘿 ...

  5. 干货:排名前 16 的 Java 工具类!

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  6. 【CF900D】Unusual Sequences

    题目 智力下降严重 显然要反演了呀 首先必须满足\(x|y\),否则答案是\(0\) 我们枚举这个数列的\(gcd\)是\(d\)或者\(d\)的倍数 于是答案就是 \[\sum_{x|d}[d|y] ...

  7. pom.xml文件配置maven仓库地址

    中央仓库就是Maven的一个默认的远程仓库,Maven的安装文件中自带了中央仓库的配置($M2_HOME/lib/maven-model-builder.jar) 在很多情况下,默认的中央仓库无法满足 ...

  8. 锋利的Jquery(p的onclick()事件)

    1.一个p元素的点击事件 <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="serve ...

  9. [记]Cordova安装插件选择插件版本

    在项目中可以使用 cordova plugin add [PLUGIN_ID] 這个命令安装一个cordova插件,这个命令好像是安装插件的最新版本.当需要通过cordova下载这个插件一个特定的版本 ...

  10. BZOJ 1579 [Usaco2009 Feb]Revamping Trails 道路升级

    堆优化的dijkstra. 把一个点拆成k个. 日常空间要开炸一次.. //Twenty #include<cstdio> #include<cstring> #include ...