3 solutions
-
1
171行的人纯属乐子!! AC代码如下,是个人都能看懂!!! 重要思路:能变成大月就变成大月31(天),因为大月天数多
#include<bits/stdc++.h> using namespace std; string arr[23]={"01","02","03","04","05","06","07","08","09","10","11","12"}; string day[23]={"31","28","31","30","31","30","31","31","30","31","30","31"}; int main(){ string a; cin>>a; int ans=0; if(a[0]=='0' && a[1]=='0') {ans++;a[1]='1';} else if(a[0]>'1'){ ans++; if(a[1]>'2' || a[1]=='1'){a[0]='0';} else a[0]='1'; } else if(a[0]=='1' && a[1]>'2'){ a[1]='1'; ans++; } //cout<<a[0]<<a[1]; for(int i=0;i<12;i++){ if(a[0]==arr[i][0] && a[1]==arr[i][1]){ if(a[3]>day[i][0]){ans++;} else if(a[3]==day[i][0] && a[4]>day[i][1]) ans++; else if(a[3]=='0' && a[4]=='0') ans++; break; } } cout<<ans; return 0; }
-
0
优雅
好消息:这个题目我有一个优雅的做法。
坏消息:优雅的做法WA了2个点,调不出来。
然后@过来瞅了眼数据:这你tm暴力过啊!(这是她原话,我是有素养的人,不说脏话)
然后我就写了个171行小暴力。
不过这171行里面,只有25行是正常的,其他都是疯狂复制。
而且每个月份的for循环(等会讲)都没什么区别,所以只需要改一两个数字。
题意
把一个两个2位数变成日期。
思路
这是一个一点都不优雅的做法。(官方吐槽)
根本不符合我法厨的身份直接暴力所有正确日期,计算差别,然后找最小值。
是的,就没了,这很暴力。
比英吉利的孽子还暴力(是因为前面乱入了,所以就无所谓了吗???)
代码
(被自己代码气疯)(阴暗地爬行)
#include<iostream> #include<cstdio> using namespace std; int main(){ void input(int&,int&);//输入 void print(int);//输出 int solution(int,int);//解决问题 int m(0);//月份 int d(0);//日数 input(m,d); print(solution(m,d)); return 0; } void input(int&a,int&b){//需要输入的两个数 scanf("%d-%d",&a,&b); //不会吧不会吧,不会还有人不知道用scanf吧? } void print(int ans){//要输出的东西 cout<<ans; } int solution(int m,int d){//月和日 int mins(4);//找最小差别 int m1(m/10);//月份第一位 int m2(m%10);//月份第二位 int d1(d/10);//日数第一位 int d2(d%10);//日数第二位 //因为太多了所以注释就集中一月了 for(int i(1);i<=31;i++){//处理一月 int ans(0);//总差别 if(m1!=0)//对, ans++; if(m2!=1)//就是 ans++; if(d1!=i/10)//这么 ans++; if(d2!=i%10)//不优雅。 ans++; mins=min(mins,ans);//找最小最小 } //下面的就只用改天数和月份比较了, //最少改1个字符,最多3个。 for(int i(1);i<=28;i++){ int ans(0); if(m1!=0) ans++; if(m2!=2) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=31;i++){ int ans(0); if(m1!=0) ans++; if(m2!=3) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=30;i++){ int ans(0); if(m1!=0) ans++; if(m2!=4) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=31;i++){ int ans(0); if(m1!=0) ans++; if(m2!=5) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=30;i++){ int ans(0); if(m1!=0) ans++; if(m2!=6) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=31;i++){ int ans(0); if(m1!=0) ans++; if(m2!=7) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=31;i++){ int ans(0); if(m1!=0) ans++; if(m2!=8) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=30;i++){ int ans(0); if(m1!=0) ans++; if(m2!=9) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=31;i++){ int ans(0); if(m1!=1) ans++; if(m2!=0) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=30;i++){ int ans(0); if(m1!=1) ans++; if(m2!=1) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } for(int i(1);i<=31;i++){ int ans(0); if(m1!=1) ans++; if(m2!=2) ans++; if(d1!=i/10) ans++; if(d2!=i%10) ans++; mins=min(mins,ans); } return mins; }
孑孓
因为注释的原因,175行了。
-
0
孩子无敌了之原神玩家模拟
思路
不难想到: 1.当月份为大月时,小月要改的日期不一定需要更改 2.日期的十位数为1时日期绝对不用更改
综上,可以想到月份先改,日期后改,并且可以实时保存修改痕迹
其实不用想那么多我真羡慕2019江西考生送了100代码
#include using namespace std; int check(char a,char b)//判断大月或小月或二月 { string c[10]={"01","03","05","07","08","10","12"}; for(int i=0;i<7;i++) { if(a==c[i][0]&&b==c[i][1]) return 1; } if(a=='0'&&b=='2') return 0; return -1; } int main(){ string a; cin>>a; int ans=0; if(a[0]=='0'&&a[1]=='0')//月份为00时修改为大月 { a[0]='1'; ans++; } if(a[0]!='0'&&a[0]!='1')//月份的十位数不为0或1时有两种情况,更改遵循第1条 { if(a[1]>'2'||a[1]=='1') { //第一种是月份的个位数不为0或2 //此时将十位数更改为0为最优 //注意当个位等于0时十位不能为零 a[0]='0'; } else { //同上 a[0]='1'; } ans++; } if((a[3]>'3'&&a[4]>'1')||(a[3]>'3'&&a[4]>'0'&&check(a[0],a[1])==-1)||(a[3]=='2'&&a[4]=='9'&&check(a[0],a[1])==0)||(a[3]=='0'&&a[4]=='0')) { //不优雅的日期修改部分 更改遵循第2条 //第一个部分是日期大于31 //第二个部分是为小月并且日期大于31 //第三个部分是2月29的特殊判断 //第四个部分是日期为00的判断 a[3]='1'; ans++; } cout<<ans;//ez return 0; }
- 1
Information
- ID
- 4727
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 2
- Tags
- # Submissions
- 103
- Accepted
- 18
- Uploaded By