标签:复杂度 出生日期 复杂 turn 之间 char string false stdio.h
第一行输入一个整数T(表示样例个数)
接下来T组样例
每组样例先输入一个整数N(0或者1)
若N为0,则输入两个整数a,b(0<=a,b<=100)
若N为1,则输入一个字符串s
输出T行
每行输出一个样例对应的结果
2 0 1 1 1 aa
2 2
签到题
1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 using namespace std; 5 #define ll long long 6 const int N = 110; 7 string s; 8 int main() { 9 int t, a, b, n; 10 cin >> t; 11 while(t--) { 12 cin >> n; 13 if(n == 0) { 14 cin >> a >> b; 15 cout << a+b<< endl; 16 } else { 17 cin >> s; 18 cout <<s.length() << endl; 19 } 20 } 21 return 0; 22 }
第一行输入一个整数T(表示样例个数)
接下来T组样例
每个样例一行,包含一个字符串“yyyy-mm-dd”(1990<=yyyy<=2018)
题目保证测试数据的正确性
输出题意要求的天数
1 1999-09-09
5020
从y-m-d遍历到2018-04-21,然后计算数量
1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 using namespace std; 5 #define ll long long 6 const int N = 11; 7 int day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; 8 bool ok(int y) { 9 if((y%4==0&&y%100!=0) || y%400==0) return true; 10 else return false; 11 } 12 bool ok1(int x) { 13 while(x) { 14 if(x%10 == 4) return true; 15 x /= 10; 16 } 17 return false; 18 } 19 int main() { 20 int t, y, m, d; 21 cin >> t; 22 while(t--) { 23 scanf("%d-%d-%d",&y,&m,&d); 24 int ans = 0; 25 if(y == 2018) { 26 for(int i = m; i <= 4; i ++) { 27 for(int j = 1; j <= day[i]+(i==2&&ok(y)?1:0); j ++) { 28 if(i == 4 && j == 21) break; 29 if(ok1(i) || ok1(j)) continue; 30 ans++; 31 } 32 } 33 } else { 34 for(int i = m; i <= 12; i ++) { 35 for(int j = 1; j <= day[i]+(i==2&&ok(y)?1:0); j ++) { 36 if(i == m && j < d) continue; 37 if(ok1(y) || ok1(i) || ok1(j)) continue; 38 ans++; 39 } 40 } 41 for(int i = y+1; i < 2018; i ++) { 42 for(int j = 1; j <= 12; j ++) { 43 for(int k = 1; k <= day[j]+(j==2&&ok(i)?1:0); k ++) { 44 if(ok1(i) || ok1(j) || ok1(k)) continue; 45 ans++; 46 } 47 } 48 } 49 for(int i = 1; i <= 4; i ++) { 50 for(int j = 1; j <= day[i]; j ++) { 51 if(ok1(i) || ok1(j)) continue; 52 ans++; 53 } 54 } 55 } 56 printf("%d\n",ans); 57 } 58 return 0; 59 }
第一行输入一个整数T(表示样例个数)
接下来T组样例
每个样例一行,包括三个浮点数 L V1 V2(0<L,V1,V2<=10000)
输出T行
每个测试用例输出一行对应的结果
L1 L2(一个空格隔开,结果保留6位小数)
1 100 1000 10
0.049000 1.000000
物理问题,一开始还v1-v2了,其实是相对静止。
1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 using namespace std; 5 #define ll long long 6 const int N = 11; 7 int main() { 8 int t; 9 cin >> t; 10 while(t--) { 11 double L, v1, v2; 12 cin >> L >> v1 >> v2; 13 double t = L/(v1); 14 printf("%.6lf %.6lf\n",9.8*t*t/2,v2*t); 15 } 16 return 0; 17 }
第一行输入一个整数T(表示样例个数)
接下来T组样例
每个样例一行,包含三个连续的大写字母(A - S)
每个样例输出一行
升级到SSR所需的次数
3 SSR SRR AAA
0 19 6857
SRR升级到SSR的过程:
SRR -> SRS -> SSA ->SSB -> SSC -> ……->SSR 共19次
循环,直到等于SSR,然后输出值
1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 using namespace std; 5 #define ll long long 6 const int N = 11; 7 char str[N]; 8 int main() { 9 int t; 10 cin >> t; 11 while(t--) { 12 cin >> str; 13 for(int i = 0; ; i ++) { 14 if(str[0] ==‘S‘ && str[1] == ‘S‘ && str[2] == ‘R‘) { 15 printf("%d\n",i); 16 break; 17 } 18 if(str[2] == ‘S‘) { 19 if(str[1] == ‘S‘) { 20 str[0] += 1; 21 str[1] = ‘A‘; 22 } else { 23 str[1] += 1; 24 } 25 str[2] = ‘A‘; 26 } else str[2] += 1; 27 } 28 } 29 return 0; 30 }
第一行输入一个正整数T(表示样例个数)
接下来T组样例
每组样例一行,输入一个实数Y
一行输出一个样例对应的结果,
输出方程在0~100之间的解,保留小数点后4位小数;如果不存在,输出 -1
2 1 20180421
-1 9.9993
很明显是单调递增,值域是[14,201805052114],在这里面的一定有值,然后从0 - 100 每次加0.0001,取最接近y的f(x)值。
1 #include <iostream> 2 #include <stdio.h> 3 #include <cmath> 4 #include <cstring> 5 using namespace std; 6 #define ll long long 7 const int N = 11; 8 double f(double x) { 9 return 2018*x*x*x*x+21*x+5*x*x*x+5*x*x+14; 10 } 11 int main() { 12 int t; 13 // printf("%.8lf\n",f(100)); 14 double MAX = 201805052114; 15 cin >> t; 16 while (t--) { 17 double y; 18 cin >> y; 19 if(y < 14 || y > 201805052114) { 20 printf("-1\n"); 21 continue; 22 } 23 double MIN = 1000000; 24 double x; 25 for(double i = 0; i <= 100; i += 0.0001) { 26 if(fabs(f(i)-y) < MIN) { 27 MIN = fabs(f(i)-y); 28 x = i; 29 } 30 } 31 printf("%.4lf\n",x); 32 } 33 return 0; 34 }
第一行输入一个整数T(表示样例个数)
接下来T组样例
每组样例第一行输入一个整数N(表示有几项活动)
接下来N行,每行输入s,e,h,p 4个整数,分别代表一个活动的开始时间、结束时间、Happy值以及绩点数
0<=s<e<=24,1<=h,p<=100,1<=T,N<=20
输出T行
一行输出一个样例对应的结果
小Q在一天内所能获得的最大 Happy值 与 绩点数
1 4 1 3 1 1 2 5 2 1 3 7 2 1 5 8 1 2
3 3
有两种方案
1)选择 第1、3两个活动,可以获得 Happy值 3 和 绩点数 2;
2)选择 第2、4两个活动,可以获得 Happy值 3 和 绩点数 3.
看题解的,很巧妙的思路。
1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 #define ll long long 7 const int N = 30; 8 int h[N], p[N]; 9 struct Nod { 10 int s, e, h, p; 11 }nod[22]; 12 bool cmp(Nod &a, Nod &b) { 13 return a.s < b.s; 14 } 15 int main() { 16 int t; 17 cin >> t; 18 while(t--) { 19 memset(h,0,sizeof(h)); 20 memset(p,0,sizeof(p)); 21 int n; 22 cin >> n; 23 for(int i = 0; i < n; i ++) { 24 cin >> nod[i].s >> nod[i].e >> nod[i].h >> nod[i].p; 25 } 26 sort(nod,nod+n,cmp); 27 for(int i = 0; i < n; i ++) { 28 for(int j = nod[i].e; j <= 24; j ++) { 29 if(h[j] < h[nod[i].s] + nod[i].h) { 30 h[j] = h[nod[i].s] + nod[i].h; 31 p[j] = p[nod[i].s] + nod[i].p; 32 } else if(h[j] == h[nod[i].s] + nod[i].h) { 33 p[j] = p[nod[i].s] + nod[i].p; 34 } 35 } 36 } 37 cout << h[24] << ‘ ‘ << p[24] << endl; 38 } 39 return 0; 40 }
第一行输入一个整数T(表示样例个数)
接下来T组样例
每组样例一行,输入一个整数N(0<=N<=1000000000)
输出T行
每一行输出N的阶乘 N!(由于这个数比较大,所以只要输出其对1000000007取膜的结果即可)
2 0 1000000000
1 698611116
分块打表,每隔1e7算一个值,这样计算复杂度是1e7 1秒可以算出来。
1 #include <iostream> 2 #include <stdio.h> 3 #define ll long long 4 using namespace std; 5 const ll mod = 1000000007; 6 ll a[110]={1,682498929,491101308,76479948,723816384,67347853,27368307, 7 625544428,199888908,888050723,927880474,281863274,661224977,623534362, 8 970055531,261384175,195888993,66404266,547665832,109838563,933245637, 9 724691727,368925948,268838846,136026497,112390913,135498044,217544623, 10 419363534,500780548,668123525,128487469,30977140,522049725,309058615, 11 386027524,189239124,148528617,940567523,917084264,429277690,996164327, 12 358655417,568392357,780072518,462639908,275105629,909210595,99199382, 13 703397904,733333339,97830135,608823837,256141983,141827977,696628828, 14 637939935,811575797,848924691,131772368,724464507,272814771,326159309, 15 456152084,903466878,92255682,769795511,373745190,606241871,825871994, 16 957939114,435887178,852304035,663307737,375297772,217598709,624148346, 17 671734977,624500515,748510389,203191898,423951674,629786193,672850561, 18 814362881,823845496,116667533,256473217,627655552,245795606,586445753, 19 172114298,193781724,778983779,83868974,315103615,965785236,492741665, 20 377329025,847549272,698611116}; 21 int main(){ 22 ios::sync_with_stdio(false); 23 cin.tie(0); 24 cout.tie(0); 25 ll n,t; 26 cin >> t; 27 while(t--) { 28 cin >> n; 29 int cnt = n / 1e7; 30 ll ans = a[cnt]; 31 for(ll i = 1e7*cnt+1; i <= n; i ++) { 32 ans = ans*i%mod; 33 } 34 cout << ans << endl; 35 } 36 return 0; 37 }
第一行输入一个整数T(表示样例个数)
接下来T组样例
每组样例一行,输入两个正整数a,b(0<a,b<=1e9)
输出T行
一行输出一个样例对应的结果
若结果可信,输出 Yes
否则,输出 No
6 2 4 75 45 8 8 16 16 247 994 1000000000 1000000
Yes Yes Yes No No Yes
每回合的K可能不同
这题好坑,我写的是ll d = cbrt(c);一直错误,赛后看别人的才知道一定要写float,写double还不行。写成ll d = (float)cbrt(c);
1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 #define ll long long 7 const int N = 11; 8 int main() { 9 int t; 10 cin >> t; 11 while(t--) { 12 ll a, b; 13 cin >> a >> b; 14 ll c = a*b; 15 ll d = (float)cbrt(c); 16 if(d*d*d != c) printf("No\n"); 17 else printf("Yes\n"); 18 } 19 return 0; 20 }
标签:复杂度 出生日期 复杂 turn 之间 char string false stdio.h
原文地址:https://www.cnblogs.com/xingkongyihao/p/8903231.html