文章目录
- 1001 害死人不偿命的(3n+1)猜想
- 1002 写出这个数
- 1003 我要通过!
- 1004 成绩排名
- 1005 继续(3n+1)猜想
- 1006 换个格式输出整数
- 1007 素数对猜想
- 1008 数组元素循环右移问题
- 1009 说反话
- 1010 一元多项式求导
- 1011 A+B 和 C
- 1012 数字分类
- 1013 数素数
- 1014 福尔摩斯的约会
- 1015 德才论
- 1016 部分A+B
- 1017 A除以B
- 1018 锤子剪刀布
- 1019 数字黑洞
- 1020 月饼
- 1021 个位数统计
- D进制的A+B
- 1023 组个最小数
- 1024 科学计数法
- 1025 反转链表
- 1026 程序运行时间
- 1027 打印沙漏
- 1028 人口普查
- 1029 旧键盘
- 1030 完美数列
- 1031 查验身份证
- 1032 挖掘机技术哪家强
- 1033 旧键盘打字
- 1034 有理数四则运算
- 1035 插入与归并
- 1036 跟奥巴马一起编程
- 1037 在霍格沃茨找零钱
- 1038 统计同成绩学生
- 1039 到底买不买
- 1040 有几个PAT
- 1041 考试座位号
- 1042 字符统计
- 1043 输出PATest
- 1044 火星数字
- 1045 快速排序
- 1046 划拳
- 1047 编程团体赛
- 1048 数字加密
- 1049 数列的片段和
- 1050 螺旋矩阵
- 1051 复数乘法
- 1052 卖个萌
- 1053 住房空置率
- 1054 求平均值
- 1055 集体照
- 1056 组合数的和
- 1057 数零壹
- 1058 选择题
- 1059 C语言竞赛
- 1060 爱丁顿数
- 1061 判断题
- 1062 最简分数
- 1063 计算谱半径
- 1064 朋友数
- 1065 单身狗
- 1066 图像过滤
- 1067 试密码
- 1068 万绿丛中一点红
- 1069 微博转发抽奖
- 1070 结绳
- 1071 小赌怡情
- 1072 开学寄语
- 1073 多选题常见计分法
- 1074 宇宙无敌加法器
- 1075 链表元素分类
- 1076 Wifi密码
- 1077 互评成绩计算
- 1078 字符串压缩与解压
- 1079 延迟的回文数
- 1080 MOOC期终成绩
- 1081 检查密码
- 1082 射击比赛
- 1083 是否存在相等的差
- 1084 外观数列
- 1085 PAT单位排行
- 1086 就不告诉你
- 1087 有多少不同的值
- 1088 三人行
- 1089 狼人杀-简单版
- 1090 危险品装箱
- 1091 N-自守数
- 1092 最好吃的月饼
- 1093 字符串A+B
- 1094 谷歌的招聘
- 1095 解码PAT准考证
- 结语
1001 害死人不偿命的(3n+1)猜想
#include <cstdio>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int step = 0;
while(n != 1)
{
if(n&1) n = n*3 + 1;
n >>= 1;
step++;
}
printf("%d\n",step);
return 0;
}
1002 写出这个数
#include <iostream>
#include <map>
using namespace std;
typedef long long ll;
string s;
char t[1007];
map<int,string> mp;
ll ans = 0;
void init()
{
for(int i = 0; i <= 9; ++i)
{
if(i == 0) mp[i] = "ling";
if(i == 1) mp[i] = "yi";
if(i == 2) mp[i] = "er";
if(i == 3) mp[i] = "san";
if(i == 4) mp[i] = "si";
if(i == 5) mp[i] = "wu";
if(i == 6) mp[i] = "liu";
if(i == 7) mp[i] = "qi";
if(i == 8) mp[i] = "ba";
if(i == 9) mp[i] = "jiu";
}
}
int main()
{
init();
cin>>s;
int len = s.size();
for(int i = 0; i < len; i++)
ans += s[i] - '0';
int cnt = 0;
while(ans)
{
t[cnt++] = ans%10 + '0';
ans /= 10;
}
for(int i = cnt - 1; ~i; --i)
{
int x = t[i] - '0';
if(i == cnt-1) cout<<mp[x];
else cout<<" "<<mp[x];
}
cout<<'\n';
return 0;
}
1003 我要通过!
#include <iostream>
#include <string>
using namespace std;
string s;
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>s;
int len = s.size();
int pos1 = 0, pos2 = 0, okP = 0;
for(int i = 0; i < len; ++i)
{
if(s[i] == 'P' && !okP) pos1 = i, okP = 1;
if(s[i] == 'T' && okP == 1) pos2 = i, okP = 2;
}
if(okP != 2) cout<<"NO"<<'\n';
else
{
int x = 0, y = 0, z = 0;
for(int i = 0; i < pos1; ++i)
{
if(s[i] == 'A') x++;
else
{
x = -0x3f3f3f3f;
break;
}
}
for(int i = pos1 + 1; i < pos2; ++i)
{
if(s[i] == 'A') y++;
else
{
y = 0;
break;
}
}
for(int i = pos2 + 1; i < len; ++i)
{
if(s[i] == 'A') z++;
else
{
z = 0;
break;
}
}
if(!y || x*y != z) cout<<"NO"<<'\n';
else cout<<"YES"<<'\n';
}
}
return 0;
}
1004 成绩排名
#include <bits/stdc++.h>
using namespace std;
struct node
{
string name,id;
int core;
bool operator < (const node & t) const{
return core < t.core;
}
}a[1007];
int main()
{
int n;
cin>>n;
for(int i = 0; i < n; ++i) cin>>a[i].name>>a[i].id>>a[i].core;
sort(a,a+n);
cout<<a[n-1].name<<" "<<a[n-1].id<<'\n';
cout<<a[0].name<<" "<<a[0].id<<'\n';
return 0;
}
1005 继续(3n+1)猜想
把 2 ~ 100 中运算过程中覆盖的数字求出来,用set存,开个标记数组,把输入的数从大向小找,如果 输入的数是出现在覆盖了的表中,然后标记一下,最后看哪些数没有被覆盖。
#include <cstdio>
#include <set>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 7;
int a[107];
set<int> st[100];
int vis[maxn];
int ans[107];
void init()
{
for(int i = 2; i < 100; i++)
{
int t = i;
while(t != 1)
{
if(t&1) t = t*3 + 1;
t >>= 1;
st[i].insert(t);
}
}
}
int main()
{
init();
int n;
scanf("%d",&n);
for(int i = 0; i < n; ++i) scanf("%d",&a[i]);
sort(a,a+n);
for(int i = n-1; i >= 0; --i)
{
for(int j = 0; j < n; ++j)
{
if(st[a[i]].find(a[j])!= st[a[i]].end()) vis[a[j]] = 1;
}
}
int idx = 0;
for(int i = 0; i < n; ++i)
if(!vis[a[i]]) ans[idx++] = a[i];
sort(ans,ans+idx);
for(int i = idx-1; i >= 0; --i)
{
if(i == idx-1) printf("%d",ans[i]);
else printf(" %d",ans[i]);
}
return 0;
}
1006 换个格式输出整数
#include <cstdio>
using namespace std;
int main()
{
int n;
scanf("%d\n",&n);
int b,s,g;
g = n%10;
n/=10;
s = n%10;
n/=10;
b = n;
for(int i = 0; i < b; ++i) printf("B");
for(int i = 0; i < s; ++i) printf("S");
for(int i = 1; i <= g; ++i) printf("%d",i);
return 0;
}
1007 素数对猜想
线性素数筛
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 7;
bool st[maxn];
int primes[maxn],cnt = 0;
void Get_primes()
{
for(int i = 2; i <= maxn; ++i)
{
if(!st[i]) primes[cnt++] = i;
for(int j = 0; primes[j] <= maxn/i; ++j)
{
st[primes[j]*i] = true;
if(i%primes[j] == 0) break;
}
}
}
int main()
{
Get_primes();
int n, cnt = 0;
scanf("%d",&n);
for(int i = 1; primes[i] <= n; i++)
if(primes[i] - primes[i-1] == 2) cnt++;
printf("%d\n",cnt);
return 0;
}
1008 数组元素循环右移问题
#include <iostream>
using namespace std;
const int maxn = 110;
int a[maxn], b[maxn];
int n,m;
int main()
{
scanf("%d%d",&n,&m);
for(int i = 0; i < n; i++) scanf("%d",&a[i]);
for(int i = 0; i < n; i++) b[(i+m)%n] = a[i];
for(int i = 0; i < n; i++)
if(!i) printf("%d",b[i]);
else printf(" %d",b[i]);
return 0;
}
1009 说反话
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s="";
getline(cin,s);
for(int i = s.size()-1; i >= 0; --i)
{
string t = "";
while(s[i] != ' ' && i >= 0)
{
t += s[i];
--i;
}
for(int j = t.size()-1; j >= 0; --j) cout<<t[j];
if(i>=0) cout<<" ";
}
return 0;
}
1010 一元多项式求导
用 g e t l i n e getline getline 读入然后去转换会莫名的 w a wa wa 掉一部分数据。
#include <iostream>
using namespace std;
int a[110],b[110];
int c[110],d[110];
int main()
{
int cnt = 0;
while(cin>>a[cnt]>>b[cnt])
{
if(b[cnt] == 0) break;
cnt++;
}
int idx = 0;
if(!cnt)
cout<<"0 0"<<endl;
else
{
for(int i = 0; i < cnt; ++i)
{
c[idx] = a[i]*b[i];
d[idx++] = b[i] - 1;
}
for(int i = 0; i < idx; ++i)
if(!i) cout<<c[i]<<" "<<d[i];
else cout<<" "<<c[i]<< " "<<d[i];
cout<<endl;
}
return 0;
}
1011 A+B 和 C
#include <iostream>
using namespace std;
int main()
{
long long a,b,c;
int t;
cin>>t;
for(int i = 1; i <= t; i++)
{
cin>>a>>b>>c;
cout<<"Case #"<<i<<": ";
if(a+b > c) cout<<"true"<<'\n';
else cout<<"false"<<'\n';
}
return 0;
}
1012 数字分类
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
int a[1007], b[1007];
int main()
{
int n;
cin>>n;
for(int i = 0; i < n; i++) cin>>a[i];
int A = 0, B = 0, c = 0, d = 0, e = 0;
int sum = 0,cnt = 0;
for(int i = 0; i < n; ++i)
{
if(a[i]%5 == 0 && a[i]%2 == 0) A += a[i];
if(a[i]%5 == 1) b[cnt++] = a[i];
if(a[i]%5 == 2) c++;
if(a[i]%5 == 3) d++, sum += a[i];
if(a[i]%5 == 4) e = max(e,a[i]);
}
for(int i = 0; i < cnt; i+=2)
B = B + b[i] - b[i+1];
if(!A) cout<<"N ";
else cout<<A<<" ";
if(!cnt) cout<<"N ";
else cout<<B<<" ";
if(!c) cout<<"N ";
else cout<<c<<" ";
if(!d) cout<<"N ";
else cout<<setiosflags(ios::fixed)<<setprecision(1)<<(double)sum/d<<" ";
if(!e) cout<<"N";
else cout<<e;
return 0;
}
1013 数素数
素数线性筛法
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
const int maxn = 1e6 + 7;
bool st[maxn];
int cnt;
int primes[maxn];
void Get_primes()
{
for(int i = 2; i <= maxn; ++i)
{
if(!st[i]) primes[cnt++] = i;
for(int j = 0; primes[j] <= maxn/i; ++j)
{
st[primes[j]*i] = true;
if(i%primes[j] == 0) break;
}
}
}
int main()
{
Get_primes();
int n,m;
scanf(" %d%d",&n,&m);
if(m > n) swap(m,n);
int count = 0;
/***
int k = 0;
for(int i = 2; i <= maxn; ++i) if(!st[i]) k++;
printf("%d\n",k);
***/
for(int i = m; i <= n; ++i)
{
count++;
if(count == 1) printf("%d",primes[i-1]);
else printf(" %d",primes[i-1]);
if(count == 10) puts(""), count = 0;
}
return 0;
}
1014 福尔摩斯的约会
#include <iostream>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
string a,b,c,d;
map<char,string> mp;
map<char,int> S;
void init()
{
mp['A'] = "MON"; mp['B'] = "TUE"; mp['C'] = "WED"; mp['D'] = "THU";
mp['E'] = "FRI"; mp['F'] = "SAT"; mp['G'] = "SUN";
char s = 'A', t = '0';
for(int i = 0; i < 24; i++)
{
if(i < 10) S[t] = i, t++;
if(i >= 10) S[s] = i, s++;
}
}
int main()
{
init();
cin>>a>>b>>c>>d;
int lena = a.size(), lenb = b.size(), lenc = c.size(), lend = d.size();
int pos = 0, cnt = 0;
int len1 = min(lena,lenb), len2 = min(lenc,lend);
char x='0', y='0';
for(int i = 0; i < len1; ++i)
{
if(a[i] == b[i] && a[i] >= 'A' && a[i] <= 'G' && !cnt) cnt++, x = a[i];
else if(a[i] == b[i] && cnt == 1 && ((a[i] >= 'A' && a[i] <= 'N')|| (a[i] >= '0' && a[i] <= '9')) ) y = a[i],cnt++;
if(cnt == 2) i = len1;
}
for(int i = 0; i < len2; ++i)
if(c[i] == d[i] && ((c[i] >= 'a' && c[i] <= 'z') || (c[i] >= 'A' && c[i] <= 'Z'))) pos = i, i = len2;
cout<<mp[x]<<" ";
if(S[y] < 10) cout<<"0"<<S[y]<<":";
else cout<<S[y]<<":";
if(pos < 10) cout<<"0"<<pos<<'\n';
else cout<<pos<<'\n';
return 0;
}
1015 德才论
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 7;
struct node{
int id,d,c;
bool operator < (const node &t) const{
if(d+c != t.d + t.c) return (d+c) > (t.d+t.c);
if(d != t.d) return d > t.d;
return id < t.id;
}
};
node a[maxn];
vector<node>v[5];
int main()
{
int n,h,l,cnt = 0;
scanf("%d%d%d",&n,&l,&h);
for(int i = 0; i < n; ++i)
{
scanf("%d%d%d",&a[i].id,&a[i].d,&a[i].c);
if(a[i].d >= l && a[i].c >=l) cnt++;
if(a[i].d < l || a[i].c < l) continue;
else if(a[i].d >= h && a[i].c >= h) v[0].push_back(a[i]);
else if(a[i].c < h && a[i].d >= h) v[1].push_back(a[i]);
else if(a[i].d < h && a[i].c < h && a[i].d >= a[i].c) v[2].push_back(a[i]);
else v[3].push_back(a[i]);
}
printf("%d\n",cnt);
for(int i = 0; i < 4; ++i)
{
sort(v[i].begin(),v[i].end());
for(auto it : v[i]) printf("%d %d %d\n",it.id,it.d,it.c);
}
return 0;
}
1016 部分A+B
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int work(ll x, int y)
{
int a[10] = {
0};
while(x)
{
int t = x%10;
a[t]++;
x /= 10;
}
return a[y];
}
int change(int x,int num)
{
if(!num) return 0;
int t = x;
for(int i = 1; i < num; ++i)
x = x*10 + t;
return x;
}
int main()
{
ll A,B; int x,y;
cin>>A>>x>>B>>y;
int ansx = work(A,x), ansy = work(B,y);
int xx = change(x,ansx), yy = change(y,ansy);
ll ans = (ll)(xx + yy);
cout<<ans<<'\n';
return 0;
}
1017 A除以B
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int>v;
int main()
{
string s; int t;
cin>>s>>t;
int len = s.size();
int temp = 0, yu = 0;
for(int i = 0; i < len; ++i)
{
temp = temp*10 + s[i] - '0';
int x = temp/t;
temp %= t;
v.push_back(x);
if(i == len-1) yu = temp;
}
int pos = 0;
if(!v[0] && v.size() > 1) pos++;
for(int i = pos; i < v.size(); ++i) cout<<v[i];
cout<<" "<<yu<<'\n';
return 0;
}
1018 锤子剪刀布
输入样例
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
输出样例
5 3 2
2 3 5
B B
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 7;
vector<char>a,b;
int s[4],t[4];
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; ++i)
{
char x,y;
scanf(" %c %c",&x,&y);
if(x == y) s[1]++,t[1]++;
else
{
if((x == 'C' && y == 'J')||(x == 'J' && y == 'B') || (x == 'B' && y == 'C'))
s[0]++,t[2]++,a.push_back(x);
if((x == 'C' && y == 'B')||(x == 'J' && y == 'C') || (x == 'B' && y == 'J'))
t[0]++,s[2]++,b.push_back(y);
}
}
for(int i = 0; i < 3; i++)
if(!i) printf("%d",s[i]);
else printf(" %d",s[i]);
puts("");
for(int i = 0; i < 3; i++)
if(!i) printf("%d",t[i]);
else printf(" %d",t[i]);
puts("");
int bb1 = 0, bb2 = 0, cc1 = 0, cc2 = 0, jj1 = 0, jj2 = 0;
for(auto &i : a)
{
if(i == 'B') bb1++;
if(i == 'C') cc1++;
if(i == 'J') jj1++;
}
for(auto &i : b)
{
if(i == 'B') bb2++;
if(i == 'C') cc2++;
if(i == 'J') jj2++;
}
if(bb1 >= cc1 && bb1 >= jj1) cout<<"B";
else if(cc1 > bb1 && cc1 >= jj1) cout<<"C";
else if(jj1 > bb1 && jj1 > cc1) cout<<"J";
cout<<" ";
if(bb2 >= cc2 && bb2 >= jj2) cout<<"B";
else if(cc2 > bb2 && cc2 >= jj2) cout<<"C";
else if(jj2 > bb2 && jj2 > cc2) cout<<"J";
cout<<'\n';
return 0;
}
1019 数字黑洞
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[4];
string changex(string x)
{
for(int i = 0; i < 4; i++)
a[i] = (int)(x[i] - '0');
sort(a,a+4);
string ans = "";
for(int i = 0; i < 4; ++i) ans += char(a[i]+'0');
return ans;
}
string changed(string x)
{
for(int i = 0; i < 4; i++)
a[i] = x[i] - '0';
sort(a,a+4);
string ans = "";
for(int i = 3; ~i; --i) ans += char(a[i] + '0');
return ans;
}
string cal(string x, string y)
{
int ok = 0;
string ans = "";
for(int i = 3; ~i; --i)
{
int t1 = x[i] - '0', t2 = y[i] - '0';
if(ok) t1--, ok = 0;
if(t1 - t2 < 0) ok = 1;
if(ok) ans += char(t1+10 - t2 + + '0');
else ans += char(t1 - t2 + '0');
}
reverse(ans.begin(),ans.end());
return ans;
}
int main()
{
int n;
cin>>n;
string nn = "";
while(n)
{
int t = n%10;
nn += char(t + '0');
n /= 10;
}
int num = nn.size();
if(num < 4)
for(int i = 0; i < 4 -num; ++i) nn += "0";
string x = changed(nn), y = changex(nn);
if(x == y) cout<<x<<" - "<<y<<" = "<<"0000"<<'\n';
else
{
string t="";
while(cal(x,y)!= "6174")
{
t = cal(x,y);
cout<<x<<" - "<<y<<" = "<<t<<'\n';
x = changed(t), y = changex(t);
}
cout<<x<<" - "<<y<<" = "<<"6174"<<'\n';
}
return 0;
}
1020 月饼
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
double x[1007],y[1007];
struct node{
double a,b;
bool operator < (const node &t)const{
return b/a > t.b/t.a;
}
}tot[1007];
int main()
{
int n,sum;
cin>>n>>sum;
for(int i = 0; i < n; i++) cin>>x[i];
for(int i = 0; i < n; i++) cin>>y[i];
for(int i = 0; i < n; i++) tot[i].a = x[i], tot[i].b = y[i];
sort(tot,tot+n);
double ans = 0;
for(int i = 0; i < n && sum > 0; ++i)
{
if(tot[i].a <= sum) ans += tot[i].b, sum -= tot[i].a;
else ans += tot[i].b/tot[i].a*sum, sum = 0;
}
printf("%.2f\n",ans);
return 0;
}
1021 个位数统计
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int a[10];
int main()
{
string s;
cin>>s;
for(int i = 0; i < s.size(); ++i)
{
int t = s[i] - '0';
a[t]++;
}
for(int i = 0; i <= 9; i++)
if(a[i]) cout<<i<<":"<<a[i]<<'\n';
return 0;
}
D进制的A+B
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string s = "";
long long a,b,c;
cin>>a>>b>>c;
long long t = a+b;
if(!t) cout<<0<<'\n';
else
{
while(t > 0)
{
long long temp = t%c;
s += (char)(temp+'0');
t /= c;
}
reverse(s.begin(),s.end());
cout<<s<<'\n';
}
return 0;
}
1023 组个最小数
#include <iostream>
#include <algorithm>
using namespace std;
int a[60],b[107];
int main()
{
int idx = 0,x;
while(cin>>x) a[idx++] = x;
int cnt = 0;
for(int i = 0; i < idx; i++)
while(a[i]) b[cnt++] = i, a[i]--;
sort(b,b+cnt);
if(!b[0])
{
for(int i = 1; i < cnt; ++i)
if(b[i]) swap(b[0],b[i]), i = cnt;
}
for(int i = 0; i < cnt; i++) cout<<b[i];
cout<<'\n';
return 0;
}
1024 科学计数法
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string s,x = "", y = "";
cin>>s;
int len = s.size(), num = 0, ok1 = 0, ok2 = 0;
for(int i = 0; i < len; i++)
{
if(s[i] == '-') ok1 = 1;i++;
while(s[i] != '.') x += s[i],i++;i++;
while(s[i] != 'E') y += s[i],i++;i++;
if(s[i] == '-') ok2 = 1; i++;
while(i < len) num = num*10+s[i]-'0', i++;
}
//cout<<x<<" "<<y<<" "<<num<<'\n';
if(ok2)
{
string t = "";
if(x.size() <= num)
{
for(int i = 0; i < num-x.size();i++) t+= "0";
t += x;
x.clear();
}
else if(x.size() > num)
{
int cnt = 0;
for(int i = x.size()-1; cnt < num; --i) t += x[i],cnt++;
string temp = "";
for(int i = 0; i < x.size() - num; i++) temp += x[i];
x.clear(); x = temp;
}
if(ok1) cout<<"-";
if(x.size() == 0)
{
cout<<"0.";
cout<<t<<y<<'\n';
}
else cout<<x<<"."<<t<<y<<'\n';
}
if(!ok2)
{
string t = "";
if(y.size() <= num)
{
t = y;
for(int i = 0; i < num-y.size(); i++) t += "0";
y.clear();
}
else if(y.size() > num)
{
int i = 0;
for( ; i < num; i++) x += y[i];
for( ; i < y.size(); i++) t += y[i];
}
if(ok1) cout<<"-";
if(y.size() == 0) cout<<x<<t<<'\n';
else cout<<x<<"."<<t<<'\n';
}
return 0;
}
1025 反转链表
输入样例
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
输出样例
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1e5 + 7;
struct node{
int data, ne;
};
node a[maxn],b[maxn];
int main()
{
int head, n, k;
scanf("%d%d%d",&head,&n,&k);
for(int i = 0; i < n; ++i)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
a[x].data = y;
a[x].ne = z;
}
int cnt = 0;
for(int i = head; i != -1; i = a[i].ne)
b[cnt].data = a[i].data, b[cnt++].ne = i;
int x = 0,y = 0;
for(int i = 0; i < cnt/k; ++i)
for(int j = 0; j < k/2; ++j)
{
node t;
x = k*i+j;
y = k*(i+1) - j - 1;
t = b[x];
b[x] = b[y];
b[y] = t;
}
for(int i = 0; i < cnt; i++)
if(i < cnt-1) printf("%05d %d %05d\n", b[i].ne, b[i].data, b[i + 1].ne);
else printf("%05d %d -1\n", b[cnt - 1].ne, b[cnt - 1].data);
return 0;
}
1026 程序运行时间
#include <iostream>
using namespace std;
int main()
{
int x,y;
cin>>x>>y;
int t = y - x;
int h = t/360000,f = (t - h*360000)/6000, m = (t - h*360000 - f*6000);
int yu = m%100;
if(yu >= 50) m = m/100+1;
else m /= 100;
if(h < 10) cout<<0<<h<<":";
else cout<<h<<":";
if(f < 10) cout<<0<<f<<":";
else cout<<f<<":";
if(m < 10) cout<<0<<m;
else cout<<m;
cout<<'\n';
return 0;
}
1027 打印沙漏
#include<cstdio>
using namespace std;
int main()
{
int n, i = 0; char a;
scanf("%d %c", &n, &a);
for ( i= 0; i < n;i++)
if(2*i*i-1>n)
{
i = i - 1;
break;
}
n = n - 2*i * i + 1;
for (int j = i; j > 0; j--)
{
for (int k = 0; k < i - j; k++) putchar(' ');
for (int k = 1; k < 2 * j; k++) printf("%c", a);
printf("\n");
}
for (int j = 2; j <= i; j++)
{
for (int k = 0; k < i - j; k++) putchar(' ');
for (int k = 1; k < 2 * j; k++) printf("%c", a);
printf("\n");
}
printf("%d", n);
return 0;
}
1028 人口普查
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
string name;
int age;
bool operator < (const node &t)const{
return age < t.age;
}
};
node a[100007];
int main()
{
int n;
cin>>n;
int cnt = 0;
for(int i = 0; i < n; ++i)
{
string s, t;
cin>>s>>t;
int num = 0;
for(int i = 0; i < t.size(); ++i)
if(t[i] != '/')
num = num*10 + t[i] - '0';
if(num >20140906 || num < 18140906) continue;
a[cnt].name = s; a[cnt].age = num; cnt++;
}
sort(a,a+cnt);
if(cnt) cout<<cnt<<" "<<a[0].name<<" "<<a[cnt-1].name<<'\n';
else cout<<0<<'\n';
return 0;
}
1029 旧键盘
#include <iostream>
#include <string>
#include <set>
using namespace std;
set<char>st;
int main()
{
string s,t;
cin>>s>>t;
for(int i = 0; i < s.size(); i++)
{
int ok = 0;
for(int j = 0; j < t.size(); j++)
if(s[i] == t[j]) ok = 1;
if(s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 32;
if(!ok && st.find(s[i]) == st.end())
{
cout<<s[i];
st.insert(s[i]);
}
}
cout<<endl;
return 0;
}
1030 完美数列
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 7;
ll a[maxn];
int main()
{
ll n,p;
scanf("%lld%lld",&n,&p);
for(int i = 0; i < n; ++i) scanf("%lld",&a[i]);
sort(a,a+n);
int j = 0,cnt = 0;
for(int i = 0; i < n; i++)
{
for(j; j < n; j++)
{
if(a[j] > a[i]*p) break;
cnt = max(cnt,j-i+1);
}
}
printf("%d\n",cnt);
return 0;
}
1031 查验身份证
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
string s,ans[107];
int a[18] = {
7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char b[11] = {
'1','0','X','9','8','7','6','5','4','3','2'};
int main()
{
int n,cnt = 0;
cin>>n;
for(int i = 0; i < n; ++i)
{
cin>>s;
ll sum = 0; int ok = 0;
for(int j = 0; j < s.size() - 1; ++j)
{
if(s[j] < '0' || s[j] > '9') ok = 1, j = 18;
sum += (int)(s[j] - '0')*a[j];
}
if(ok || s[17] != b[sum%11]) ans[cnt++] = s;
}
if(!cnt) cout<<"All passed"<<'\n';
else for(int i = 0; i < cnt; ++i) cout<<ans[i]<<'\n';
return 0;
}
1032 挖掘机技术哪家强
#include <cstdio>
using namespace std;
int a[100007];
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; ++i)
{
int x, y;
scanf("%d%d",&x,&y);
a[x] += y;
}
int ans = 0, cnt = 0,id = 0;
for(int i = 0; i < 100007; ++i)
{
if(a[i])
{
if(a[i] > ans) ans = a[i], id = i;
cnt++;
}
if(cnt == n) i = 100007;
}
printf("%d %d\n",id,ans);
return 0;
}
1033 旧键盘打字
#include <iostream>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
set<char> st;
int main()
{
string s,t;
getline(cin,s);
getline(cin,t);
int ok = 0;
for(int i = 0; i < s.size(); i++)
{
if(s[i]=='+') ok = 1;
if(s[i] >= 'A' && s[i] <= 'Z')
{
st.insert(s[i]);
s[i] += 32;
}
if(s[i] >= 'a' && s[i] <= 'z')
{
st.insert(s[i]);
s[i] -= 32;
}
st.insert(s[i]);
}
for(int i = 0; i < t.size(); i++)
{
if(st.find(t[i]) == st.end())
{
if(!ok) cout<<t[i];
else if(ok)
{
if(t[i] >= 'A' && t[i] <= 'Z') continue;
else cout<<t[i];
}
}
}
cout<<'\n';
return 0;
}
1034 有理数四则运算
#include <iostream>
#include <cmath>
using namespace std;
long long a, b, c, d;
long long gcd(long long t1, long long t2) {
return t2 == 0 ? t1 : gcd(t2, t1 % t2);
}
void func(long long m, long long n) {
if (m * n == 0) {
printf("%s", n == 0 ? "Inf" : "0");
return ;
}
bool flag = ((m < 0 && n > 0) || (m > 0 && n < 0));
m = abs(m); n = abs(n);
long long x = m / n;
printf("%s", flag ? "(-" : "");
if (x != 0) printf("%lld", x);
if (m % n == 0) {
if(flag) printf(")");
return ;
}
if (x != 0) printf(" ");
m = m - x * n;
long long t = gcd(m, n);
m = m / t; n = n / t;
printf("%lld/%lld%s", m, n, flag ? ")" : "");
}
int main() {
scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);
func(a, b); printf(" + "); func(c, d); printf(" = "); func(a * d + b * c, b * d); printf("\n");
func(a, b); printf(" - "); func(c, d); printf(" = "); func(a * d - b * c, b * d); printf("\n");
func(a, b); printf(" * "); func(c, d); printf(" = "); func(a * c, b * d); printf("\n");
func(a, b); printf(" / "); func(c, d); printf(" = "); func(a * d, b * c);
return 0;
}
1035 插入与归并
#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
int a[maxn],b[maxn],c[maxn];
void Insert_Sort(int x[], int y[], int p)
{
int ok = 1;
for(int i = 2; i <= p; i++)
{
sort(x,x+i);
ok = 1;
for(int j = 0; j < p; j++)
if(x[j] != y[j]) ok = 0;
if(ok)
{
puts("Insertion Sort");
i++;
sort(x,x+i);
for(int j = 0; j < p; j++)
if(!j) cout<<x[j];
else cout<<" "<<x[j];
return ;
}
}
}
void Merge_Sort(int x[],int y[],int p)
{
int ok = 1;
for(int i = 2; i <= p; i *= 2)
{
for(int j = 0; j < p; j += i)
sort(x + j, x + (j+i < p ? j+i : p));
ok = 1;
for(int j = 0; j < p; j++)
if(x[j] != y[j]) ok = 0;
if(ok)
{
puts("Merge Sort");
i *= 2;
for(int j = 0; j < p; j += i)
sort(x + j, x + (j+i < p ? j+i : p));
for(int j = 0; j < p; j++)
if(!j) cout<<x[j];
else cout<<" "<<x[j];
return ;
}
}
}
int main()
{
int n;
cin>>n;
for(int i = 0; i < n; i++) cin>>a[i], b[i] = a[i];
for(int i = 0; i < n; i++) cin>>c[i];
Merge_Sort(a,c,n);
Insert_Sort(b,c,n);
return 0;
}
1036 跟奥巴马一起编程
#include <iostream>
using namespace std;
int main()
{
int n;
char ch;
cin>>n>>ch;
int len = (n+1)>>1;
for(int i = 1; i <= len; i++)
{
for(int j = 1; j <= n; j++)
{
if(i == 1 || i == len) cout<<ch;
else if(j== 1 || j == n) cout<<ch;
else cout<<" ";
}
cout<<'\n';
}
return 0;
}
1037 在霍格沃茨找零钱
#include <iostream>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
vector<ll> Change(string s)
{
vector<ll> C;
for(int i = 0; i < s.size(); i++)
{
ll p = 0;
while(s[i] != '.' && i < s.size())
{
p = p * 10 + (ll)(s[i] - '0');
i++;
}
C.push_back(p);
}
return C;
}
int main()
{
string a,b;
cin>>a>>b;
vector<ll>x,y;
x = Change(a);
y = Change(b);
int ok = 0;
for(int i = 0; i < x.size(); i++)
if(x[i] == y[i]) i++;
else if(x[i] > y[i]) ok = 1, i = 4;
else ok = 0, i = 4;
ll ans[4] = {
0};
if(ok)
{
for(int i = 2; ~i; --i)
{
if(x[i] >= y[i] && i == 2) ans[i] = x[i] - y[i];
else if(i == 2 && x[i] < y[i])
{
x[i-1]--;
x[i] += 29;
ans[i] = x[i] - y[i];
}
if(i == 1 && x[i] >= y[i]) ans[i] = x[i] - y[i];
else if(i == 1 && x[i] < y[i])
{
x[i-1]--;
x[i] += 17;
ans[i] = x[i] - y[i];
}
if(i == 0) ans[i] = x[i] - y[i];
}
cout<<"-";
}
else
{
for(int i = 2; ~i; --i)
{
if(y[i] >= x[i] && i == 2) ans[i] = y[i] - x[i];
else if(i == 2 && y[i] < x[i])
{
y[i-1]--;
y[i] += 29;
ans[i] = y[i] - x[i];
}
if(i == 1 && y[i] >= x[i]) ans[i] = y[i] - x[i];
else if(i == 1 && y[i] < x[i])
{
y[i-1]--;
y[i] += 17;
ans[i] = y[i] - x[i];
}
if(i == 0) ans[i] = y[i] - x[i];
}
}
for(int i = 0; i < 3; i++)
if(!i) cout<<ans[i];
else cout<<"."<<ans[i];
cout<<'\n';
return 0;
}
1038 统计同成绩学生
#include <iostream>
using namespace std;
const int maxn = 110;
int main()
{
int n, a[maxn] = {
0};
cin>>n;
while(n--)
{
int x;
cin>>x;
a[x]++;
}
int k;
cin>>k;
while(k--)
{
int y;
cin>>y;
if(k == 0) cout<<a[y]<<endl;
else cout<<a[y]<<" ";
}
return 0;
}
1039 到底买不买
#include <iostream>
#include <string>
using namespace std;
int main()
{
string x,y;
cin>>x>>y;
int cnt1 = x.size(), cnt2 = y.size();
int ok = 0, lose = 0;
for(int i = 0; i < cnt2; i++)
{
for(int j = 0; j < cnt1; j++)
if(y[i] == x[j])
{
x[j] = '#';
break;
}
else if(j == cnt1-1 && x[j] != y[i]) ok = 1, lose++;
}
if(ok) cout<<"No "<<lose<<'\n';
else cout<<"Yes "<<cnt1-cnt2<<'\n';
return 0;
}
1040 有几个PAT
#include <iostream>
#include <string>
using namespace std;
const int mod = 1000000007;
int main()
{
string s;
cin>>s;
int len = s.size();
int a[100007] = {
0};
int p = 0, t = 0;
for(int i = 0; i < len; i++)
{
if(s[i] == 'P') ++p;
if(s[i] == 'A') a[i] = p;
}
int ans = 0;
for(int i = len-1; ~i; i--)
{
if(s[i] == 'T') t++;
if(s[i] == 'A') ans = (ans + t*a[i]%mod)%mod;
}
cout<<ans<<'\n';
return 0;
}
1041 考试座位号
#include <iostream>
#include <map>
using namespace std;
struct node{
string no;
int n;
};
map<int,node>mp;
int main()
{
int n;
cin>>n;
while(n--)
{
string s;
int x,y;
cin>>s>>x>>y;
mp[x] = {
s,y};
}
int m;
cin>>m;
while(m--)
{
int x;
cin>>x;
cout<<mp[x].no<<" "<<mp[x].n<<'\n';
}
return 0;
}
1042 字符统计
#include <iostream>
#include <string>
#include <set>
#include <map>
using namespace std;
map<char,int>mp;
set<char>st;
int main()
{
string s;
getline(cin,s);
int len = s.size();
for(int i = 0; i < len; i++)
{
if(s[i] >= 'A' && s[i] <= 'Z') s[i] += 32;
if(s[i] >= 'a' && s[i] <= 'z')
{
st.insert(s[i]);
mp[s[i]]++;
}
}
int cnt = st.size();
int maxx = 0;
char ch;
for(set<char>::iterator it = st.begin(); it != st.end(); ++it)
if(mp[*it] > maxx && *it != ' ') maxx = mp[*it], ch = *it;
cout<<ch<<" "<<maxx<<'\n';
return 0;
}
1043 输出PATest
#include <iostream>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
map<char,int> mp;
int main()
{
string x;
cin>>x;
int len = x.size();
for(int i = 0; i < len; i++)
{
if(x[i] == 'P' || x[i] == 'A' || x[i] == 'T' || x[i] == 'e' || x[i] == 's' || x[i] == 't')
++mp[x[i]];
}
int P = mp['P'], A = mp['A'], T = mp['T'], e = mp['e'], s = mp['s'], t = mp['t'];
while(P > 0 || A > 0 || T > 0 || e > 0 || s > 0 || t > 0)
{
if(P)
{
cout<<'P';
P--;
}
if(A)
{
cout<<'A';
A--;
}
if(T)
{
cout<<'T';
T--;
}
if(e)
{
cout<<'e';
e--;
}
if(s)
{
cout<<'s';
s--;
}
if(t)
{
cout<<'t';
t--;
}
}
cout<<'\n';
return 0;
}
1044 火星数字
#include <iostream>
#include <string>
using namespace std;
string low[13] = {
"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string h[13] = {
"", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
int len;
void To_string(int t)
{
if (t / 13) cout << h[t / 13];
if (t/13 && t%13) cout << " ";
if (t % 13 || t == 0) cout << low[t % 13];
}
void To_num(string s,int len)
{
int t1 = 0, t2 = 0; //t1高位 t2:低位
string s1 = s.substr(0, 3), s2; //s1高位 s2:低位
if (len > 4) s2 = s.substr(4, 3);
for (int j = 1; j <= 12; j++)
{
if (s1 == low[j] || s2 == low[j]) t2 = j;
if (s1 == h[j]) t1 = j;
}
cout << t1 * 13 + t2;
}
int main()
{
int n;
cin >> n;
getchar();
while(n--)
{
string s;
getline(cin, s);
len = s.size();
if (s[0] >= '0' && s[0] <= '9')
To_string(stoi(s)); //stois: 将字符串转化成 数字
else To_num(s,len);
cout<<'\n';
}
return 0;
}
1045 快速排序
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 7;
int main()
{
int a[maxn] = {
0}, b[maxn] = {
0}, c[maxn] = {
0};
int n;
cin>>n;
for(int i = 0; i < n; i++)
{
cin>>a[i];
b[i] = a[i];
}
int cnt = 0, maxx = 0;
sort(a,a+n);
for(int i = 0; i < n; i++)
{
if(b[i] > maxx) maxx = b[i];
if(a[i] == b[i] && b[i] == maxx) c[cnt++] = b[i];
}
cout<<cnt<<'\n';
if(!cnt) cout<<'\n';
else
{
for(int i = 0; i < cnt; i++)
if(!i) cout<<c[i];
else cout<<" "<<c[i];
cout<<'\n';
}
return 0;
}
1046 划拳
#include <iostream>
using namespace std;
int a[110], b[110], c[110];
int main()
{
int n;
cin>>n;
int idx = 0;
while(n--)
{
int x,y,z,k;
cin>>x>>y>>z>>k;
a[idx] = x + z;
b[idx] = y;
c[idx++] = k;
}
int cntb = 0, cntc = 0;
for(int i = 0; i < idx; i++)
{
if(a[i] == b[i] && a[i] == c[i]) continue;
if(a[i] == b[i]) cntb++;
if(a[i] == c[i]) cntc++;
}
cout<<cntc<<" "<<cntb<<'\n';
return 0;
}
1047 编程团体赛
#include <cstdio>
#include <vector>
#include <algorithm>
#define PII pair
using namespace std;
PII<int,int> p[10007];
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int x,y,z;
scanf("%d-%d %d",&x,&y,&z);
p[x].first = x;
p[x].second += z;
}
int no,rate = 0;
for(int i = 1; i <= 1000; i++)
if(p[i].second > rate) rate = p[i].second, no = i;
printf("%d %d\n",no,rate);
return 0;
}
1048 数字加密
#include<iostream>
using namespace std;
char list[13] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K'};
int main()
{
string a, b;
int temp;
cin >> a >> b;
if(b.length() < a.length()) b.insert(0, a.length() - b.length(), '0'); // 在b字符串第初始位置插入 n 个字符 '0'
for(int i = b.length() - 1, j = a.length() - 1, pos = 0; j >= 0; i--, j--, pos++)
{
if(pos % 2 == 0) //处于第奇数个位置的字符串
{
temp = ((a[j] - '0') + (b[i] - '0')) % 13;
b[i] = list[temp];
}
else //处于偶数个位置的字符串
{
if(b[i] - a[j] < 0) b[i] = b[i] - a[j] + '0' + 10;
else b[i] = b[i] - a[j] + '0';
}
}
cout << b;
}
1049 数列的片段和
参考题解
规律题:(0.1 0.2 0.3 0.4)的排列有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4),仔细观察你会发现每个数出现的次数就是 (i+1)(n-i),但是提交第三个测试点没有通过,上篇给的参考博客写了一个原因,有兴趣的前去参观。
#include <iostream>
#include <iomanip>
using namespace std;
typedef long long ll;
int main()
{
int n;
ll ans = 0.0;
cin>>n;
for(int i = 0; i < n; ++i)
{
double t;
cin>>t;
ll temp = t*1000;
ans += temp*(i+1)*(n-i);
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<(ans/1000.0)<<'\n';
return 0;
}
1050 螺旋矩阵
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
vector<int>V;
bool cmp(int a, int b) {
return a > b;}
int main()
{
int N, m, n;
scanf("%d", &N);
V.resize(N);
for (int i = 0; i < N; i++)
scanf("%d", &V[i]);
sort(V.begin(), V.end(), cmp);
for (int i = sqrt(N); i >= 1; i--)
{
if (N%i == 0)
{
m = N / i;
n = i;
break;
}
}
vector<vector<int>>Vp(m, vector<int>(n));
int level = (n+1)/2;
int i = 0;
for (int L = 0; L < level; L++)
{
for (int j = L; j <= n - 1 - L && i < N; j++)
Vp[L][j] = V[i++];
for (int j = L + 1; j <= m - 1 - L && i < N; j++)
Vp[j][n - 1 - L] = V[i++];
for (int j = n - 1 - L - 1; j >= L && i < N; j--)
Vp[m - 1 - L][j] = V[i++];
for (int j = m - 1 - L - 1; j >= L + 1 && i < N; j--)
Vp[j][L] = V[i++];
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (j != 0)
printf(" ");
printf("%d", Vp[i][j]);
}
printf("\n");
}
return 0;
}
1051 复数乘法
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
double r1,r2,p1,p2;
cin >> r1 >> p1 >> r2 >>p2;
double a1 = r1*cos(p1);
double b1 = r1*sin(p1);
double a2 = r2*cos(p2);
double b2 = r2*sin(p2);
double x = a1*a2 - b1*b2;
double y = a1*b2 + b1*a2;
if(fabs(x) < 0.01) x = 0.00;
if(fabs(y) < 0.01) y = 0.00;
printf("%.2f",x);
if(y>=0) printf("+");
printf("%.2fi\n",y);
return 0;
}
1052 卖个萌
#include <iostream>
#include <vector>
#include <cstdio>
#include <string>
using namespace std;
vector<string> v[5];
void init()
{
for(int i = 0; i < 3; i++)
{
string s,t;
getline(cin,s);
for(int j = 0; j < s.size(); j++)
{
if(s[j] == '[')
{
t = "";
j++;
while(s[j] != ']')
{
t += s[j];
j++;
}
v[i].push_back(t);
}
}
}
}
int main()
{
init();
int k;
cin>>k;
while(k--)
{
int x1,y1,z,y2,x2;
cin>>x1>>y1>>z>>y2>>x2;
if(x1 < 1 || y1 < 1 || z < 1 || y2 < 1 || x1 < 1 || x1 > v[0].size() || y1 > v[1].size() || z > v[2].size() || y2 > v[1].size() || x2 > v[0].size())
puts("Are you kidding me? @\\/@");
else cout<<v[0][x1-1]<<"("<<v[1][y1-1]<<v[2][z-1]<<v[1][y2-1]<<")"<<v[0][x2-1]<<'\n';
}
return 0;
}
1053 住房空置率
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,d;
double e;
cin>>n>>e>>d;
int kong = 0, wu = 0;
for(int i = 0; i < n; i++)
{
int k,cnt = 0;
cin>>k;
for(int j = 0; j < k; j++)
{
double t;
cin>>t;
if(t < e) cnt++;
}
if(cnt > (k/2))
{
if(k > d) wu++;
else kong++;
}
}
double x = (double) kong/n*100;
double y = (double) wu/n*100;
printf("%.1f%% %.1f%%\n",x,y);
return 0;
}
1054 求平均值
#include <bits/stdc++.h>
using namespace std;
char a[50], b[50];
int main()
{
int n, cnt = 0;
double temp = 0.0, sum = 0.0;
cin >> n;
for(int i = 0; i < n; i++)
{
scanf("%s", a);
sscanf(a, "%lf", &temp); //从 a(字符串)中读进与指定格式相符的数据输入到 temp 中
sprintf(b, "%.2f",temp); //将 temp 格式化输入到 b(字符串)中 (注意没有&号)
int flag = 0;
for(int j = 0; j < strlen(a); j++)
if(a[j] != b[j]) flag = 1;
if(flag || temp < -1000 || temp > 1000)
{
printf("ERROR: %s is not a legal number\n", a);
continue;
}
else
{
sum += temp;
cnt++;
}
}
if(cnt == 1)
printf("The average of 1 number is %.2f", sum);
else if(cnt > 1)
printf("The average of %d numbers is %.2f", cnt, sum / cnt);
else
printf("The average of 0 numbers is Undefined");
return 0;
}
1055 集体照
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int maxn = 1e4 + 7;
struct node{
int h;
string name;
bool operator < (const node &t)const
{
if(h != t.h) return h > t.h;
return name < t.name;
}
}p[maxn];
string line[maxn];
int main()
{
int n,k;
cin>>n>>k;
for(int i = 0; i < n; i++) cin>>p[i].name>>p[i].h;
sort(p,p+n);
for(int j = 0, i = 0; i < k; i++)
{
int len = n/k;
if(i == 0) len += n%k;
for(int r = len/2 + 1, l = r - 1; r <= len || l > 0; r++, l--)
{
if(r <= len) line[r] = p[j++].name;
if(l > 0) line[l] = p[j++].name;
}
for(int l = 1; l <= len; l++)
if(l == 1) cout<<line[l];
else cout<<' '<<line[l];
cout<<'\n';
}
return 0;
}
1056 组合数的和
#include <iostream>
using namespace std;
int a[15];
int main()
{
int n;
cin>>n;
for(int i = 0; i < n; i ++) cin>>a[i];
int ans = 0;
for(int i = 0; i < n; i++)
{
int t = a[i]*10;
if(!t) continue;
for(int j = 0; j < n; j++)
if(i != j) ans += t + a[j];
}
cout<<ans<<'\n';
return 0;
}
1057 数零壹
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
int main()
{
string x,y="";
getline(cin,x);
for(int i = 0; i < x.size(); i++)
{
if(x[i] >= 'A' && x[i] <= 'Z') x[i] += 32;
if(x[i] >= 'a' && x[i] <= 'z') y += x[i];
}
if(!y.size())
{
cout<<0<<" "<<0<<'\n';
return 0;
}
ll sum = 0;
for(int i = 0; i < y.size(); i++)
sum += (ll)(y[i]-'a' + 1);
string cnt = "";
while(sum > 0)
{
ll yu = sum%2;
cnt += (char)(yu+'0');
sum /= 2;
}
int zero = 0, one = 0;
for(int i = 0; i < cnt.size(); i++)
{
if(cnt[i] == '0') zero++;
if(cnt[i] == '1') one++;
}
cout<<zero<<" "<<one<<'\n';
return 0;
}
1058 选择题
#include <iostream>
#include <string>
using namespace std;
const int maxn = 1e3 + 7, maxm = 1e2 + 7;
struct node{
int grade;
string answer;
};
node cho[maxm];
int ans[maxn];
int main()
{
int n,m;
cin>>n>>m;
for(int i = 1; i <= m; i++)
{
int a,b,c;
char x;
cin>>a>>b>>c;
string temp = "";
for(int i = 0; i < c; i++)
{
cin>>x;
temp += x;
}
cho[i] = {
a,temp};
}
int ok[maxn] = {
0};
getchar();
for(int i = 1; i <= n; i++)
{
string s;
getline(cin,s);
int cnt = 1;
for(int j = 0; j < s.size(); j++)
{
string t = "";
if(s[j] == '(')
{
while(s[j+1] != ')')
{
if(s[j+1] >= 'a' && s[j+1] <= 'z') t += s[j+1];
j++;
}
if(t == cho[cnt].answer) ans[i] += cho[cnt].grade;
else ok[cnt]++;
cnt++;
}
}
}
for(int i = 1; i <= n; i++) cout<<ans[i]<<'\n';
bool flag = false;
int maxx = 0;
for(int i = 1; i <= m; i++)
{
if(ok[i] > maxx) maxx = ok[i];
if(ok[i]) flag = 1;
}
if(!flag) cout<<"Too simple"<<'\n';
else
{
cout<<maxx;
for(int i = 1; i <= m; i++)
if(ok[i] == maxx) cout<<" "<<i;
cout<<'\n';
}
return 0;
}
1059 C语言竞赛
#include <iostream>
#include <string>
#include <map>
#include <set>
using namespace std;
int p[10007],cnt;
bool st[10007];
map<string,int> mp;
set<int>num;
set<string> ch;
void init()
{
for(int i = 2; i < 10007; i++)
{
if(!st[i]) num.insert(i),p[cnt++] = i;
for(int j = 0; p[j] <= 10007/i; j++)
{
st[i*p[j]] = true;
if(i%p[j] == 0) break;
}
}
}
int main()
{
init();
int n;
cin>>n;
for(int i = 1; i <= n; i++)
{
string x;
cin>>x;
ch.insert(x);
mp[x] = i;
}
int k;
cin>>k;
int vis[10007] = {
0};
while(k--)
{
string y;
cin>>y;
if(ch.find(y) == ch.end()) cout<<y<<": Are you kidding?"<<'\n';
else
{
int cnt = mp[y];
if(vis[cnt]) cout<<y<<": Checked"<<'\n';
else
{
if(cnt == 1) cout<<y<<": Mystery Award"<<'\n';
else if(num.find(cnt) == num.end()) cout<<y<<": Chocolate"<<'\n';
else cout<<y<<": Minion"<<'\n';
}
vis[cnt] = 1;
}
}
return 0;
}
1060 爱丁顿数
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 100010;
int n;
int a[maxn];
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
sort(a, a + n);
for (int i = n; i; i -- )
if (a[n - i] > i)
{
printf("%d\n", i);
return 0;
}
puts("0");
return 0;
}
1061 判断题
#include <iostream>
using namespace std;
int g[110],ok[110];
int main()
{
int n,m,x;
cin>>m>>n;
for(int i = 0; i < n; i++)
{
cin>>x;
g[i] = x;
}
for(int i = 0; i < n; i++)
{
cin>>x;
ok[i] = x;
}
while(m--)
{
int grade = 0;
for(int i = 0; i < n; i++)
{
cin>>x;
if(x == ok[i]) grade += g[i];
}
cout<<grade<<'\n';
}
return 0;
}
1062 最简分数
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
int n1, m1, n2, m2, k;
scanf("%d/%d %d/%d %d", &n1, &m1, &n2, &m2, &k);
if(n1 * m2 > n2 * m1) {
swap(n1, n2);
swap(m1, m2);
}
int num = 1;
bool flag = false;
while(n1 * k >= m1 * num) num++;
while(m2 * num < n2 * k) {
if(__gcd(num, k) == 1) {
if(!flag) printf("%d/%d",num,k);
else printf(" %d/%d",num,k);
flag = true;
}
num++;
}
return 0;
}
1063 计算谱半径
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
double ans = 0;
for(int i = 0; i < n; i++)
{
double a,b;
scanf("%lf %lf",&a,&b);
ans = max(ans,sqrt(a*a+b*b));
}
printf("%.2f\n",ans);
return 0;
}
1064 朋友数
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int a[10004];
set<int>s;
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
int x;
scanf("%d",&x);
int temp = 0;
while(x > 0)
{
temp += x%10;
x /= 10;
}
s.insert(temp);
}
int cnt = 0;
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
a[cnt++] = *it;
sort(a,a+cnt);
printf("%d\n",cnt);
for(int i = 0; i < cnt; i++)
if(!i) printf("%d",a[i]);
else printf(" %d",a[i]);
return 0;
}
1065 单身狗
#include <iostream>
#include <set>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
map<string,string>mp;
set<string>s;
string b[10007];
int main()
{
int n;
cin>>n;
for(int i = 0; i < n; i++)
{
string x,y;
cin>>x>>y;
mp[x] = y;
mp[y] = x;
}
int k;
cin>>k;
for(int i = 0; i < k; i++)
cin>>b[i], s.insert(b[i]);
for(int i = 0; i < k; i++)
{
string t = b[i];
string x = mp[t];
if(s.find(t) != s.end() && s.find(x) != s.end()) s.erase(t), s.erase(x);
}
cout<<s.size()<<'\n';
int cnt = 0;
for(set<string>::iterator it = s.begin(); it != s.end(); it++)
{
if(!cnt) cout<<*it;
else cout<<" "<<*it;
++cnt;
}
return 0;
}
1066 图像过滤
#include <cstdio>
using namespace std;
int main()
{
int n,m,a,b,k;
scanf("%d%d%d%d%d",&n,&m,&a,&b,&k);
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
int x;
scanf("%d",&x);
if(x < a || x > b)
{
if(j) printf(" ");
if(x < 10) printf("00%d",x);
else if(x < 100) printf("0%d",x);
else printf("%d",x);
}
else
{
if(j) printf(" ");
if(k < 10) printf("00%d",k);
else if(k < 100) printf("0%d",k);
else printf("%d",k);
}
}
puts("");
}
return 0;
}
1067 试密码
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
string ans,x;
cin>>ans>>n;
getchar();
int cnt = 0;
while(getline(cin,x))
{
if(x == "#") break;
++cnt;
if(x == ans && cnt <= n)
{
puts("Welcome in");
break;
}
else
{
if(cnt <= n) cout<<"Wrong password: "<<x<<'\n';
if(cnt == n) puts("Account locked");
}
}
return 0;
}
1068 万绿丛中一点红
#include <cstdio>
#include <queue>
#include <map>
#include <cmath>
using namespace std;
const int maxn = 1e6 + 7, maxm = 1e3 + 7;
int dir[8][2] = {
0,1,-1,1,-1,0,-1,-1,0,-1,1,-1,1,0,1,1};
struct node{
int x,y,tem;
};
node now[maxn];
int a[maxm][maxm];
map<int,int>tot;
int main()
{
int n,m,top;
scanf("%d%d%d",&m,&n,&top);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++) scanf("%d",&a[i][j]),tot[a[i][j]]++;
int cnt = 0;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
{
int ok = 0, t = a[i][j];
if(tot[t] > 1) continue;
for(int k = 0; k < 8; k++)
{
int tx = i + dir[k][0];
int ty = j + dir[k][1];
if(abs(t - a[tx][ty]) <= top) ok = 1;
}
if(!ok)
now[cnt++] = {
j,i,a[i][j]};
}
if(cnt == 1)
printf("(%d, %d): %d\n",now[0].x,now[0].y,now[0].tem);
else if(!cnt) puts("Not Exist");
else puts("Not Unique");
return 0;
}
1069 微博转发抽奖
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main()
{
int m,n,s;
cin>>m>>n>>s;
string ch[1007];
set<string>st;
for(int i = 1; i <= m; i++) cin>>ch[i];
while(s <= m)
{
if(st.find(ch[s]) == st.end())
{
st.insert(ch[s]);
cout<<ch[s]<<'\n';
}
else
{
while(st.find(ch[s]) != st.end() && s <= m)
s++;
if(s <= m)
{
st.insert(ch[s]);
cout<<ch[s]<<'\n';
}
}
s += n;
}
if(!st.size()) cout<<"Keep going...";
return 0;
}
1070 结绳
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n,a[10007] = {
0};
cin>>n;
for(int i = 0; i < n; i++) cin>>a[i];
sort(a,a+n);
int ans = a[0];
for(int i = 1; i < n; i++) ans = (ans + a[i])/2;
cout<<ans<<'\n';
return 0;
}
1071 小赌怡情
#include <iostream>
using namespace std;
struct node{
int n1,b,t,n2;
};
node a[107];
int main()
{
int T,K;
cin>>T>>K;
for(int i = 0; i < K; i++)
{
int x,ok,num,y;
cin>>x>>ok>>num>>y;
a[i] = {
x,ok,num,y};
}
for(int i = 0; i < K && T > 0; i++)
{
node now = a[i];
if(T >= now.t)
{
if((now.b == 0 && now.n2 < now.n1) || (now.b && now.n2 > now.n1))
{
T += now.t;
cout<<"Win "<<now.t<<"! Total = "<<T<<"."<<'\n';
}
else
{
T -= now.t;
cout<<"Lose "<<now.t<<". Total = "<<T<<"."<<'\n';
}
}
else if(T < now.t) cout<<"Not enough tokens. Total = "<<T<<"."<<'\n';
if(T == 0) cout<<"Game Over."<<'\n';
}
return 0;
}
1072 开学寄语
#include <iostream>
#include <set>
#include <string>
#include <vector>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
set<string> s;
for(int i = 0; i < m; i++)
{
string x;
cin>>x;
s.insert(x);
}
int p = 0, cnt = 0;
string ch[1007];
vector<string>person;
for(int i = 0; i < n; i++)
{
int k, ok = 0;
cin>>ch[i]>>k;
person.clear();
for(int j = 0; j < k; j++)
{
string t;
cin>>t;
if(s.find(t) != s.end()) cnt++, ok = 1,person.push_back(t);
}
if(ok)
{
p++;
cout<<ch[i]<<":";
for(auto &i : person) cout<<" "<<i;
cout<<'\n';
}
}
cout<<p<<" "<<cnt<<'\n';
return 0;
}
1073 多选题常见计分法
#include <bits/stdc++.h>
using namespace std;
int Hash[7] = {
1,2,4,8,16,32};
int ans[110]; //存储答案
int g[110]; //每个题的分数
int every[1007][107]; //每个人每个题的选择
int cnt[107][7]; //错误答案
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i = 0; i < m; i++)
{
int grade, tot, num;
scanf(" %d %d %d",&grade,&tot,&num);
g[i] = grade;
for(int j = 0; j < num; j++)
{
char ch;
scanf(" %c",&ch);
ans[i]+= Hash[(int)(ch - 'a')];
}
}
/***
for(int i = 0; i < m; i++)
cout<<g[i]<<" "<<ans[i]<<'\n';
***/
getchar();
for(int i = 0; i < n; i++)
{
double sum = 0;
string s;
getline(cin,s);
for(int j = 0, idx = 0; j < s.size(); j++)
{
if(s[j] == '(')
{
while(s[j+1] != ')')
{
if(s[j+1] >= 'a' && s[j+1] <= 'e')
every[i][idx] += Hash[(int)(s[j+1] - 'a')];
j++;
}
if(s[j+1] == ')')
{
int now = ans[idx] ^ every[i][idx]; //now == 0 表示全对
if(now)
{
if((ans[idx] | every[i][idx]) == ans[idx]) //漏选
sum += (double)(g[idx]*1.0/2);
for(int k = 0; k < 5; k++)
if(Hash[k] & now) cnt[idx][k]++;
}
else sum += (double)g[idx];
// cout<< i <<" "<<every[i][idx]<<'\n';
// cout<<i<<" 选择后的得分"<<sum<<'\n';
idx++;
}
}
}
printf("%.1f\n",sum); //每个人的成绩
}
int maxn = 0; //错误最多的次数
for(int i = 0; i < m; i++)
for(int j = 0; j < 5; j++)
maxn = maxn > cnt[i][j] ? maxn : cnt[i][j];
if(!maxn) puts("Too simple"); //全对
else{
for(int i = 0; i < m; i++)
for(int j = 0; j < 5; j++)
if(maxn == cnt[i][j])
printf("%d %d-%c\n",maxn, i+1,'a'+ j);
}
return 0;
}
1074 宇宙无敌加法器
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string s,a,b;
cin>>s>>a>>b;
if(a.size() < s.size()) a.insert(0,s.size()-a.size(),'0');
if(b.size() < s.size()) b.insert(0,s.size()-b.size(),'0');
int temp = 0;
string ans = "";
for(int i = a.size()-1; i >= 0; --i)
{
int mod = s[i] == '0' ? 10 : (s[i] - '0');
ans += (a[i] - '0' + b[i] - '0' + temp)%mod + '0';
temp = (a[i] - '0' + b[i] - '0' + temp)/mod;
}
bool flag = false;
if(temp) ans += "1";
for(int i = ans.size() - 1; i >= 0 ; i--)
if(ans[i] != '0' || flag)
{
flag =true;
cout<<ans[i];
}
if(!flag) cout<<0;
return 0;
}
1075 链表元素分类
#include <cstdio>
#include <vector>
using namespace std;
const int maxn = 1e5 + 7;
int val[maxn],later[maxn];
int main()
{
int head, n, k;
scanf("%d%d%d",&head,&n,&k);
for(int i = 0; i < n; i++)
{
int add, data, Next;
scanf("%d%d%d",&add,&data,&Next);
val[add] = data; later[add] = Next;
}
vector<int> a, b, c;
for(int i = head; ~i; i = later[i])
if(val[i] < 0) a.push_back(i);
else if(val[i] <= k) b.push_back(i);
else c.push_back(i);
a.insert(a.end(),b.begin(),b.end());
a.insert(a.end(),c.begin(),c.end());
for(int i = 0; i < a.size(); i++)
{
printf("%05d %d ",a[i], val[a[i]]);
if(i == a.size()-1) puts("-1");
else printf("%05d\n",a[i+1]);
}
return 0 ;
}
1076 Wifi密码
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n;
cin>>n;
string ans = "";
getchar();
for(int i = 0; i < n; i++)
{
string s;
getline(cin,s);
int len = s.size();
for(int i = 0; i < len; i++)
{
int ok = 0;
if(s[i] == '-')
{
char ch = s[i-1];
if(s[i+1] == 'T')
{
ok = 1;
ans += (ch - 'A' + 1 + '0');
}
}
if(ok) break;
}
}
cout<<ans<<'\n';
return 0;
}
1077 互评成绩计算
#include <cstdio>
#include <algorithm>
using namespace std;
int a[107];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i = 0; i < n; i++)
{
int idx = 0;
int teach;
scanf(" %d",&teach);
for(int j = 0; j < n-1; j++)
{
int x;
scanf("%d",&x);
if(x <= m && x >= 0) a[idx++] = x;
}
sort(a,a+idx);
int sum = 0;
for(int j = 1; j < idx-1; j++) sum += a[j];
double ave = sum*1.0/(idx-2);
int ans = (ave + teach + 1)/2;
printf("%d\n",ans);
}
return 0;
}
1078 字符串压缩与解压
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char ch;
cin>>ch;
getchar();
string ans = "";
if(ch == 'C')
{
string s;
getline(cin,s);
for(int i = 0; i < s.size(); i++)
{
int cnt = 0, flag = i;
char now = s[i];
while(now == s[i] && i < s.size())
{
cnt++;
i++;
}
string temp = "";
if(cnt >= 1) i--;
while( cnt >= 1 && flag != i)
{
temp += (char)(cnt%10 + '0');
cnt /= 10;
}
for(int j = temp.size() - 1; j >= 0; j--) ans += temp[j];
ans += now;
}
}
if(ch == 'D')
{
string s;
getline(cin,s);
for(int i = 0; i < s.size(); i++)
{
int cnt = 0;
while(s[i] >= '0' && s[i] <= '9' && i < s.size())
{
cnt = cnt*10 + (int)(s[i] - '0');
i++;
}
if(cnt)
for(int j = 0; j < cnt; j++) ans += s[i];
else ans += s[i];
}
}
cout<<ans<<'\n';
return 0;
}
1079 延迟的回文数
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
bool check(vector<int> A)
{
for(int i = 0, j = A.size()-1; i < j; i++, j--)
if(A[i] != A[j]) return false;
return true;
}
void Print(vector<int> A)
{
for(int i = A.size() - 1; ~i; i--) cout<<A[i];
}
vector<int>add(vector<int> A, vector<int> B)
{
vector<int> C;
int t = 0;
for(int i = 0; i < A.size() || i < B.size(); i++)
{
if(i < A.size()) t += A[i];
if(i < B.size()) t += B[i];
C.push_back(t%10);
t /= 10;
}
if(t) C.push_back(1);
return C;
}
int main()
{
string a;
cin>>a;
vector<int> A;
for(int i = a.size() - 1; ~i; i--) A.push_back(a[i] - '0');
for(int i = 0; i < 10; i++)
{
if(check(A)) break;
vector<int> B(A.rbegin(),A.rend());
Print(A);cout<<" + ";Print(B);cout<<" = ";
A = add(A,B);
Print(A); cout<<'\n';
}
if(check(A)) Print(A),cout<<" is a palindromic number."<<'\n';
else cout<<"Not found in 10 iterations.";
return 0;
}
1080 MOOC期终成绩
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <unordered_map>
using namespace std;
struct student{
string name;
int p, m, f, ave; //编程 期中 期末 平均
student() : p(-1), m(-1), f(-1),ave(0) {
}
void cla()
{
if(f >= m) ave = f; //期末 >= 期中
else ave = round(m*0.4 + f*0.6);
}
bool operator < (const student &t)const
{
if(ave != t.ave) return ave > t.ave; //按照成绩由高到低
return name < t.name; //按照名字从小到大
}
};
int main()
{
int p,m,n,g;
string x;
unordered_map<string,student> stu;
cin>>p>>m>>n;
for(int i = 0; i < p; i++)
{
cin>>x>>g;
stu[x].name = x;
stu[x].p = g;
}
for(int i = 0; i < m; i++)
{
cin>>x>>g;
stu[x].name = x;
stu[x].m = g;
}
for(int i = 0; i < n; i++)
{
cin>>x>>g;
stu[x].name = x;
stu[x].f = g;
}
vector<student> v;
for(unordered_map<string,student>::iterator it = stu.begin(); it != stu.end(); it++)
{
student now = it->second;
now.cla();
if(now.p >= 200 && now.ave >= 60) v.push_back(now);
}
sort(v.begin(), v.end());
for(vector<student>::iterator it = v.begin(); it != v.end(); it++)
{
student y = *it;
cout<<y.name<<' '<<y.p<<' '<<y.m<<' '<<y.f<<' '<<y.ave<<'\n';
}
return 0;
}
1081 检查密码
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
getchar();
while(n--)
{
string s;
getline(cin,s);
int len = s.size();
if(len < 6) cout<<"Your password is tai duan le."<<'\n';
else
{
int ok = 0, num = 0, zimu = 0;
for(int i = 0; i < len; i++)
{
if((s[i] >= 'a' && s[i] <='z') || (s[i] >= 'A' && s[i] <= 'Z')) num = 1;
else if(s[i] >= '0' && s[i] <= '9') zimu = 1;
else if(s[i] == '.') continue;
else ok = 1;
}
if(ok) cout<<"Your password is tai luan le."<<'\n';
else if(num && !zimu) cout<<"Your password needs shu zi."<<'\n';
else if(zimu && !num) cout<<"Your password needs zi mu."<<'\n';
else cout<<"Your password is wan mei."<<'\n';
}
}
return 0;
}
1082 射击比赛
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
getchar();
string x = "", y = "";
int minx = 30000, maxx = 0;
while(n--)
{
string t;
int tx,ty;
cin>>t>>tx>>ty;
if(tx*tx + ty*ty > maxx) maxx = tx*tx + ty*ty, x = t;
if(tx*tx + ty*ty < minx) minx = tx*tx + ty*ty, y = t;
}
cout<<y<<' '<<x<<'\n';
return 0;
}
1083 是否存在相等的差
#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 1e4 + 7;
int vis[maxn];
int main()
{
int n;
cin>>n;
for(int i = 1; i <= n; i++)
{
int x;
cin>>x;
if(x > i) vis[x-i]++;
else vis[i-x]++;
}
for(int i = maxn; ~i; i--)
if(vis[i] > 1) cout<<i<<' '<<vis[i]<<'\n';
return 0;
}
1084 外观数列
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n,d;
cin>>d>>n;
string now = to_string(d);
for(int i = 1; i < n; i++)
{
string later = "";
for(int j = 0; j < now.size();)
{
int k = j + 1;
while(now[j] == now[k] && k < now.size()) k++;
later += now[j] + to_string(k-j);
j = k;
}
now = later;
}
cout<<now<<'\n';
return 0;
}
1085 PAT单位排行
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
struct school{
string name;
int cnt;
double grade;
school() : cnt(0), grade(0){
}
bool operator < (const school &t) const{
if(grade != t.grade) return grade > t.grade;
if(cnt != t.cnt) return cnt < t.cnt;
return name < t.name;
}
};
int main()
{
int n;
cin>>n;
getchar();
unordered_map<string,school> hash;
while(n--)
{
string x,name;
double score;
cin>>x>>score>>name;
for(int i = 0; i < name.size(); i++) name[i] = tolower(name[i]);
if(x[0] == 'T') score *= 1.5;
if(x[0] == 'B') score /= 1.5;
hash[name].name = name;
hash[name].cnt++;
hash[name].grade += score;
}
vector<school> schools;
unordered_map<string,school>::iterator it;
for(it = hash.begin(); it != hash.end(); it++)
{
school s = it->second;
s.grade = (int)(s.grade+1e-9);
schools.push_back(s);
}
sort(schools.begin(),schools.end());
cout<<schools.size()<<'\n';
int rank = 1;
for(int i = 0; i < schools.size(); i++)
{
school s = schools[i];
if(i && s.grade != schools[i-1].grade) rank = i + 1;
printf("%d %s %d %d\n",rank,s.name.c_str(),(int)s.grade,s.cnt);
}
return 0;
}
1086 就不告诉你
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
int main()
{
ll x,y;
cin>>x>>y;
ll ans = x*y;
vector<int> v;
while(ans > 0)
{
v.push_back(ans%10);
ans /= 10;
}
int pos;
for(int i = 0; i < v.size(); i++)
if(v[i]) pos = i, i = v.size() + 1;
for(int i = pos; i < v.size(); i++)
printf("%d",v[i]);
if(!v.size()) puts("0");
return 0;
}
1087 有多少不同的值
#include <iostream>
#include <cmath>
#include <set>
using namespace std;
int main()
{
int n;
cin>>n;
set<int> s;
for(int i = 1; i <= n; i++)
{
int t = floor(i/2) + floor(i/3) + floor(i/5);
s.insert(t);
}
cout<<s.size()<<'\n';
return 0;
}
1088 三人行
#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
string Judge(double a, double b)
{
if(a > b) return "Gai";
if(a < b) return "Cong";
return "Ping";
}
int main()
{
int my,x,y;
cin>>my>>x>>y;
for(int i = 99; i > 9; --i)
{
int j = (i%10)*10 + i/10;
double k = abs(i -j)*1.0/x;
if(j == k*y)
{
cout<<i<<' '<<Judge(my,i)<<' '<<Judge(my,j)<<' '<<Judge(my,k)<<'\n';
return 0;
}
}
cout<<"No Solution"<<'\n';
return 0;
}
1089 狼人杀-简单版
#include <iostream>
using namespace std;
int q[110];
int work(int x, int a, int b) //真话返回0 假话返回 1
{
int t = q[x];
if(t > 0) //不是狼人
{
if(t == a || t == b) return 1;
return 0;
}
t = -t;
if(t == a || t == b) return 0;
return 1;
}
int main()
{
int n;
cin>>n;
for(int i = 1; i <= n; i++) cin>>q[i];
for(int i = 1; i <= n; i++)
for(int j = i + 1; j <= n; j++)
{
int s = work(i, i, j) + work(j, i, j);
if(s != 1) continue;
s = 0;
for(int k = 1; k <= n; k++)
s += work(k, i, j);
if(s != 2) continue;
cout<<i<<' '<<j<<'\n';
return 0;
}
cout<<"No Solution"<<'\n';
return 0;
}
1090 危险品装箱
#include <iostream>
#include <set>
using namespace std;
const int maxn = 1e4 + 7;
struct node{
int x,y;
}a[10007];
int main()
{
int n,m;
cin>>n>>m;
for(int i = 0; i < n; i++)
{
int tx,ty;
cin>>tx>>ty;
a[i] = {
tx, ty};
}
while(m--)
{
int k;
cin>>k;
set<int> v;
v.clear();
for(int i = 0; i < k; i++)
{
int tx;
cin>>tx;
v.insert(tx);
}
int ok = 0;
for(int i = 0; i < n; i++)
{
int x = a[i].x, y = a[i].y;
if(v.find(x) != v.end() && v.find(y) != v.end()) ok = 1;
}
if(ok) cout<<"No"<<'\n';
else cout<<"Yes"<<'\n';
}
return 0;
}
1091 N-自守数
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int x;
cin>>x;
int t = x*x;
string a = to_string(x);
reverse(a.begin(),a.end());
int ok = 0;
for(int i = 0; i < 10; i++)
{
int tx = t*i, ty = t*i;
string b = "";
while(tx)
{
b += to_string(tx%10);
tx /= 10;
if(a == b)
{
cout<<i<<' '<<ty<<'\n';
ok = 1;
break;
}
}
if(ok) break;
}
if(!ok) cout<<"No"<<'\n';
}
return 0;
}
1092 最好吃的月饼
#include <iostream>
#include <algorithm>
using namespace std;
int a[1007];
int main()
{
int n,m;
cin>>n>>m;
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
{
int x;
cin>>x;
a[j] += x;
}
int maxn = 0;
for(int i = 0; i < n; i++)
if(a[i] > maxn) maxn = a[i];
cout<<maxn<<'\n';
int ok = 0;
for(int i = 0; i < n; i++)
if(a[i] == maxn && !ok) ok = 1, cout<<i+1;
else if(a[i] == maxn && ok) cout<<" "<<i+1;
return 0;
}
1093 字符串A+B
#include <iostream>
#include <cstring>
#include <set>
using namespace std;
int main()
{
string a, b, ans = "";
getline(cin,a);
getline(cin,b);
set<char> s;
for(int i = 0; i < a.size(); i++)
if(s.size() == 0)
{
ans += a[i];
s.insert(a[i]);
}
else
{
if(s.find(a[i]) == s.end())
{
ans += a[i];
s.insert(a[i]);
}
}
for(int i = 0; i < b.size(); i++)
if(s.find(b[i]) == s.end())
{
ans += b[i];
s.insert(b[i]);
}
cout<<ans<<'\n';
return 0;
}
1094 谷歌的招聘
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 4e4 + 7;
bool st[maxn];
int primes[maxn], cnt;
void Init()
{
for(int i = 2; i <= maxn; i++)
{
if(!st[i]) primes[cnt++] = i;
for(int j = 0; primes[j] <= maxn/i; j++)
{
st[primes[j]*i] = true;
if(i%primes[j] == 0) break;
}
}
}
bool check(int x)
{
for(int i = 0; primes[i] <= x/primes[i]; i++)
if(x%primes[i] == 0) return false;
return true;
}
int main()
{
Init();
string ch;
int l, k;
cin>>l>>k>>ch;
for(int i = 0; i + k <= l; i++)
{
int t = stoi(ch.substr(i,k));
if(check(t))
{
cout<<ch.substr(i,k)<<'\n';
return 0;
}
}
cout<<"404"<<'\n';
return 0;
}
1095 解码PAT准考证
#include <iostream>
#include <vector>
#include <unordered_map>
#include <string>
#include <algorithm>
using namespace std;
const int maxn = 1e4 + 7;
struct node{
string id;
int grade;
bool operator < (const node &t)const{
if(grade != t.grade) return grade > t.grade;
return id < t.id;
}
};
node p[maxn];
int main()
{
int n,m;
cin>>n>>m;
for(int i = 0; i < n; i++) cin>>p[i].id>>p[i].grade;
for(int i = 1; i <= m; i++)
{
string op,x;
cin>>op>>x;
cout<<"Case "<<i<<": "<<op<<' '<<x<<'\n';
if(op == "1")
{
vector<node> v;
v.clear();
for(int i = 0; i < n; i++)
if(p[i].id[0] == x[0])
v.push_back(p[i]);
if(v.size() == 0) cout<<"NA"<<'\n';
sort(v.begin(),v.end());
for(vector<node>::iterator it = v.begin(); it != v.end(); it++)
{
node now = *it;
cout<<now.id<<' '<<now.grade<<'\n';
}
}
else if(op == "2")
{
int cnt = 0, tot = 0;
for(int i = 0; i < n; i++)
{
string temp = p[i].id.substr(1, 3);
if(temp == x)
{
cnt++;
tot += p[i].grade;
}
}
if(!cnt) cout<<"NA"<<'\n';
else cout<<cnt<<' '<<tot<<'\n';
}
else
{
vector<node> v;
unordered_map<string,int>hash;
for(int i = 0; i < n; i++)
{
string temp = p[i].id.substr(4,6);
if(temp == x) hash[p[i].id.substr(1,3)]++;
}
vector<node>::iterator it;
unordered_map<string,int>::iterator y;
for(y = hash.begin(); y != hash.end(); y++)
{
node now;
now.id = y->first;
now.grade = y->second;
v.push_back(now);
}
if(v.size() == 0) cout<<"NA"<<'\n';
else
{
sort(v.begin(),v.end());
for(it = v.begin(); it != v.end(); it++)
{
node z = *it;
cout<<z.id<<' '<<z.grade<<'\n';
}
}
}
}
return 0;
}
结语
这一百题基本上没怎么考算法,更多的是熟练掌握 S T L STL STL 以及提高代码模拟水平,适合小白练习。