SGU 水题集3 SGU116 SGU117 SGU118 SGU119

10 篇文章 0 订阅

我又推荐了四道大水题

SGU116 【dp+背包】

#include <stdio.h>
#include <stdlib.h>
#define MAX 120005
int prime[1200]={1184,3,5,11,17,31,41,59,67,83,109,127,157,179,191,211,241,277,283,331,353,367,401,431,461,509,547,563,587,599,617,709,739,773,797,859,877,919,967,991,1031,1063,1087,1153,1171,1201,1217,1297,1409,1433,1447,1471,1499,1523,1597,1621,1669,1723,1741,1787,1823,1847,1913,2027,2063,2081,2099,2221,2269,2341,2351,2381,2417,2477,2549,2609,2647,2683,2719,2749,2803,2897,2909,3001,3019,3067,3109,3169,3229,3259,3299,3319,3407,3469,3517,3559,3593,3637,3733,3761,3911,3943,4027,4091,4133,4153,4217,4273,4339,4397,4421,4463,4517,4549,4567,4663,4759,4787,4801,4877,4933,4943,5021,5059,5107,5189,5281,5381,5441,5503,5557,5623,5651,5701,5749,5801,5851,5869,6037,6113,6217,6229,6311,6323,6353,6361,6469,6599,6653,6661,6691,6823,6841,6863,6899,7057,7109,7193,7283,7351,7417,7481,7523,7607,7649,7699,7753,7841,7883,8011,8059,8101,8117,8221,8233,8287,8377,8389,8513,8527,8581,8719,8747,8761,8807,8849,8923,8999,9041,9103,9293,9319,9403,9461,9539,9619,9661,9739,9833,9859,9923,9973,10009,10079,10169,10267,10433,10457,10487,10559,10589,10631,10663,10687,10723,10853,10861,10909,11257,11311,11369,11447,11633,11743,11867,11909,11927,11953,12007,12097,12113,12143,12203,12301,12409,12421,12457,12479,12503,12547,12647,12763,12841,12959,13003,13037,13103,13171,13217,13297,13331,13469,13513,13591,13613,13649,13693,13709,13757,13859,14051,14107,14159,14177,14437,14479,14503,14591,14713,14723,14783,14867,14923,14969,15061,15227,15271,15299,15313,15413,15511,15641,15683,15823,15973,16061,16073,16091,16127,16141,16253,16411,16451,16519,16693,16703,16901,16921,17117,17189,17291,17333,17377,17387,17417,17483,17539,17627,17659,17761,17911,17987,18049,18149,18181,18217,18229,18311,18433,18443,18617,18661,18719,18757,18787,18917,19013,19213,19433,19463,19501,19577,19759,19777,19819,19913,20047,20063,20107,20161,20231,20297,20341,20441,20477,20719,20759,20773,20873,20899,20959,21089,21149,21179,21191,21269,21317,21379,21493,21529,21587,21727,21757,21817,21937,22027,22067,22093,22367,22549,22651,22721,22751,22811,22853,22907,23087,23209,23251,23431,23539,23563,23669,23801,23887,23899,23929,24019,24071,24107,24133,24151,24197,24251,24379,24419,24439,24509,24631,24671,24781,24859,24917,25057,25163,25301,25307,25357,25409,25423,25601,25733,25763,25841,25919,25969,26003,26189,26263,26371,26423,26489,26591,26693,26783,26921,26953,27017,27073,27091,27437,27457,27581,27689,27733,27809,27847,27943,28057,28109,28279,28307,28393,28573,28643,28657,28807,29101,29137,29153,29269,29333,29383,29483,29569,29641,29683,29803,30071,30091,30113,30133,30253,30557,30577,30661,30707,30781,30829,30869,30881,31033,31069,31181,31189,31267,31277,31489,31513,31667,31729,32003,32143,32233,32261,32299,32323,32341,32533,32603,32719,32797,32911,32933,32969,33013,33029,33083,33191,33203,33347,33457,33469,33569,33647,33749,33769,33827,33911,33967,34057,34259,34351,34367,34421,34543,34607,34651,34729,34843,34919,35023,35081,35311,35363,35393,35507,35617,35731,35801,35977,35993,36083,36251,36293,36307,36451,36563,36599,36683,36847,36887,36929,36943,36997,37049,37061,37217,37273,37489,37657,37831,37853,37889,37967,38039,38053,38153,38351,38377,38459,38669,38711,38833,38851,38917,39043,39199,39217,39239,39317,39451,39509,39521,39733,39979,40093,40151,40163,40277,40289,40459,40483,40577,40637,40693,40801,40819,40897,40961,41051,41351,41467,41491,41597,41647,41719,41843,41983,42043,42181,42293,42307,42461,42499,42569,42643,42697,42853,42863,42979,43151,43223,43283,43313,43391,43633,43651,43787,43889,44029,44111,44171,44221,44453,44621,44633,44657,44729,44753,44809,44879,44971,45061,45191,45329,45541,45557,45631,45673,45863,45971,46237,46279,46307,46349,46441,46451,46573,46619,46751,47123,47237,47297,47417,47563,47623,47713,47837,47857,47911,47963,48073,48131,48259,48281,48337,48481,48533,48593,48647,48731,48751,48821,48847,49031,49139,49207,49411,49451,49523,49639,49667,49739,49789,49843,50123,50177,50341,50383,50497,50591,50707,50857,51059,51131,51137,51193,51427,51517,51581,51599,51769,51829,51893,52051,52163,52301,52363,52711,52769,52859,52903,52981,53069,53093,53113,53233,53299,53353,53377,53437,53681,53759,53777,53819,54001,54013,54083,54251,54277,54331,54371,54601,54667,54727,54779,54881,55001,55351,55589,55609,55661,55681,55697,55733,55787,55843,55997,56081,56101,56197,56311,56393,56569,56611,56633,56701,56983,57037,57107,57193,57259,57329,57397,57493,57649,57689,57731,57751,57803,57847,57917,57943,58057,58067,58217,58309,58511,58567,58699,58907,59149,59209,59417,59447,59651,59723,59779,59833,59951,60101,60149,60223,60343,60373,60509,60647,60727,60821,60869,60943,61051,61231,61357,61609,61627,61651,61723,61819,61871,61979,62141,62273,62327,62423,62467,62507,62627,62761,62791,62921,62981,63059,63113,63241,63313,63391,63443,63467,63527,63589,63629,63709,63793,64081,64157,64451,64483,64679,64747,64853,64951,65269,65371,65557,65587,65609,65701,65731,65777,65839,65881,66089,66179,66373,66569,66749,66821,66851,66959,67043,67141,67157,67247,67271,67349,67447,67577,67607,67883,67901,68071,68099,68219,68239,68437,68639,68687,68711,68743,68821,69019,69109,69163,69193,69337,69491,69653,69697,69767,70117,70123,70207,70229,70297,70327,70423,70481,70571,70621,70663,70843,70891,70957,71081,71143,71287,71387,71471,71761,71837,71941,71993,72019,72251,72337,72559,72673,72727,72901,72931,72949,73009,73121,73259,73331,73369,73453,73757,73943,74071,74093,74201,74311,74323,74509,74527,74729,74959,75211,75269,75431,75629,75689,75707,75937,75983,76031,76079,76163,76261,76403,76481,76537,76631,76673,76757,76777,76883,76913,77047,77101,77191,77249,77263,77377,77431,77557,77719,77747,77813,78079,78139,78203,78283,78317,78467,78509,78649,78721,78787,78919,79111,79151,79159,79493,79559,79817,79861,79907,80071,80207,80341,80429,80473,80491,80557,80737,80783,80917,81013,81043,81077,81203,81233,81371,81707,81919,81931,81973,82217,82361,82463,82549,82657,82757,82763,82799,82903,83059,83101,83219,83443,83617,83689,83737,83857,84011,84211,84317,84347,84443,84457,84499,84551,84809,84871,84961,85093,85133,85159,85213,85369,85447,85597,85843,86011,86083,86171,86263,86287,86579,86629,86729,86753,86927,86959,87121,87187,87557,87671,87739,87803,87931,87959,87991,88301,88463,88589,88789,88799,88867,89021,89069,89083,89213,89273,89459,89521,89599,89633,89753,89783,89839,89923,89989,90023,90163,90203,90247,90353,90401,90499,90703,90787,91009,91081,91183,91199,91309,91387,91397,91513,91691,91711,91771,91997,92077,92381,92419,92467,92569,92671,92779,92831,92857,93169,93187,93253,93283,93307,93493,93629,93683,93763,93901,93971,94261,94397,94441,94621,94723,94777,94907,94999,95027,95153,95233,95279,95429,95467,95531,95651,95731,95869,95881,96053,96293,96337,96377,96487,96737,96797,96827,97001,97039,97081,97159,97441,97511,97651,97777,97843,97931,98009,98017,98207,98221,98269,98299,98519,98543,98597,98669,98731,98887,98927,99079,99149,99317,99391,99497,99551,99923};
int n;
int dp[MAX]={0}; 
int go[MAX]={0};
void open()
{
  freopen("116.in","r",stdin);
  freopen("116.out","w",stdout);
}
void close()
{
  fclose(stdin);
  fclose(stdout);
}
void print(int k)
{
  if  (go[k]==0)
  {
    return ;
  }
  {
  	if (n==k)
  	{
	  printf("%d",prime[go[k]]);  
	}
	else
    printf(" %d",prime[go[k]]);
    print(k-prime[go[k]]);
  }
}
void work()
{
  int i,j;
  scanf("%d",&n);
  for (i=0;i<=n;i++)
  if (dp[i]!=0 || i==0)
  {
    for (j=1;prime[j]<=n && j<prime[0];j++)
      if (dp[i+prime[j]]>dp[i]+1 || dp[i+prime[j]]==0)
	  {
	    dp[i+prime[j]]=dp[i]+1;
	    go[i+prime[j]]=j;
	    if (i+prime[j]==6);
	    {
		  i++;
		  i--;
		}
	  }  
  }
  if (dp[n]>0)
  {
    printf("%d\n",dp[n]);
    print(n);
    printf("\n");
  }
  else 
    printf("0\n");
}
int main()
{
  open();
  work();
  close();
  return 0;
}

SGU117

给定n个数,求n个数中有多少个数它的m次方能被k整除

快速幂练手 当然你可以分解质因数

#include <stdio.h><pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
int cases;
int tmp=1;
int ans=0;
void open()
{
  freopen("118.in","r",stdin);
  freopen("118.out","w",stdout);
}
void close()
{
  fclose(stdin);
  fclose(stdout);
}
/*
数根 a的树根与a mod 9 同余
伪证: 
a 的 各数位之和 与 a mod 3 同余 
令 a的各数位之和为 m
m 的各数位之和 与 m mod 3同余
然后自己脑补一下 

int root(int a)
{
  int x=0;
  if (a<10) return a;
  while (a>0)
  {
    x+=a%10;
    a/=10;
  } 
  return root(x);
}*/
void init()
{
  int n,k,i,j;
  scanf("%d",&cases);
  for (i=1;i<=cases;i++)
  {
    scanf("%d",&n);
    for (j=1;j<=n;j++)
    {
	  scanf("%d",&k);
	  tmp=(long long)(tmp*k)%9;
	  ans=(ans+tmp)%9;
	}
	if (ans==0) ans=9;
	printf("%d\n",ans);
	tmp=1;
	ans=0;
  }
}
int main()
{
  open();
  init();
  close();	
  return 0;
}

#include <stdlib.h>int n,m,k;int tot=0;void open(){ freopen("117.in","r",stdin); freopen("117.out","w",stdout);}void close(){ fclose(stdin); fclose(stdout);}int power(int n,int m,int mod){ long long x=n; long long ans=1; while (m>0) { if (m%2) ans=(ans*x)%mod; x=(x*x)%mod; m/=2; } return ans;}void init(){ int i,a; scanf("%d%d%d",&n,&m,&k); for (i=1;i<=n;i++) { scanf("%d",&a); if (power(a,m,k)==0) tot++; } printf("%d",tot);}int main(){ open(); init(); close(); return 0;}

 SGU118数论题 

推出结论来想必就会做了

这里退一下结论

#include <stdio.h>
#include <stdlib.h>
int cases;
int tmp=1;
int ans=0;
void open()
{
  freopen("118.in","r",stdin);
  freopen("118.out","w",stdout);
}
void close()
{
  fclose(stdin);
  fclose(stdout);
}
/*
数根 a的树根与a mod 9 同余
伪证: 
a 的 各数位之和 与 a mod 3 同余 
令 a的各数位之和为 m
m 的各数位之和 与 m mod 3同余
然后自己脑补一下 

int root(int a)
{
  int x=0;
  if (a<10) return a;
  while (a>0)
  {
    x+=a%10;
    a/=10;
  } 
  return root(x);
}*/
void init()
{
  int n,k,i,j;
  scanf("%d",&cases);
  for (i=1;i<=cases;i++)
  {
    scanf("%d",&n);
    for (j=1;j<=n;j++)
    {
	  scanf("%d",&k);
	  tmp=(long long)(tmp*k)%9;
	  ans=(ans+tmp)%9;
	}
	if (ans==0) ans=9;
	printf("%d\n",ans);
	tmp=1;
	ans=0;
  }
}
int main()
{
  open();
  init();
  close();	
  return 0;
}


SGU119 也是数论题

有结论

/*
结论 答案为
  ( a0*i mod n , b0 * i mod n) i=0..n-1
  
  a0 * x+ b0* y == 0 (mod n) 
    (a0*i mod n)*x + (b0*i mod n)*y 
  ==(a0*x mod n + b0*x mod n)*i (mod n)
  ==0*i (mod n)
  ==0 (mod n)
  
  因为 a0*i=a0* i+n 所以 i只需要取 0..-1 
  呵呵,这样就搞定了 
*/
#include <stdio.h>
#include <stdlib.h>
int n,a0,b0;
struct ans
{
  int a;
  int b;
}o[10009]={0};
void open()
{
  freopen("119.in","r",stdin);
  freopen("119.out","w",stdout);
}
void close()
{
  fclose(stdin);
  fclose(stdout);
}
void init()
{
  int i;
  scanf("%d",&n);
  scanf("%d%d",&a0,&b0);
  for (i=1;i<=n;i++)
  {
   o[i].a=a0*i%n;
   o[i].b=b0*i%n; 
  }
}
void sort(int l,int r)
{
  struct ans tmp;
  struct ans whz;
  int i,j;
  i=l;
  j=r;
  tmp=o[(l+r)/2];
  while (i<=j)
  {
    while (o[i].a<tmp.a || (o[i].a==tmp.a && o[i].b<tmp.b)) i++;
    while (o[j].a>tmp.a || (o[j].a==tmp.a && o[j].b>tmp.b)) j--;
    if (i<=j)
    {
	  whz=o[i];
	  o[i]=o[j];
	  o[j]=whz;
	  i++;
	  j--;
	}
  }
  if (l<j) sort(l,j);
  if (i<r) sort(i,r);
}
void print()
{
  int i,l=0;
  o[n+1].a=o[n+1].b=-1;  //注意可能仅有一组解且为 0 0 WA 4 TAT 
  for (i=1;i<=n;i++)
    if (o[i].a!=o[i+1].a || o[i].b!=o[i+1].b)
    {
      l++;
    }
  printf("%d\n",l);
  for (i=1;i<=n;i++)
    if (o[i].a!=o[i+1].a || o[i].b!=o[i+1].b)
    {
      printf("%d %d\n",o[i].a,o[i].b); 
    }
}
int main()
{
  open();
  init();
  sort(1,n);
  print();
  close();
  return 0;
}

我还是挺好的,每次都把各种水题集合在一起发过来

希望大家刷题++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值