寒假集训系列DAY3
Posted zhenglw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寒假集训系列DAY3相关的知识,希望对你有一定的参考价值。
DAY2的坑之后会补上
DAY3
今天暴力分拿的还是不错的...60+30+25=115,但还是太弱了呀,每题都只会暴力(话说第3题直接输-1给了15分,本以为只会给5分,然后打了半个小时的爆搜...)
T1:Simple (图样图森破)
【问题描述】
对于给定正整数 n,m,我们称正整数 c 为好的,当且仅当存在非
负整数 x,y,使得 n*x+m*y=c。
现在给出多组数据,对于每组数据,给定 n,m,q,求[1,q]内有
多少个正整数不是好的。
【输入格式】
第一行,一个整数 T 表示数据组数。
接下来每行三个数,分别表示 n,m,q,即一组询问。
【输出格式】
对于每组数据,输出一行表示答案。
考试的时候打了一个暴力,妥妥的60分...
交卷前问了一下Venus巨佬,然而他说是一道DP题,感觉瞬间明白了什么,其实就是一道简单的DP啊,但来不及改了...
思路:DP(当然数学方法也可以,但是好烦啊...)类似于背包?反正暴力填表就好了..把“好的数”求出来,然后减一下就好了
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define int long long 6 using namespace std; 7 inline int read(){ 8 char chr=getchar(); int f=1,ans=0; 9 while(!isdigit(chr)) {if(chr==‘-‘) f=-1;chr=getchar();} 10 while(isdigit(chr)) {ans=(ans<<3)+(ans<<1);ans+=chr-‘0‘;chr=getchar();} 11 return ans*f; 12 } 13 void write(int x){ 14 if(x<0) putchar(‘-‘),x=-x; 15 if(x>9) write(x/10); 16 putchar(x%10+‘0‘); 17 } 18 int n,m,h,f[2000005]; 19 signed main(){ 20 freopen("simple.in","r",stdin); 21 freopen("simple.out","w",stdout); 22 int t=0; 23 t=read(); 24 for(int i=1;i<=t;i++){ 25 n=read(),m=read(),h=read(); 26 memset(f,-1,sizeof(f)); 27 f[0]=0; int last=0; 28 for(int j=1;f[(last+m)%n]==-1;j++) f[(last+m)%n]=f[last]+m,last=(last+m)%n; 29 int ans=0; 30 for(int i=0;i<n;i++) 31 if(f[i]!=-1&&f[i]<=h) ans+=(h-f[i])/n+1; 32 printf("%lld ",h-ans+1); 33 } 34 return 0; 35 }
以上是关于寒假集训系列DAY3的主要内容,如果未能解决你的问题,请参考以下文章
软件创新实验室2021年寒假集训Java技术培训——Java基础
软件创新实验室2021年寒假集训Java后端开发漫谈及感悟分享