码迷,mamicode.com
首页 > 其他好文 > 详细

【寒假集训系列DAY3】

时间:2019-01-29 14:57:29      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:考试   ext   正整数   表示   using   lld   eof   col   pen   

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\n",h-ans+1);
33     }
34     return 0;
35 }

 

【寒假集训系列DAY3】

标签:考试   ext   正整数   表示   using   lld   eof   col   pen   

原文地址:https://www.cnblogs.com/zhenglw/p/10333740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!