GDOI-J 2022游记
day -1
来机房听教练讲了一下一些注意事项,然后就开始颓废
好耶逃掉一节自习+一节数学)
orz csh clf cyl zjh zzl
被迫成为卷心菜
分块写挂了(ctmd
csh cyl zzh的QQ邮箱用不了,cyl直接用163 nb啊/qiang
clf在打导弹拦截
焯我最长上升子序列忘了(果然我dp最差
day 0
羡慕js期中考考完了
然而ls还没开始
GDOI后面马上就期中考,直接裂开
文科提前挂科(
下午体育1000m突破个人新高
希望GDOI也能像一样rp++
刚刚去电脑室打游记,刚刚好教练在布置考场
转战初二办公室
打游记时一位英语大佬过来
大佬:下午体育多少
me : ......(省略时间,不想被嘲笑)
大佬:就这
ctmd
生物实验模拟考,抽到一个最不会的:叶片下表皮临时玻片标本
寄
然而最不会的环节竟然一遍过了,但就在最后一步观察清晰物像
老师:你这个清晰吗?
me(重新看了一次显微镜):清晰啊
老师:你再调一下
我转了一下细准焦,感觉没办法再清晰了,然后举手报告老师
老师:你看这是不是比第一次清晰多了
me:......
老师写了个9分,走了,我再看了一次。?不是和第一次差不多吗?
大无语
(以后我绝对要转细准焦螺旋!
晚上被班主任叫到宿舍外面,原因:在宿舍里扮演西班牙斗牛士
day 1
sb舍友害得我:
- 4:20
- 4:30
- 4:50
- 5:15
- 5:25
- 5:35
- 5:50
以上时间均醒来一次
(跟个闹钟似的/fn
6点起床,headache+sore thorat
害怕的要死,连灌两杯水,好多了
水真是大自然的馈赠
上了节早读,语文渣对待一张名著的测试题表示直接上天
不管了7:50直接逃去机房
太棒了逃掉三节whk
到机房时csh已经在了
(果然越强的人来得越早,我除外
打了一下对拍,没问题
开始录屏+视频监控,发现水杯没带
焯!只能拜托让老师帮我带一个纸水杯装水
start
解压密码:Hope!To@See#You¥Soon
but I do not hope to see you again
T1怎么越来越简单了,明年是不是直接A+B了
由于我轻敌,审错题意,浪费了10分钟
#include<cstdio>
#include<iostream>
#include<string>
#include<map>
using namespace std;
int n,m[4];
map<string,int> people;
int maxn;
string maxp;
int index;
int main()
{
freopen("zouji.in","r",stdin);
freopen("zouji.out","w",stdout);
scanf("%d%d%d%d",&n,&m[1],&m[2],&m[3]);
for(int i=1,way;i<=n;i++)
{
string name;
cin>>name>>way;
people[name]+=m[way];
if(people[name]>maxn)
{
maxp=name;
maxn=people[name];
}
}
cout<<maxp<<" "<<maxn;
fclose(stdin),fclose(stdout);
return 0;
}
T2......
焯T2就那么难了吗?
想了亿下,想到
- 只有数字一样异或和才相等
- 异或的结果一定
,所以异或和如果要是 的话每一个异或的结果都必须是
嗯,好像没错
对了一下样例,没错
#include<cstdio>
int n;
int a[100010];
int ans;
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
scanf("%d",&n);
ans=n;
a[0]=-114514;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]==0) ans--;
else if(a[i]==a[i-1]) ans-=2;
}
if(ans<=0) printf("-1");
else printf("%d",ans);
fclose(stdin);
fclose(stdout);
return 0;
}
T3什么sb树形结构
我最不会树了,然后你给我搞一个树
I love you CCF.
又是审错题意,发现后直接立马把 dfs
改成 bfs
搞了一个贪心,虽然找不到一组能 hack
的数据(也许是我非?),但感觉肯定错了
#include<cstdio>
#include<queue>
#define ll long long
using namespace std;
priority_queue<pair<ll,int> > q;
struct edge
{
int v;
int nxt;
}e[100010];
int head[100010];
int tot;
int n;
ll w[100010];
int son[100010];
int last;
ll ans;
ll m=1;
void add(int u,int v)
{
e[++tot].v=v;
e[tot].nxt=head[u];
head[u]=tot;
}
inline ll max(ll a,ll b)
{
return a>b?a:b;
}
inline ll min(int a,ll b)
{
return a<b?a:b;
}
void bfs()
{
ans=w[1];
q.push(make_pair(w[1],1));
while(!q.empty())
{
ll maxw=q.top().first;
int x=q.top().second;
if(x==last) break;
last=x;
ans=min(ans,m*maxw);
// printf("x=%lld,m=%lld,maxw=%d,m*maxw=%lld,ans=%d\n",x,m,maxw,m*maxw,ans);
if(son[x]) m=m-1+son[x],q.pop();
for(int i=head[x];i;i=e[i].nxt)
{
int v=e[i].v;
q.push(make_pair(w[v],v));
}
}
}
int main()
{
freopen("line.in","r",stdin);
freopen("line.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&w[i]);
for(int i=2,f;i<=n;i++)
{
scanf("%d",&f);
add(f,i);
son[f]++;
}
bfs();
printf("%lld",ans);
fclose(stdin),fclose(stdout);
return 0;
}
T4 盲猜dp,但是不会打,打了一个
#include<cstdio>
#define int long long
const int mod=998244353;
int n,m,l,r;
int a[100010],c[100010];
int maxdif;
int ans;
int max(int a,int b)
{
return a>b?a:b;
}
signed main()
{
freopen("counting.in","r",stdin);
freopen("counting.out","w",stdout);
scanf("%lld%lld%lld%lld",&n,&m,&l,&r);
for(int i=1,diff,num;i<=n;i++)
{
scanf("%lld%lld",&diff,&num);
a[diff]=num;
maxdif=max(maxdif,diff);
}
for(int d=1;d<=maxdif;d++)
for(int i=d;i<=maxdif;i+=d)
if(a[i])
{
int tmp=1;
int add=0;
int num=0;
for(int j=i;j<=maxdif&&num+1<=r&&a[j];j+=d)
{
num++;
tmp=(tmp*a[j])%mod;
if(num>=l) add+=tmp;
}
if(num>=l) ans=(ans+add)%mod;
}
printf("%lld",ans);
fclose(stdin),fclose(stdout);
return 0;
}
/*
6 12 2 3
2 2
4 2
6 2
8 2
12 2
16 2
*/
过了样例,随便用脚造了几组数据,发现
(严重怀疑我打了一个假的代码
管他呢就默认它是正解了(
预计:100+100+0+60=260
考完后发现T4在修改 add
的时候没有 %mod
大危
但是感觉会比这个低很多,毕竟T2和T3和T4都不确定
如果我T1炸了就真的没了
打完后看了一下大屏幕(教室的),发现js和cs都一堆人,害……
炸了,回家了
由csh提供给我的帖子发现我T1炸了
f**k
听完讲解,估分:90+0+60+60=210
害
晚上被迫whk,由于消耗过多脑细胞,9点左右睡着了
day 2
起床后,啥也没干,在电脑前呆坐了好久
调了一下支架(今天在家里考),登上GDOI网址,等密码……
密码:alwayS)weaR(A*masK&
好耶mask的歌词诶
rp++
start
T1一开始以为很简单,打了一个
#include<cstdio>
int T;
int n;
int cnt;
int main()
{
freopen("bing.in","r",stdin);
freopen("bing.out","w",stdout);
scanf("%d",&T);
while(T--)
{
cnt=0;
scanf("%d",&n);
for(int i=3;i<=n;i++)
if((n%i!=0)&&(n%i!=1)&&(n%i!=2)) cnt++;
printf("%d\n",cnt);
}
fclose(stdin),fclose(stdout);
return 0;
}
T2想了大半天,口胡出一个树形dp
#include<cstdio>
struct edge
{
int v,nxt;
}e[100010];
int head[100010];
int tot;
int n;
int root;
int son[100010];
int dp[100010];
int ans;
void add(int u,int v)
{
e[++tot].v=v;
e[tot].nxt=head[u];
head[u]=tot;
}
void dfs(int x)
{
if(!son[x]) dp[x]=1;
for(int i=head[x];i;i=e[i].nxt)
{
int v=e[i].v;
dfs(v);dp[x]+=dp[v];
son[x]--;
}
dp[x]++;
}
int main()
{
freopen("webpage.in","r",stdin);
freopen("webpage.out","w",stdout);
scanf("%d",&n);
for(int i=1,f;i<=n;i++)
{
scanf("%d",&f);
if(f==-1) root=i;
else add(f,i),son[f]++;
}
dfs(root);
printf("%d",dp[root]);
fclose(stdin),fclose(stdout);
return 0;
}
自己测了几组数据,貌似是正确的,过掉
T3看了一眼,果断放弃
#include<cstdio>
int main()
{
freopen("clock.in","r",stdin);
freopen("clock.out","w",stdout);
printf("I love you GDOI\n");
printf("Hope to see you soon!\n");
printf("Hello GDOI!\n");
printf("赞一波出题组,题目出得好,就是T3大模拟有点……\n");
printf("没时间做T3qwq\n");
fclose(stdin),fclose(stdout);
return 0;
}
T4看了一眼,盲猜迭代加深,乱搞出来了
#include<cstdio>
#include<cstring>
int T;
char str[100010];
int order[100010];
int g[1000][1000];
int nxtx[4]={0,0,1,-1};
int nxty[4]={1,-1,0,0};
int sx,sy;
int n,m;
bool flag;
int len;
void dfs(int x,int y,int now,int limit)
{
if(x<1||y<1||x>n||y>m)
{
flag=1;
return ;
}
if(flag) return ;
if(now>limit) return ;
int nx=x+nxtx[order[now]],ny=y+nxty[order[now]];
if(!g[nx][ny]) dfs(nx,ny,now+1,limit);
if(flag) return ;
dfs(x,y,now+1,limit);
if(flag) return ;
}
int main()
{
freopen("robot.in","r",stdin);
freopen("robot.out","w",stdout);
scanf("%d",&T);
while(T--)
{
memset(g,0,sizeof(g));
flag=0;
scanf(" %s",str);
len=strlen(str);
for(int i=0;i<len;i++)
{
if(str[i]=='D') order[i+1]=0;
if(str[i]=='A') order[i+1]=1;
if(str[i]=='S') order[i+1]=2;
if(str[i]=='W') order[i+1]=3;
}
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
char ch;
scanf(" %c",&ch);
if(ch=='*') g[i][j]=1;
if(ch=='R') sx=i,sy=j;
}
for(int i=1;i<=len&&!flag;i++)
dfs(sx,sy,1,i);
if(flag) printf("YES\n");
else printf("NO\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}
回来检查,发现T1的数据范围会把我T飞,然后开始口胡除了一个
考虑三种情况:
分解
对拍,发现是对的,然后就直接打上去了
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int T;
int n;
int a[1000000];
int tot;
int ans;
void divide(int p)
{
for(int i=1;i<=sqrt(p);i++)
if(p%i==0)
{
if(i>=3) a[++tot]=i;
if(p/i>=3) a[++tot]=p/i;
}
}
int main()
{
freopen("bing.in","r",stdin);
freopen("bing.out","w",stdout);
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
tot=0,memset(a,0,sizeof(a));
divide(n),divide(n-1),divide(n-2);
sort(a+1,a+1+tot);
tot=unique(a+1,a+1+tot)-(a+1);
printf("%d\n",n-2-tot);
}
fclose(stdin),fclose(stdout);
return 0;
}
估分:100+100+0+20=220
比day1还差(
吃完午饭:
教练说可以查分了
100+5+100+100=305
大草
GDOI==CCF->用心做题面,用脚做数据
引用一下豪哥的话:
感谢GDOI,GDOI我祝您财源广进阖家幸福
day 3-4 期中考
大寄
day 3 下午查分,310+220=530,1=了,rk100不多也不少
感谢GDOI的水数据
总结
要多打模拟题了
得多刷数论&dp
day 2 T3没时间做就是因为day 2 T1&T2花了太多时间了
加油! @osfly!
day
发现没有1=
rnmtq
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构