【NOIp】NOIp2007

川长思鸟来 2023-08-17 16:49 217阅读 0赞

NOIp2007

T1 统计数字

标签:排序

这题没啥可写的……一遍排序统计次数就行了

code

ContractedBlock.gif ExpandedBlockStart.gif

  1. 1 #include <bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 namespace gengyf{
  4. 4 #define ll long long
  5. 5 inline int read(){
  6. 6 int x=0,f=1;char s=getchar();
  7. 7 while(s<'0'||s>'9'){
  8. if(s=='-')f=-1;s=getchar();}
  9. 8 while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
  10. 9 return x*f;
  11. 10 }
  12. 11 int n,ans=1;
  13. 12 int a[200005];
  14. 13 int main(){
  15. 14 n=read();
  16. 15 for(int i=1;i<=n;i++){
  17. 16 a[i]=read();
  18. 17 }
  19. 18 sort(a+1,a+1+n);
  20. 19 for(int i=2;i<=n;i++){
  21. 20 if(a[i]==a[i-1])ans++;
  22. 21 else{
  23. 22 printf("%d %d\n",a[i-1],ans);
  24. 23 ans=1;
  25. 24 }
  26. 25 }
  27. 26 printf("%d %d",a[n],ans);
  28. 27 return 0;
  29. 28 }
  30. 29 }
  31. 30 int main(){
  32. 31 gengyf::main();
  33. 32 return 0;
  34. 33 }

T1

T2 字符串的展开

标签:模拟,字符串

细节!

<1>当出现”5-x”这种一边是数字一边是字母的时候直接输出

<2>首尾是”-“时原样输出

<3>两个或多个连着的”-“时也是原样输出

其余的按题意模拟即可

code(好像是很久之前写的

ContractedBlock.gif ExpandedBlockStart.gif

  1. 1 #include<iostream>
  2. 2 #include<cstdio>
  3. 3 #include<cstring>
  4. 4 #include<cmath>
  5. 5 #include<string>
  6. 6 #include<algorithm>
  7. 7 using namespace std;
  8. 8 string word;
  9. 9 bool flag;
  10. 10 char ans[1000000];
  11. 11 int p1,p2,p3,len;
  12. 12 char check(char c) {
  13. 13 if (p1==1) return tolower(c);
  14. 14 else if (p1==2) return toupper(c);
  15. 15 else return '*';
  16. 16 }
  17. 17 int main(){
  18. 18 cin>>p1>>p2>>p3;
  19. 19 cin>>word;
  20. 20 len=word.length();
  21. 21 for(int i=0;i<=len;++i){
  22. 22 int cnt=0;
  23. 23 if(word[0]=='-'){
  24. 24 if(flag);
  25. 25 else{
  26. 26 cout<<'-';
  27. 27 flag=1;
  28. 28 continue;
  29. 29 }
  30. 30 }
  31. 31 if(word[i]=='-'){
  32. 32 if(word[i-1]>=word[i+1]||(word[i-1]>=48&&word[i-1]<=57&&word[i+1]>=65)||word[i-1]=='-'||word[i+1]=='-'){
  33. 33 cout<<word[i];
  34. 34 continue;
  35. 35 }
  36. 36 if(p3==1){
  37. 37 for(int j=word[i-1]+1;j<word[i+1];++j){
  38. 38 for(int k=1;k<=p2;++k){
  39. 39 ans[++cnt]=j;
  40. 40 }
  41. 41 }
  42. 42 for(int q=1;q<=cnt;++q){
  43. 43 cout<<check(ans[q]);
  44. 44 }
  45. 45 }
  46. 46 if(p3==2){
  47. 47 for(int j=word[i+1]-1;j>=word[i-1]+1;--j){
  48. 48 for(int k=1;k<=p2;++k){
  49. 49 ans[++cnt]=j;
  50. 50 }
  51. 51 }
  52. 52 for(int q=1;q<=cnt;++q) {
  53. 53 cout<<check(ans[q]);
  54. 54 }
  55. 55 }
  56. 56 }
  57. 57 else cout<<word[i];
  58. 58 }
  59. 59 return 0;
  60. 60 }

T2

T3 矩阵取数游戏

标签:dp,高精度

__int128乱搞

可以发现行与行之间无关,所以对每一行区间dp求最大值再相加即可

f[i][j]=max(f[i][j-1],f[i+1][j])对于区间[i,j]只能从[i+1,j]或[i,j+1]转移

先取后面的为f[i][j-1]即f[i][j-1]*2+a[j]*2相当于把以后要取的所有数*2,也就是那个什么乘2^i

先取前面的同理 f[i+1][j]*2+a[i]*2

所以转移方程为f[i][j]=max(f[i+1][j]*2+a[i]*2,f[i][j-1]*2+a[j]*2)

会爆long long 需要高精,我太懒了写的__in128

code

ContractedBlock.gif ExpandedBlockStart.gif

  1. 1 #include<iostream>
  2. 2 #include<cstdio>
  3. 3 #include<cstring>
  4. 4 #include<cmath>
  5. 5 #include<string>
  6. 6 #include<algorithm>
  7. 7 using namespace std;
  8. 8 string word;
  9. 9 bool flag;
  10. 10 char ans[1000000];
  11. 11 int p1,p2,p3,len;
  12. 12 char check(char c) {
  13. 13 if (p1==1) return tolower(c);
  14. 14 else if (p1==2) return toupper(c);
  15. 15 else return '*';
  16. 16 }
  17. 17 int main(){
  18. 18 cin>>p1>>p2>>p3;
  19. 19 cin>>word;
  20. 20 len=word.length();
  21. 21 for(int i=0;i<=len;++i){
  22. 22 int cnt=0;
  23. 23 if(word[0]=='-'){
  24. 24 if(flag);
  25. 25 else{
  26. 26 cout<<'-';
  27. 27 flag=1;
  28. 28 continue;
  29. 29 }
  30. 30 }
  31. 31 if(word[i]=='-'){
  32. 32 if(word[i-1]>=word[i+1]||(word[i-1]>=48&&word[i-1]<=57&&word[i+1]>=65)||word[i-1]=='-'||word[i+1]=='-'){
  33. 33 cout<<word[i];
  34. 34 continue;
  35. 35 }
  36. 36 if(p3==1){
  37. 37 for(int j=word[i-1]+1;j<word[i+1];++j){
  38. 38 for(int k=1;k<=p2;++k){
  39. 39 ans[++cnt]=j;
  40. 40 }
  41. 41 }
  42. 42 for(int q=1;q<=cnt;++q){
  43. 43 cout<<check(ans[q]);
  44. 44 }
  45. 45 }
  46. 46 if(p3==2){
  47. 47 for(int j=word[i+1]-1;j>=word[i-1]+1;--j){
  48. 48 for(int k=1;k<=p2;++k){
  49. 49 ans[++cnt]=j;
  50. 50 }
  51. 51 }
  52. 52 for(int q=1;q<=cnt;++q) {
  53. 53 cout<<check(ans[q]);
  54. 54 }
  55. 55 }
  56. 56 }
  57. 57 else cout<<word[i];
  58. 58 }
  59. 59 return 0;
  60. 60 }

T3

T4 树网的核

标签:dp

我只会辣鸡n^3做法(因为好想啊QAQ

code

ContractedBlock.gif ExpandedBlockStart.gif

  1. 1 #include <bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 namespace gengyf{
  4. 4 inline int read(){
  5. 5 int x=0,f=1;char s=getchar();
  6. 6 while(s<'0'||s>'9'){
  7. if(s=='-')f=-1;s=getchar();}
  8. 7 while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
  9. 8 return x*f;
  10. 9 }
  11. 10 const int inf=0x3f3f3f3f;
  12. 11 const int N=310;
  13. 12 int m[N][N],n,s,ans=inf;
  14. 13 int main(){
  15. 14 n=read();s=read();
  16. 15 for(int i=1;i<=n;i++)
  17. 16 for(int j=1;j<=n;j++){
  18. 17 m[i][j]=inf;
  19. 18 if(i==j)m[i][j]=0;
  20. 19 }
  21. 20 for(int i=1;i<n;i++){
  22. 21 int x,y,z;
  23. 22 x=read();y=read();z=read();
  24. 23 m[x][y]=min(z,m[x][y]);
  25. 24 m[y][x]=m[x][y];
  26. 25 }
  27. 26 for(int k=1;k<=n;k++)
  28. 27 for(int i=1;i<=n;i++)
  29. 28 for(int j=1;j<=n;j++){
  30. 29 if(m[i][k]==inf||m[k][j]==inf)continue;
  31. 30 else m[i][j]=min(m[i][k]+m[k][j],m[i][j]);
  32. 31 }
  33. 32 int l,r,len=0;
  34. 33 for(int i=1;i<=n;i++)
  35. 34 for(int j=1;j<=n;j++){
  36. 35 if(m[i][j]>=inf||m[i][j]<=len)continue;
  37. 36 len=m[i][j];
  38. 37 l=i;r=j;
  39. 38 }
  40. 39 for(int i=1;i<=n;i++){
  41. 40 if(m[l][i]+m[i][r]!=len)continue;
  42. 41 for(int j=1;j<=n;j++){
  43. 42 if(m[l][j]+m[r][j]!=len)continue;
  44. 43 if(m[i][j]>s)continue;
  45. 44 int ecc=-inf;
  46. 45 for(int k=1;k<=n;k++){
  47. 46 ecc=max(ecc,m[i][k]+m[j][k]-m[i][j]>>1);
  48. 47 }
  49. 48 ans=min(ans,ecc);
  50. 49 }
  51. 50 }
  52. 51 printf("%d",ans);
  53. 52 return 0;
  54. 53 }
  55. 54 }
  56. 55 int main(){
  57. 56 gengyf::main();
  58. 57 return 0;
  59. 58 }

T4


1658269-20190902215755382-1890657527.png

转载于:https://www.cnblogs.com/gengyf/p/11449331.html

发表评论

表情:
评论列表 (有 0 条评论,217人围观)

还没有评论,来说两句吧...

相关阅读

    相关 poj2007

    极坐标排序 注意atan2(y,x)的使用方法,y在前,x在后。返回X轴正方向到原点到(x,y)点的射线的到角。 ![ContractedBlock.gif][] ![Ex

    相关 exchange 2007 安装

    1, Command 模式下打入“winver" 可以检测当前windows系统的版本。exchange 2003级以上版本都要求装在win2003 sp3和win 2003以

    相关 2007-10-6

    今天是长假的第6天了,刚刚妈妈打电话过来,我不太想说话,其实没什么事情的,可是现在的心情就是觉得有点烦燥,想想原因,实在说不太清楚。。。。可能是对感情的担心,对生活的担心。。。

    相关 2007-8-17

    妈妈昨天回家了,结果,去晚了,急急忙忙上了火车,强忍着不让眼泪从眼眶里流出来,傻笑着和妈妈挥手告别, 跟着火车走了几步,转过身就哭!不喜欢离别,尤其是和妈妈,她说等人老的时候,

    相关 2007-8-2

    很久没来写心情了,最近日子好像都好平静哦,妈妈来了,家里多了好多家的感觉,一切又似乎都那么正常。而我依旧还是那个我。最近的心情一直都不是很舒畅, 有很多是因为自己的事情,除了工

    相关 2007-7-4

       刚刚去窗口望了一下,想精神一下,好困。看着对面的大楼,想起我当初来上海的时候住的就是那里,如今绕了一圈,又回来了。想想自己,似乎是多了2年当初急切想要得到的“工作经验”,

    相关 2007-6-4

    想妈妈了,今天清理移动硬盘里的东西,看到一些摄像头拍的照片,那是我来上海第一年回家,买了一个摄像头,准备让妈妈在家里和我上网视频用的。突然觉得好想妈妈,:(那个时候的我的是头发

    相关 2007-5-25

    昨天在看电视,湖南台在讲一个理财的节目,开始看的挺开心的,下面的大学生说他们每个月的花费。一个女大学生说她每个月要1800,主持人很惊讶的问你都怎么花的阿一个学生,她说吃饭吃的

    相关 2007-5-10

    很久没有写心情了。最近的生活很平淡,我也在“心安理得”的享受着这份安逸。我其实承认我很爱哭,直到眼睛病了,更加委屈了,还大哭过好几场。可是,我发现好像人的眼泪如果快要哭干的时候

    相关 2007-3-5

    以前总盼着长大,不用上学了,这样就不用总要准备考试了,可是长大了,事情也好多哦。 最近的生活,让我觉得压力好大,我不知道去哪里找信心 ,妈妈病了,最近几天打电话妈的声音都不是