你有多少胜算把我困在里面周六省赛模拟大概想到了一些ZOJ - 3787ZOJ - 3785 费马,,??

xiaoxiao2021-02-28  8

首先.......对那种过的很少的- -...别期待自己能暴力过!!!!!这么少人是有理由的- -

别期待自己暴力过了!..(举例,1e6的数据,你觉得1e3的复杂能过啊,....但是其实比的时候是1e6-1e3,再乘上,一下子就超时了呀)

链接https://vjudge.net/contest/224185#status/000_/-/0/

大概就是,题其实不难,省赛可能都是这样的,但是就是写不对

(我感觉)【尤其是复制的时候会有各种各样的问题】

多简单的题啊,我竟然可以搞这么久

https://vjudge.net/contest/224185#problem/G

这个就是模拟加减法..反正当时错的时候是错在减法的运算律....

真的是- -

还有cin>>的时候的错 ,以及复制的时候可能没改全,s1s2什么的,还有a1+a2,最后如果是先算的话,后面用运算律

后面先算,那么应该是a1-temp而不是temp-a1

最后还错在如果前面是减法后面也是减法的话,是不能结合着算的,不能先算后面的再算前面的,这些地方想想就好后怕啊!。。。。脑子清醒真的是挺可怕的事情- -。。

对了...贴个图(吓死了)

以及,下面那个也不难的但是自己写。。。明明十五分钟可以完全搞定的,后面简直心态崩了,WA得。。

3787哦,https://vjudge.net/problem/ZOJ-3787、

cmp写反了!。。大小的比较,写的时候就要注意一下

但是有个好地方,就是给的三个地方的时间,时分秒,其实可以优化成3600*hour+60*min+s;

(可以节省很多地方)

用个ID存一下就好啦。

【这个题还有个坑,就是第一个人肯定要先开门,但是给你的顺序,就是你要记录的顺序可能是无序的!》。。】

啊,就是你输出的时候也要重新排序一下- -

按照我的写法好像还要先输出最开始那个,结果哦还是换成i从1开始好一点

然后最可怕的地方来了。。。。

if (t > q[i].num); else { record[cnt++]=q[i].id ; // cnt++; t = q[i].num+par;}

一个是,没事的话直接;了,还有就是最开始是t+=par嘛,应该是q[i].num的,但是改的时候

最开始是+=...  改成=才对啊,猛然没发现,样例骗了过去,....多可怕的事实啊0.0代码能力真的还需要增强!!!!

就是说嘛,其实这个题里没什么东西。。。但是就是会错

真·我还差多远

#include<iostream> #include<string> #include<stdio.h> #include<algorithm> using namespace std; typedef long long ll; struct node{ int id; int num; node(int _id, int _hour) :id(_id), num(_hour){} node(){} }q[20005]; bool cmp(node a, node b) { return a.num < b.num; } int time(int a, int b, int c) { return a * 3600 + b * 60 + c; } int record[20005]; int main() { int aaa; cin >> aaa; while (aaa--) { //memset(record, 0, sizeof(record)); int n; int par; cin >> n >> par; int hour, min, s; int temp; for (int i = 1; i <= n; i++) { scanf("%d:%d:%d", &hour, &min, &s); temp=time(hour, min, s); q[i].num=temp; q[i].id=i; } sort(q+1, q + n+1, cmp); int t; t = q[1].num + par; int cnt = 0; record[cnt++] = q[1].id; for (int i = 2; i <= n; i++) { if (t > q[i].num); else { record[cnt++]=q[i].id ; // cnt++; t = q[i].num+par; //????????? } } sort(record, record + cnt); cout << cnt << endl; for (int i = 0; i < cnt-1; i++) cout << record[i] << " "; cout << record[cnt - 1] << endl; for(int i=0;i<cnt;i++) record[i]=-1; }//.... return 0; }

然后3785,也不复杂...

感觉着里面有规律的,隐隐约约发现好像平方就跟没平方一样?

比如8%7=1,8*8=64,64%7=1; 9*9=81%7

6*6=36 (1) 5*5=25 (4)

....

然而!大家表示:打个表吧,发现有294这个神器的数,然后就简单了!...

(最开始我想的是%7就没了,仔细想想其实没任何理由会没掉的)

"通guo打表发现周期是294,那么就简单了"/

打表i的i次方%7后的值,就可以发现42一循环

然后用公式计算出结果

http://www.cnblogs.com/njczy2010/p/3930688.html

这个写的有点意思...

感觉今天奇奇怪怪的-.- 不知道在写什么

*******************

然后发现里面藏着一个费马小引理- -...

https://blog.csdn.net/zcy_2016/article/details/55054146

(以下为粘贴代码)

费马小定理:假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。

同余证法:任意取一个质数,比如13。考虑从1到12的一系列整数1,2,3,4,5,6,7,8,9,10,11,12,给这些数都乘上一个与13互质的数,比如3,得到3,6,9,12,15,18,21,24,27,30,33,36。对于模13来说,这些数同余于3,6,9,12,2,5,8,11,1,4,7,10。这些余数实际上就是原来的1,2,3,4,5,6,7,8,9,10,11,12,只是顺序不同而已。把1,2,3,…,12统统乘起来,乘积就是12的阶乘12!。把3,6,9,…,36也统统乘起来,并且提出公因子3,乘积就是312×12!。对于模13来说,这两个乘积都同余于1,2,3,…,12系列,尽管顺序不是一一对应,即312×12!≡12!mod 13。两边同时除以12!得312≡1 mod 13。如果用p代替13,用x代替3,就得到费马小定理xp-1≡1 mod p。

(上面的是3^12....)

然后还有就是,好像写成a(p-1)%p=1一样的-.-...

https://blog.csdn.net/piekey1994/article/details/38436511

转载请注明原文地址: https://www.6miu.com/read-1900145.html

最新回复(0)