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

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

别期待自己暴力过了!..(举例,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值