Age | ||
Accepted : 932 | Submit : 2426 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
Age题目描述今年是2016年,一个年龄小于99岁(出生当年为0岁)的人,把出生年份的前两位和后两位相加得到一个整数 n 。你能根据n,算出他有多少岁吗? 输入第一行输入一个整数 T(1≤T≤99) ,表示样例的个数。 每行输入一个整数 n 。 输出每行输出一个样例的结果。 样例输入2 20 118 样例输出16 17 样例解释第1样例,此人生于2000年;第2样例,此人生于1999年。 |
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
int main(){
int t;
scanf("%d",&t);
int n;
while(t--){
scanf("%d",&n);
int i;
for(i=2016-98;i<=2016;i++){
if((i%100)+(i/100)==n){
printf("%d\n",2016-i);
break;
}
}
}
return 0;
}
Balance | ||
Accepted : 195 | Submit : 964 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
Balance题目描述小明有一架天平,小明想称出
1∼n
克的物品,请问最少需要几颗砝码? 输入第一行是一个整数 T(1≤T≤10000) ,表示样例的个数。 以后每行一个样例,为一个整数 ( 1≤n≤109 )。 输出每行输出一个样例的结果。 样例输入3 1 4 40 样例输出1 2 4 |
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
const int maxn = 30;
pair<int, int> save[maxn];
int main(){
int t,i,p;
p = -1;
for(i=0;i<=30;i++){
save[++p].first = (pow(3,i)+1)/2;
save[p].second = (pow(3,i+1)-1)/2;
}
scanf("%d",&t);
int n;
while(t--){
scanf("%d",&n);
for(i=0;i<30;i++){
if(n>=save[i].first&&n<=save[i].second){
printf("%d\n",i+1);
break;
}
}
}
return 0;
}
Clock | ||
Accepted : 346 | Submit : 2164 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
Clock题目描述钟的一圈是12小时,其中时针、分钟都是匀速移动。一天从00:00~23:59,请问某一时刻,时针与分针的夹角是多少? 输入第一行是一个整数 T(1≤T≤1440) ,表示样例的个数。 以后每行是一个时刻,格式为HH:MM。 输出每行输出一个样例的结果,如果结果不是整数,小数部分不要输出多余的0。 样例输入2 00:01 00:30 样例输出5.5 165 |
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
int main(){
int t;
scanf("%d",&t);
int n;
string in;
while(t--){
int i,j;
cin>>in;
double hour=0.0,min=0.0;
int len = in.length();
hour = (double)(in[0]-'0')*10.0 + (double)(in[1]-'0');
if(hour>12){
hour -= 12;
}
min = (double)(in[3]-'0')*10.0 + (double)(in[4]-'0');
min = min*6;
hour = (hour*30) + min/360*30;
//cout<<min(abs(hour-min),360.0-(abs(min-hour)));
printf("%g\n",abs(hour-min)<360.0-(abs(min-hour))?abs(hour-min):360.0-(abs(min-hour)));
}
return 0;
}
Different Digits | ||
Accepted : 208 | Submit : 1015 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
Different Digits题目描述有一个 n 位数 x ,每个数码都不一样,可你知道 x 的后 m(m<n) 位构成的整数 x′ ,请问满足条件最小的 x 是多少? 输入第一行是一个整数 T(1≤T≤1000) ,表示样例的个数。 每个样例一行,为两个整数 n(2≤n≤10) 和 x 的后 m 位的整数 x′(0≤x′<987654321,x′没有前导0且所有数码都不一样) 。 输出每行输出一个样例的结果。 样例输入2 3 12 4 12 样例输出312 3012 |
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
using namespace std;
const int maxn = 1010;
const int INF = 0x3f3f3f3f;
int save[maxn];
bool vis[10];
int main(){
int t,i,j,n;
string in;
string res;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
cin>>in;
int m = in.length();
memset(vis, true, sizeof(vis));
for(i=0;i<in.length();i++){
vis[in[i]-'0'] = false;
}
for(i=0;i<in.length();i++){
res[i+n-m] = in[i];
}
for(i=1;i<=9;i++){
if(vis[i]){
res[0] = i+'0';
vis[i] = false;
break;
}
}
int p = 1;
for(i=0;i<=9;i++){
if(p==n-m){
break;
}
if(vis[i]){
res[p] = i+'0';
p++;
}
}
for(i=0;i<n;i++){
cout<<res[i];
}
printf("\n");
}
return 0;
}
Estrella's Travel | ||
Accepted : 100 | Submit : 258 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
Estrella's Travel题目描述Estrella喜欢旅行,她准备去自己心仪的城市看风景。她精心选择了一条线路,准备自驾游。自驾线路是一条链路,上有 n+1 座城市,编号依次为 0∼n ,Estrella住在 0 号城市,目的地是 n 号城市。Estrella为了环保,驾驶了一辆纯电动车,所以最多只能一次行驶 m 个城市的距离。如果Estrella在某个城市(包括 n 号城市)停留,自然会需要一些费用,当然每个城市的花费是不一样,Estrella想知道,这个花费最小是多少? 输入多组数据输入。 输出对于每个数据,输出一行,表示总的花费。 样例输入5 2 1 2 3 4 5 6 2 6 5 4 3 2 1 样例输出9 9 样例解释第1个样例,依次到城市1,3,5,所以花费为1+3+5=9; |
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
using namespace std;
int n,m;
const int maxn = 1010;
const int INF = 0x3f3f3f3f;
int save[maxn];
int dp[maxn];
int main(){
int t,i,j;
while(~scanf("%d%d",&n,&m)){
for(i=1;i<=n;i++){
scanf("%d",&save[i]);
}
dp[0] = 0;
for(i=1;i<=n;i++){
int now = INF;
if(i>=m){
for(j=i-m;j<i;j++){
now = min(now,dp[j]);
}
dp[i] = now + save[i];
}else{
for(j=0;j<i;j++){
now = min(now,dp[j]);
}
dp[i] = now + save[i];
}
}
cout<<dp[n]<<endl;
}
return 0;
}
Finally,Which light is on? | ||
Accepted : 225 | Submit : 1026 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
Finally, which light is on?题目描述有n盏灯,编号1~n。一开始灯都是关着的,每个灯有一个开关,按奇数次为打开,按偶数次为关闭。我们先把编号为1的倍数的灯按一下开关,再把编号为2的倍数的灯按一下开关,依次下去,一直到把编号为n的倍数灯按一下,请问最后有多少盏灯是亮的? 输入第一行是一个整数 T(1≤T≤10000) ,表示样例的个数。 以后的每行一个样例,为一个整数 n(1≤n≤109) 。 输出每行输出一个样例的结果。 样例输入2 1 5 样例输出1 2 样例解释第2个样例,先把1~5都打开;然后把2,4关掉;然后把3关掉;然后把4打开;然后把5关掉;所以,最后剩1和4是亮着的。 |
#include <iostream> #include <string> #include <cstdio> #include <algorithm> #include <vector> #include <queue> #include <cmath> using namespace std; int n,m; const int maxn = 31630; const int INF = 0x3f3f3f3f; long long save[maxn]; int main(){ //cout<<sqrt(1000000000)<<endl; int t,i,j; scanf("%d",&t); int p = 0; for(i=1;i<=31623;i++){ save[++p] = i*i; //cout<<save[p]<<endl; } while(t--){ scanf("%d",&n); if(n==1){ printf("1\n"); continue; } for(i=1;i<=n;i++){ //cout<<save[i]<<" "; if(save[i]>n){ printf("%d\n",i-1); break; } } } return 0; }
Gemstone Bracelet
Accepted : 207 Submit : 741 Time Limit : 1000 MS Memory Limit : 65536 KB
Gemstone Bracelet
题目描述
mumuchacha是一个爱美的小姑娘,她有一条漂亮的宝石手链,宝石手链上有N个不同的宝石,每一颗宝石都有它特定的魅力值。
mumuchacha每天都把手链戴在手上,她很喜欢抬起手来看她的手链,但是每次都只能看到一部分(M个宝石),因为还有一部分被手臂挡住了,所以她不断的旋转手链,每次转动一颗宝石,使每次看到的宝石都不同,求mumuchacha每次旋转后看到的宝石魅力值之和的最大值。
输入
有多个样例,输入的第一行是样例个数 T
每个样例的第一行是两个整数 n 和 m , (1≤m≤n≤100000) 。
第二行是 n 个整数 ai ,表示 n 个宝石的魅力值 (1≤ai≤10000)输出
每行输出一个整数,即魅力值和的最大值
样例输入
2 5 3 1 2 3 4 5 10 4 6 7 4 5 8 4 2 5 9 4样例输出
12 26
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
int n,m;
const int maxn = 100000;
const int INF = 0x3f3f3f3f;
int save[maxn];
int main(){
int t;
scanf("%d",&t);
while(t--){
int i,j;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++){
scanf("%d",&save[i]);
}
int now = 0,res = 0;
for(i=0;i<m;i++){
now += save[i];
}
res = now;
for(i=1;i<n;i++){
now += save[(i+m-1)%n];
now -= save[(n+(i-1))%n];
res = max(res,now);
}
printf("%d\n",res);
}
return 0;
}