【补】2022.7.9———HZOI【这次应该叫高二上几调】划水记
Write In Front
T1 math T2 biology T3 english
注释(调试信息)较多,可以放到本地删掉食用qwq
成绩综述
菜鸡25/38名qAq
题
这个题打表得的;然而刚开始没看出来,之后才发现有下发文件(样例),然后就把表打出来了 然而赛时被卡了5分,因为当时了的时候忘了一些东西
一道裴蜀定理?不过我直接打的表
打表出规律,慢慢推趴
先求出的,然后再和模数求一个
然后大力分类讨论
如果
直接输出~
如果
那么输出从~的所有的倍数(还是~的?忘掉了)
我把的特判了一下,
赛时代码不挂了 跟代码几乎一样 我怕误人子弟
T1
/*#include <iostream>
#include <iomanip>
#define GMY (520&1314)
// #define ll long long
#define re register int
#define MARK cout << "### "
#define _MARK "@@@ "
#define LMARK "~~~ "
#define char_phi signed
#define _ cout << " "
#define Endl cout << endl
#define N 500005
#define K 100005
using namespace std;
long long n, mod;
long long a[N], cnt[K], ans[K];// ans[]优化常数()
#define Fastio
void Fastio_setup(){
#ifdef Fastio
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
#endif
}
long long gcd(int xx, int yy){
return ((xx%yy == 0) ? (yy) : (gcd(yy, xx%yy)));
}
void work(){
// 乍一看没有思路
// 然后还是没有思路
// 然后想到模数,然后觉得还是没有思路
// 通通好像讲过类似的
// 不过那是证明题
// 然后,我猜啊,如果a序列们都是互质的,k以内的基本都能被表示吧?
// 这是个CRT好像
// 不过我不会CRT,当初也没做几个题
// 所以我打算先拿5~6那个点的分
// 然后暴力骗分 小用clock一把
// 那5~6的点我怎么拿分呢..这就比较显然了..
// 然后要开long long应该是
// 沃日!打表大法好!!!
// 我发现了,如果两个数ai, k满足 k%ai == 0,那么就可以表示从a到k所有a的倍数(除了b以外)
// 然后如果k%ai != 0, 如果ai和k有gcd,那就可以表示从0到k的所有gcd的倍数
// 然后如果k和ai互质,那么就可以表示从0~k-1的所有整数了!
// 好耶,累计cnt然后最后判一下cnt[i] == n就行了
// 然后分析一下时间复杂度
// O(n*k)左右(比这个小一点点趴)
// e 完了,用CRT会优化掉(因为有了一大堆模数) 那个k(差不多)
// 但您m我CRT忘掉了阿!
// 所以先打这个【暴力】上去
// 大概能拿70~80pts左右?(如果我没推错的话)
// 沃日,忽然发现ai可能大于k..
cin >> n >> mod;
// 寄 忘了∑这回事了
// 那以下的代码只能拿5~6的点的分..
if(n == 1){// 卑微
for(re i = 1, ai, gcder, lmt, rs ; i <= n ; ++ i){
cin >> ai;
if(ai >= mod) ai %= mod;
if(ai == 0){// 您模数要成0了
// goto Char_phi;
continue;
}
if(mod % ai == 0){// 情况一
lmt = (mod/ai);// 加1以防万一
for(long long j = 1 ; j <= lmt ; ++ j){
rs = (j*ai) % mod;
++ cnt[rs];
// cout << rs << " ";
}
// Endl;
continue;
}
gcder = gcd(ai, mod);
if(gcder == 1){// 互质
for(re j = 1 ; j <= mod ; ++ j){
++ cnt[j];
}
}
else {// gcder
lmt = (mod/gcder);
for(re j = 1 ; j <= lmt ; ++ j){// 忽然想到Chen_jr("陈钩R"()()())
rs = (gcder*j) % mod;
++ cnt[rs];
// cout << rs << " ";
}
// Endl;
}
}
// cout <<
ans[0] = 1, ans[1] = 0;
for(re i = 1 ; i <= mod ; ++ i){
// cout << cnt[i] << " ";
if(cnt[i] == n){
// cout << i << _;
ans[++ ans[0]] = i;
}
}
// Endl;
cout << ans[0] << endl;
for(re i = 1 ; i <= ans[0] ; ++ i)
cout << ans[i] << " ";
}
else {// 还是之前那个,暴力搞分
// 蒟蒻有了新的想法
// 为什么不写出来暴力然后打个表呢?
// 啧 暴力也不好写 暴力要用到基础XIN队..
// 我先回教室拿趟水杯,顺便清醒清醒思路
// 19:51 回来了
// 思路没清晰多少,外面太热了
// 然后决定连基础XIN队也不打,直接打一个拓展XIN队走了
bool same = true;
for(re i = 1 ; i <= n ; ++ i){
cin >> a[i];
if(i != 1 && a[i] != a[i-1]) same = false;
}
if(same == true){
long long lmt = mod / a[1];
if(mod % a[1] == 0) lmt--;
cout << lmt << endl;
cout << "0 ";
for(long long i = 1 ; i <= lmt ; ++ i)
cout << (i*a[1]) % mod << " ";
}
else {// 拓展XIN队
cout << mod << endl;
for(re i = 0 ; i <= mod-1 ; ++ i){
cout << i << " ";
}
}
}
// 好就这样吧去开T2
return ;
// Char_phi:{
// cout << "1" << endl;
// cout << "0" << endl;
// }
}
#define IXINGMY
char_phi main(){
#ifdef IXINGMY
freopen("a.in", "r", stdin);
freopen("a.out", "w", stdout);
#endif
Fastio_setup();
work();
return GMY;
}*/
#include <iostream>
#include <iomanip>
#define GMY (520&1314)
#define ll long long
#define re register int
#define MARK cout << "### "
#define _MARK "@@@ "
#define LMARK "~~~ "
#define char_phi signed
#define _ cout << " "
#define Endl cout << endl
#define N 500005
#define K 100005
using namespace std;
long long n, mod, gcdd;
#define Fastio
void Fastio_setup(){
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
}
long long gcd(long long xx, long long yy){
return ((xx%yy == 0) ? (yy) : (gcd(yy, xx%yy)));
}
void work(){
// 沃日你爹
// 还是%打表大法
// 幸亏发了样例
// 诶呦,舒服
// 先找出ai的共同gcd
// 然后和我刚才那个一样
cin >> n >> mod;
if (n == 1){
int rs; cin >> rs;
if(rs >= mod) rs %= mod;
gcdd = gcd(rs, mod);
if(gcdd == 1){
cout << mod << endl;
for(long long i = 0 ; i <= mod-1 ; ++ i)
cout << i << " ";
}
else if(mod % rs == 0){
int lmt = (mod/rs) - 1;
cout << (lmt+1) << endl;
cout << "0 ";
for(long long i = 1 ; i <= lmt ; ++ i)
cout << i*rs << " ";
}
else {
int lmt = mod/gcdd;
cout << lmt << endl;
-- lmt;
cout << "0 ";
for(long long i = 1 ; i <= lmt ; ++ i)
cout << i*gcdd << " ";// 嘖!我是sb
}
return ;
}
for(re i = 1, rs ; i <= n ; ++ i){
cin >> rs;
if(i == 1){
gcdd = rs;
continue;
}
gcdd = gcd(gcdd, rs);
}
if(gcdd >= mod) gcdd %= mod;
gcdd = gcd(gcdd, mod);
if(gcdd == 1){
cout << mod << endl;
for(long long i = 0 ; i <= mod-1 ; ++ i)
cout << i << " ";
}
else {
// MARK;
long long lmt = (mod/gcdd);
// cout << lmt << endl;
// cout << mod << " " << gcdd << endl;
cout << lmt << endl;
if(mod % gcdd == 0) -- lmt;
for(long long i = 0 ; i <= lmt ; ++ i){
cout << i*gcdd << " ";
}
}
}
// #define IXINGMY
char_phi main(){
#ifdef IXINGMY
freopen("a.in", "r", stdin);
freopen("a.out", "w", stdout);
#endif
Fastio_setup();
work();
return GMY;
}
不会,颓了一篇题解
T2
#include <iostream>
#include <iomanip>
#include <algorithm>
#define GMY (520&1314)
#define char_phi signed
#define re register int
#define MARK cout << "###"
#define Endl cout << endl
#define _MARK "@@@"
#define LMARK "~~~&&&"
#define _ " "
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
#define N 2005
using namespace std;
#define int long long// 典中典
int n, m, cnt, qwq, tmp, on(-1145141919), tw(-1145141919), th(-1145141919), fo(-1145141919), final_ans;
int f[N*N];
struct node{
int x, y, a, b;
friend bool operator <(node A, node B){
return A.a < B.a;
}
}cp[N*N];
void Fastio_setup(){
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
}
void work(){
/*// 因爲之前的註釋太長了所以縮進來摺疊一下
// 可惡..為什麼這麼頹!
// 我也不想頹,但是就是那種根本無法抗拒的頹
// 然後就到這個題了..這個題聽kaguya講的好像很簡單的亞子|·w·)
// 建議把體面吃透再做題 要麼會一直頹
// 然後很重要的有個k...
// 有零說零我覺得fengwu大佬雖然好強但是他的代碼俺讀不懂。。
// 所以看了這位大佬的博客https://blog.csdn.net/qq_54674614/article/details/118658128?ops_request_misc=&request_id=&biz_id=102&utm_term=noip%20math%20biology%20english&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-118658128.142^v32^pc_search_result_control_group,185^v2^control&spm=1018.2226.3001.4187
// 內容詳實,使人贊歎!
// ——————————————————————————————————————————————————
// 然後這個題,k不重要,這樣例也差點給我整迷糊了,不是k的事,是單增的事
// 所以額 老實頹題解
// —————————————————————幾天後————————————————————————
// 放了幾天暑假回來。。。
// 誒呀,這⌈獨立⌋的防空,多麼好事情..
*/
// ——————————————————————————————————————————————————
// T2 biology
// 無聊の跳蚤國國王。。。
// 慎終如始 則無敗事
cin >> n >> m;
for(re i = 1 ; i <= n ; ++ i){
for(re j = 1 ; j <= m ; ++ j){
cin >> cp[++ cnt].a;
if(cp[cnt].a == 0) cp[cnt].a = 1145141919;
cp[cnt].x = i, cp[cnt].y = j, f[cnt] = -1145141919;//
}
}
qwq = cnt;
cnt = 0;
for(re i = 1 ; i <= n ; ++ i)
for(re j = 1 ; j <= m ; ++ j)
cin >> cp[++ cnt].b;
sort(cp+1, cp+cnt+1);
while(cp[qwq].a == 1145141919) qwq --;
tmp = qwq;
while(cp[tmp].a == cp[qwq].a) f[qwq] = cp[qwq].b, qwq --;
int j;
// cout << "qwq: " << qwq << endl;
for(re i = qwq ; i >= 1 ; -- i){
if(cp[i].a == cp[i+1].a) goto CHAR_PHI;
j = i+1;
while(cp[j].a == cp[i+1].a){
on = MAX(on, f[j]-cp[j].x-cp[j].y);
tw = MAX(tw, f[j]+cp[j].x-cp[j].y);
th = MAX(th, f[j]-cp[j].x+cp[j].y);
fo = MAX(fo, f[j]+cp[j].x+cp[j].y);
++ j;
}
CHAR_PHI:{
// MARK, Endl;
f[i] = MAX(f[i], on+cp[i].x+cp[i].y);
f[i] = MAX(f[i], tw-cp[i].x+cp[i].y);
f[i] = MAX(f[i], th+cp[i].x-cp[i].y);
f[i] = MAX(f[i], fo-cp[i].x-cp[i].y);
f[i] += cp[i].b;
}
}
// cout << cnt << _ << n*m << endl;
for(re i = 1 ; i <= cnt ; ++ i){
if(cp[i].a != cp[1].a) break;
final_ans = MAX(final_ans, f[i]);
}
cout << final_ans;
}
// #define IXINGMY
char_phi main(){
Fastio_setup();
#ifdef IXINGMY
freopen("a.in", "r", stdin);
freopen("a.out", "w", stdout);
#endif
work();
return GMY;
}
不会,咕掉
分类:
比赛
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现