9.14——模拟赛

T1 仙 临江仙 旧梦  (Topcoder SRM 703 div2 500pts)

题目背景
闻道故园花陌,今年奼紫嫣红。扬帆直渡水千重。东君何解意,送我一江风。
还是昔时庭院,终得醉卧花丛。残更惊醒月明中。流光如旧岁,多少梦成空。
题目描述
#define goodcatdog gcd
#define important i
#define judge j
神说 每个梦想就是一轮月亮,高高地孤寂地挂在清冷的夜空。为了让月亮不再
孤独,灯神给她找了好多好多伴儿。现在天空上就有n轮月亮啦!
月亮在天上跟相邻的伙伴玩够以后,就开始想要去找其他月亮玩,灯神为了让月
亮变得更聪明,下了一个规定:若两个月亮编号分别为 important 和 judge ,若
important , judge 满足 goodcatdog ( important , judge )>β,则 important , judge 就可以联通。
现在来了一个垃圾神叫J乌拉,他想知道编号为x的月亮和编号为y的月亮 是否联
通,聪明的你能帮帮它吗????
输入描述
第一行为一个数T,表明有T组测试数据
四个个数n,β,x,y;
输出描述
若x,y联通,输出YeS,否则输出No
样例输入
1
12 2 8 9
样例输出
YeS
数据范围: :
对于30%的数据 n<=10
对于50%的数据 n<=15
对于第六个测试点 n<=65432
对于第七,八个测试点 n<=999999
对于100%的数据 n,β,<=1000000;T<=4;x,y<=10000000

并查集维护β的倍数、

 1 #include <cstdio>
 2
 3 inline void read(int &x)
 4 {
 5     x=0; register char ch=getchar();
 6     for(; ch>‘9‘||ch<‘0‘; ) ch=getchar();
 7     for(; ch>=‘0‘&&ch<=‘9‘; ch=getchar()) x=x*10+ch-‘0‘;
 8 }
 9
10 int fa[1000005];
11 int GCD(int a,int b)
12 {
13     return !b ?a :GCD(b,a%b);
14 }
15 int find(int x)
16 {
17     return fa[x]==x?x:fa[x]=find(fa[x]);
18 }
19
20 int Presist()
21 {
22     freopen("dream.in","r",stdin);
23     freopen("dream.out","w",stdout);
24     int t,n,b,x,y; read(t);
25     for( ; t--; )
26     {
27         read(n),read(b),read(x),read(y);
28         for(int i=1; i<=n; ++i) fa[i]=i;
29         if(GCD(x,y)>b||x==y)
30         {
31             puts("YeS");
32             continue;
33         }
34         for(int fx,fy,i=b+1; i<=n; ++i)
35         {
36             fx=find(i);
37             for(int j=i; j<=n; j+=i)
38                 fa[find(j)]=fx;
39         }
40         if(find(x)==find(y)) puts("YeS");
41         else puts("No");
42     }
43     return 0;
44 }
45
46 int Aptal=Presist();
47 int main(){;}

AC

T2  长命女 (洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows

题目背景
夏夜宴,绿酒一杯歌一遍
再拜陈三愿:
一愿郎君千岁;
二愿妻妾常健;
三月如同梁上雕燕,
你我常相见
题目描述
给定一个r*c的矩阵,在这个矩阵中有...一棵树!这棵树上有n间小屋,每间小
屋都有v[i]个松果,两个小屋之间有一条双向树枝相连。
小浪是一只特别懒的小松鼠, 他希望知道从每间小屋 向外扩展 γ 步范围内最多能
拿到多少松果,不聪明的你可以帮帮他吗????
输入描述
第一行 r,c
第二行 n,γ
以下n-1行 x,y有连边
最后一行n个数 表示每个小屋的松果数目。
输出描述
n行,每行为第i个小屋最多能拿到多少松果
样例输入
8 8
6 2
5 1
3 6
2 4
2 1
3 2
1
2
3
4
5
6
样例输出
15
21
16
10
8
11
数据范围
对于10%的数据:n<=10,r<=c<=50
对于40%的数据:n<=1000
对于100%的数据:n<=100000;0<=v[i]<=1000;γ<=20;r<=1000000,c<=1000000

 1 #include <cstdio>
 2
 3 inline void read(int &x)
 4 {
 5     x=0; register char ch=getchar();
 6     for(; ch>‘9‘||ch<‘0‘; ) ch=getchar();
 7     for(; ch>=‘0‘&&ch<=‘9‘; ch=getchar()) x=x*10+ch-‘0‘;
 8 }
 9 const int N(100000+5);
10 int val[N],n,m;
11 int head[N],sumedge;
12 struct Edge {
13     int v,next;
14     Edge(int v=0,int next=0):v(v),next(next){}
15 }edge[N<<1];
16 inline void ins(int u,int v)
17 {
18     edge[++sumedge]=Edge(v,head[u]);
19     head[u]=sumedge;
20     edge[++sumedge]=Edge(u,head[v]);
21     head[v]=sumedge;
22 }
23
24 int sum[N];
25 int DFS(int u,int pre,int cnt)
26 {
27     if(cnt<0) return 0;
28     sum[u]=val[u];
29     for(int v,i=head[u]; i; i=edge[i].next)
30     {
31         v=edge[i].v;
32         if(pre==v) continue;
33         sum[u]+=DFS(v,u,cnt-1);
34     }
35     return sum[u];
36 }
37
38 int Presist()
39 {
40     freopen("young.in","r",stdin);
41     freopen("young.out","w",stdout);
42
43     int r,c; read(r),read(c);
44     read(n),read(m);
45     for(int u,v,i=1; i<n; ++i)
46         read(u),read(v),ins(u,v);
47     for(int i=1; i<=n; ++i) read(val[i]);
48     for(int i=1; i<=n; ++i)
49         printf("%d\n",DFS(i,-1,m));
50     return 0;
51 }
52
53 int Aptal=Presist();
54 int main(){;}

40分暴力 (洛谷60)

 1 #include <cstdio>
 2
 3 inline void read(int &x)
 4 {
 5     x=0; register char ch=getchar();
 6     for(; ch>‘9‘||ch<‘0‘; ) ch=getchar();
 7     for(; ch>=‘0‘&&ch<=‘9‘; ch=getchar()) x=x*10+ch-‘0‘;
 8 }
 9 const int N(100000+5);
10 int val[N],n,m;
11 int head[N],sumedge;
12 struct Edge {
13     int v,next;
14     Edge(int v=0,int next=0):v(v),next(next){}
15 }edge[N<<1];
16 inline void ins(int u,int v)
17 {
18     edge[++sumedge]=Edge(v,head[u]);
19     head[u]=sumedge;
20     edge[++sumedge]=Edge(u,head[v]);
21     head[v]=sumedge;
22 }
23
24 int sum[N][25],dad[N];
25 void DFS(int u,int pre)
26 {
27     dad[u]=pre;
28     sum[u][0]=val[u];
29     for(int v,i=head[u]; i; i=edge[i].next)
30     {
31         v=edge[i].v;
32         if(v==pre) continue;
33         DFS(v,u);
34         for(int j=1; j<=m; ++j)
35             sum[u][j]+=sum[v][j-1];
36     }
37 }
38
39 int Get(int x)
40 {
41     int ret=sum[x][m],t=m;
42     for(; x!=1&&t; x=dad[x])
43     {
44         ret+=sum[dad[x]][--t];
45         if(t) ret-=sum[x][t-1];
46     }
47     return ret;
48 }
49
50 int Presist()
51 {
52 //    freopen("young.in","r",stdin);
53 //    freopen("young.out","w",stdout);
54
55 //    int r,c; read(r),read(c);
56     read(n),read(m);
57     for(int u,v,i=1; i<n; ++i)
58         read(u),read(v),ins(u,v);
59     for(int i=1; i<=n; ++i) read(val[i]);
60     DFS(1,-1);
61     for(int i=1; i<=n; ++i)
62       for(int j=1; j<=m; ++j)
63         sum[i][j]+=sum[i][j-1];
64     for(int i=1; i<=n; ++i)
65         printf("%d\n",Get(i));
66     return 0;
67 }
68
69 int Aptal=Presist();
70 int main(){;}

树形DP f[i][j]表示i节点,扩展j步的最大数

T3  春江花月夜(  BZOJ 1108: [POI2007]天然气管道Gaz )

题目背景
春江潮水连海平,海上明月共潮生。滟滟随波千万里,何处春江无月明!
江流宛转绕芳甸,月照花林皆似霰;空里流霜不觉飞,汀上白沙看不见。
江天一色无纤尘,皎皎空中孤月轮。江畔何人初见月?江月何年初照人?
人生代代无穷已,江月年年只相似。不知江月待何人,但见长江送流水。
白云一片去悠悠,青枫浦上不胜愁。谁家今夜扁舟子?何处相思明月楼?
可怜楼上月徘徊,应照离人妆镜台。玉户帘中卷不去,捣衣砧上拂还来。
此时相望不相闻,愿逐月华流照君。鸿雁长飞光不度,鱼龙潜跃水成文。
昨夜闲潭梦落花,可怜春半不还家。江水流春去欲尽,江潭落月复西斜。
斜月沉沉藏海雾,碣石潇湘无限路。不知乘月几人归,落月摇情满江树。
题目描述
小春和小江是两个很好的朋友,他们都信奉灯神教。有一天,小春突发奇想,学
习起了莫比乌斯反演,恰好在这天,小江也突发奇想,学起了快速傅里叶变换。
可是莫比乌斯反演比快速傅里叶变换字数多啊,于是乎小春就比小江学得快。
小春非常得意,利用所学知识给小江出了一倒防AK好题:已知在这个宇宙中有n
个太阳和n个月亮,由于宇宙之神--灯神是一个喜爱数学的神,所以他就规定了n
属于数域P。灯神把整个宇宙抽象成了一个 二维平面坐标系,对于每个太阳和每
个月亮,都有自己的一个坐标xi,yi 坐标也是数域成员。如果一个太阳想去找一
个月亮玩,那么 他只能往东面或者南面飞 。月亮是不能动哒!飞行单位距离为1,
他就会消耗
? ?
1 mod ) / * (
2 / ) 1 (
1
?
?
?
?
q p kq p
p
k
的花费 灯神想知道怎么让每个太阳都能找
到某个月亮玩使得花费最小 (一个月亮只能被找一次) ?小江一下子就被难倒了,
询问聪明的你, 那么聪明年轻帅气漂亮颜值居高无比的你能帮助他解决这个问题
吗?(保证答案在long int的十分之一范围内)。
题目提示
1.数域定义 设F是一个数环( 设S S 是复数集的非空子集,如果S S 中的数对任意两个
数的和 、 差 、 积仍属于S S , 则称S S 是一个数环。),如果对任意的a,b∈F而且a≠0,
则b/a∈F;则称F是一个数域。著名的域有:Klein四元域。
数域性质 任何数域都包含有理数域Q。即Q是最小的数域。
证明:F必有一个非零元素a.由于F为数环,所以0 = a - a属于F1 = a/a 属于F0
和1都属于F那么2 = 1+13 = 2+1。。。。自然数N都属于F-n = 0 - n 也属于F
故整数集合Z都属于F那么a/b 也属于F(其中a,b为整数)这样,任何一个数域都
包含Q
2.莫比乌斯反演
卷积:令d|n表示d能整除n,比如 2|4 (=.=)定义关于整数的函数F(n)然后定义
G(n)=Σ(F(d)) (其中d|n)
反演原式:G(n)=Σ(F(d))(其中d|n)
反演公式:F(n)=Σ(U(n/d)*G(d))这里U是莫比乌斯函数,他是每一项 G(d) 的系
数。
3.欧拉函数:
其中p1, p2……pn为x的所有质因数,x是不为0的整数。
φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。
输入描述
第一行为一个正整数n,表示天月亮的数量(太阳的数量与之相等)。接下来n
行,每行两个整数xi和yi,表示太阳的坐标。规定向东向北为x,轴正方向。接下
来n行,每行两个数a和b,示月亮的坐标。
输出描述
第一行包含一个数,表示最小的花费。答案对斐波那契数列的第100000007项取
模。
样例输入
3
3 5
1 2
4 3
6 3
5 2
2 1
样例输出
9
数据范围
对于30%的数据 n<=300
对于第四,五个测试点 n<=20000
对于第六,七,八个测试点 n<=25000
对于100%的数据 n<=3 0 0 0 1;0<=xi,yi<=1 0 0 0 0 0,0<=a,b<=1 0 0 0 0 0.
保证答案存在。

无聊的公式、

一定有解,且太阳只能向南和东走,画图意会吧。。

 1 #include <algorithm>
 2 #include <cstdlib>
 3 #include <cstdio>
 4
 5 inline void read(long long &x)
 6 {
 7     x=0; register char ch=getchar();
 8     for(; ch>‘9‘||ch<‘0‘; ) ch=getchar();
 9     for(; ch>=‘0‘&&ch<=‘9‘; ch=getchar()) x=x*10+ch-‘0‘;
10 }
11
12 long long ans,n,x,y;
13
14 int Presist()
15 {
16 //    freopen("moon.in","r",stdin);
17 //    freopen("moon.out","w",stdout);
18
19     read(n);
20     for(long long i=1; i<=n ;++i)
21     {
22         read(x),read(y);
23         ans-=x,ans+=y;
24     }
25     for(long long i=1; i<=n ;++i)
26     {
27         read(x),read(y);
28         ans+=x,ans-=y;
29     }
30     printf("%I64d\n",ans);
31     return 0;
32 }
33
34 int Aptal=Presist();
35 int main(){;}

AC

时间: 2024-10-13 15:47:50

9.14——模拟赛的相关文章

9.14 模拟赛

模拟赛第三弹~ T1 题意:给你一个数列,要求删掉任意一种整数,使得剩下的新数列中连续的相等的数最多 例如 2 7 3 7 7 3 3 7 7 5 7,删掉3以后剩的7有四个连续的,最多 思路:暴力枚举去掉哪个......这算是一道水题吧 代码丢了...... TAT T2 题意:有n本书,每本书有宽度和高度.现在你有无数个书架,每个书架的宽度为w,高度由最高的书决定 问在书本按顺序放的情况下,总的书架高度最小是多少 思路:dp,dp[i]表示做到第i本书时的最小高度和. 每次先找到能以编号j的

东方14模拟赛之noip2015/day1/3/神奇的幻方

总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  128000kB 描述 幻方是一种很神奇的N*N 矩阵:它由数字 1,2,3, … …,N*N 构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1 写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K= 2,3, …,N*N ): 若 (K−1) 在第一行但不在最后一列,则将K填在最后一行,(K−1) 所在列的右一列: 若 (K−1) 在最

9.14模拟赛

T1  COGS2524评测 题目描述 从1-N1?N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. 输入输出格式 输入格式: 第一行一个数字NN. 输出格式: 一行一个整数代表答案对100000007100000007取模之后的答案. 输入输出样例 输入样例#1: 7 输出样例#1: 144 说明 对于20\%20%的数据,1 \leq N \leq 1001≤N≤100. 对于50\%50%的数据,1 \leq N \leq 50001≤N≤5000. 对于70\

东方14模拟赛之岛屿

02:岛屿 查看 提交 统计 提问 总时间限制:  40000ms 单个测试点时间限制:  4000ms 内存限制:  128000kB 描述 从前有一座岛屿,这座岛屿是一个长方形,被划为N*M的方格区域,每个区域都有一个确定的高度.不幸的是海平面开始上涨,在第i年,海平面的高度为t[i].如果一个区域的高度小于等于海平面高度,则视为被淹没.那些没有被淹没的连通的区域够成一个连通块.现在问第i年,这样的连通块有多少个. 例如:第一年海平面高度为1,有2个连通块. 第二年海平面高度为2,有3个连通

【BZOJ】【2741】【FOTILE模拟赛】L

可持久化Trie+分块 神题……Orz zyf & lyd 首先我们先将整个序列搞个前缀异或和,那么某一段的异或和,就变成了两个数的异或和,所以我们就将询问[某个区间中最大的区间异或和]改变成[某个区间中 max(两个数的异或和)] 要是我们能将所有[l,r]的答案都预处理出来,那么我们就可以O(1)回答了:然而我们并不能. 一个常见的折中方案:分块! 这里先假设我们实现了一个神奇的函数ask(l,r,x),可以帮我们求出[l,r]这个区间中的数,与x最大的异或值. 我们不预处理所有的左端点,我

10.30 NFLS-NOIP模拟赛 解题报告

总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没码QAQ 现在我来写解题报告了,有点饿了QAQ.. 第一题 题目 1: 架设电话线 [Jeffrey Wang, 2007] 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务,于 是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线.新的电话线架设 在已有的N(2 <=

【题解】PAT团体程序设计天梯赛 - 模拟赛

由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 设计一个分数类,重载加法运算符,注意要约分,用欧几里得算法求个最大公约数即可. 1 #include <cstdio> 2 3 long long abs(long long x) 4 { 5 return x < 0 ? -x : x; 6 } 7 8 long long gcd(long

[GRYZ]寒假模拟赛

写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优(le)美(se)的文字加工后,有故事有题目有人物有奸情的模拟赛正式呈上. 我是正文 题目名 GRYZ娱乐时刻 GRYZ追击时刻 GRYZ就餐时刻 源文件 hyxzc.cpp/c/pas clikar.cpp/c/pas eat.cpp/c/pas 输入文件 hyxzc.in clikar.in ea

[铁一中OI模拟赛]2017.8.19 Day1

T1 小Z的情书 题目链接 思考: 题目主要难度在于旋转后的位置如何,在手写了样例之后不难发现规律. #include <cstdio> #include <cstring> #define up(a,b,c) for(register int c=a;c<=b;++c) #define down(a,b,c) for(register int c=a;c>=b;--c) const int Maxn=1005; int n; bool Map[Maxn][Maxn],