#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int a, b;
cin >> a>> b;
string s = to_string(a + b);
int len = s.length();
if (s[0] == '-')
{
cout << s[0];
for (int i = 1; i < s.length(); i++)
{
if (i-1 && (len - i) % 3 == 0)cout << ",";
cout << s[i];
}
}
else
{
for (int i = 0; i < s.size(); i++)
{
if (i && (len-i) % 3 == 0)cout << ",";
cout << s[i];
}
}
cout << endl;
return 0;
}
1002 A+B for Polynomials (25 分)
#include<iostream>
#include<stdio.h>
#include<iomanip>
using namespace std;
int main()
{
float a[1005] = { 0 };
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int k;
cin >> k;
cin >> a[k];
}
cin >> n;
for (int i = 0; i < n; i++)
{
int k;
float t;
cin >> k;
cin>>t;
a[k] += t;
}
int sum = 0;
for (int i = 0; i < 1005; i++)
{
if (a[i])sum++;
}
cout << sum;
for (int i = 1004; i >=0; i--)
{
if (a[i])
printf(" %d %.1f", i, a[i]); //C
//cout << " " << i << " "<<setiosflags(ios::fixed) << setprecision(1) << a[i]; //C++
}
cout << endl;
return 0;
}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v[105];
int leafnode[105] = { 0 };
int max_depth = 0;
void dfs(int id,int depth)
{
if (v[id].size() == 0)
{
leafnode[depth]++;
max_depth = max(max_depth, depth);
return;
}
for (int i = 0; i < v[id].size(); i++)
{
dfs(v[id][i], depth + 1);
}
}
int main()
{
//存入二维数组
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int id, k;
cin >> id >> k;
for (int j = 0; j < k; j++)
{
int t;
cin >> t;
v[id].push_back(t);
}
}
//dfs
dfs(1, 0);
//输出
cout << leafnode[0];
for (int i = 1; i <= max_depth; i++)
{
cout << " " << leafnode[i];
}
return 0;
}
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
string num[10] = { "zero","one","two","three","four","five","six","seven","eight","nine" };
int main()
{
//一开始用的long long 转string 测试样例4过不了,说明测试样例四超过long long 表示范围了
string s;
cin >> s;
int sum = 0;
for (int i = 0; i < s.size(); i++)
{
sum += s[i] - '0';
}
string s_sum = to_string(sum);
for (int i = 0; i < s_sum.size(); i++)
{
if (i == 0)cout << num[s_sum[i] - '0'];
else cout<<" "<< num[s_sum[i] - '0'];
}
cout << endl;
return 0;
}
1006 Sign In and Sign Out (25 分)
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<limits.h>
#include<stdio.h>
using namespace std;
int main()
{
int minn = INT_MAX;
int maxn = INT_MIN;
int t;
cin >> t;
string unlocked, locked;
for (int i = 0; i < t; i++)
{
string temp;
cin>>temp;
int h, m, s, eh, em, sm;
scanf("%d:%d:%d %d:%d:%d", &h, &m, &s, &eh, &em, &sm);
//scanf_s("%d:%d:%d", &h, &m, &s); vs上要用scanf_s
//scanf_s("%d:%d:%d",&eh, &em, &sm);
if (h * 3600 + m * 60 + s < minn)
{
minn = h * 3600 + m * 60 + s;
unlocked = temp;
}
if (eh * 3600 + em * 60 + sm > maxn)
{
maxn = eh * 3600 + em * 60 + sm;
locked = temp;
}
}
cout << unlocked << " " << locked << endl;
return 0;
}
1007 Maximum Subsequence Sum (25 分)
#include<iostream>
using namespace std;
int main()
{
int a[10005] = {0};
int k;
cin >> k;
for (int i = 0; i < k; i++)
{
cin >> a[i];
}
int sum = -1, start = a[0], end = a[0]; //sum初始为1是为了方便过全负的样例
int temp = 0,t_start= a[0],t_end= a[0];
for (int i = 0; i < k; i++)
{
temp += a[i];
if (temp < 0)
{
temp = 0;
t_start = t_end = a[i+1];
continue;
}
if (temp > sum)
{
t_end=a[i];
start = t_start;
end = t_end;
sum = temp;
}
}
if (sum < 0)
{
cout << 0 << " " << a[0] << " " << a[k-1] << endl;
}
else cout << sum << " " << start << " " << end << endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int k;
cin >> k;
int sum = 0,now=0;
for (int i = 0; i < k; i++)
{
int temp;
cin >> temp;
if (temp > now)sum += 6 * (temp - now);
if (temp < now)sum += 4 * (now -temp) ;
now = temp;
sum += 5; //即使原地不动也要+5(如在第0层再按第0层也要+5)
}
cout << sum << endl;
return 0;
}
1009 Product of Polynomials (25 分)
#include<iostream>
using namespace std;
#define num 2005 //最大指数不超过它
double a[num] = { 0 };
double b[num] = { 0 };
double c[num] = { 0 };
int main()
{
int k1;
cin >> k1;
for (int i = 0; i < k1; i++)
{
int index;
cin >> index;
cin >> a[index];
}
int k2;
cin >> k2;
for (int i = 0; i < k2; i++)
{
int index;
cin >> index;
cin >> b[index];
for (int j = 0; j < num; j++)
{
if(a[j])c[index + j] += b[index] * a[j];
}
}
int sum = 0;
for (int i = 0; i < num; i++)
{
if (c[i])sum++;
}
cout << sum;
for (int i = num-1; i >= 0; i--)
{
if (c[i])printf(" %d %.1f", i, c[i]);
}
return 0;
}
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
long long convert(string n, long long radix)
{
long long sum = 0;
for (int i = n.size()-1,index=0; i >=0; i--)
{
int temp = isdigit(n[i]) ? n[i] - '0' : n[i] - 'a'+10;
sum += temp * pow(radix, index++);
}
return sum;
}
long long find_radix(string n, long long num)
{
char it = *max_element(n.begin(), n.end());
long long low = (isdigit(it) ? it - '0' : it - 'a' + 10) + 1;
long long high = max(low, num);
while (low <= high)
{
long long mid = (low + high) / 2;
long long temp = convert(n, mid);
if (temp<0 || temp>num)high = mid - 1; //溢出时temp会小于0
else if (temp == num)return mid;
else low = mid + 1;
}
return -1;
}
int main()
{
string n1, n2;
long long tag, radix,result;
cin >> n1 >> n2 >> tag >> radix;
result = (tag == 1 ? find_radix(n2, (convert(n1, radix))) : find_radix(n1, (convert(n2, radix))));
if (result != -1)
{
cout << result << endl;
}
else cout << "Impossible" << endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
float g[3][3] = { 0 };
int max_g[3] = { 0 };
char c[3] = { 'W','T','L' };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cin >> g[i][j];
if (g[i][j] > g[i][max_g[i]])max_g[i] = j;
}
}
float sum =1;
for (int i = 0; i < 3; i++)
{
cout << c[max_g[i]]<<' ';
sum *= g[i][max_g[i]];
}
printf("%.2f\n", (sum * 0.65 - 1) * 2);
return 0;
}
1013 Battle Over Cities (25 分)
#include<iostream>
#include<string.h>
using namespace std;
int v[1005][1005] = {0};
int visit[1005] = { 0 };
int n;
void dfs(int node)
{
visit[node] = 1;
for (int i = 1; i <= n; i++)
{
if (visit[i] == 0&&v[node][i]==1)
{
dfs(i);
}
}
}
int main()
{
int m, k;
cin >> n >> m >> k;
for (int i = 0; i < m; i++)
{
int a, b;
cin >> a >> b;
v[a][b] = v[b][a] = 1;
}
for (int i = 0; i < k; i++)
{
memset(visit, 0, sizeof(visit));
int a;
cin >> a;
int cnt = 0;
visit[a] = 1;
for (int j = 1; j <= n; j++)
{
if (visit[j] == 0)
{
dfs(j);
cnt++;
}
}
cout << cnt - 1 << endl;
}
return 0;
}
#include<iostream>
#include<math.h>
#include<stack>
using namespace std;
int isprime(int n)
{
if (n == 1)return 0; //1不是素数
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i == 0)return 0;
}
return 1;
}
int convert(int n,int radix)
{
stack<int> sta;
while (n)
{
sta.push(n % radix);
n /= radix;
}
int temp = 0,index = 0;
while (!sta.empty())
{
temp += sta.top() * pow(radix, index++);
sta.pop();
}
return temp;
}
int main()
{
int n, d;
while (cin >> n && n >= 0)
{
cin >> d;
if (isprime(n) && isprime(convert(n, d)))
cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node
{
int come, time;
};
int second(int h, int m, int s)
{
return h * 3600 + m * 60 + s;
}
bool cmp(node a, node b)
{
return a.come < b.come;
}
int main()
{
int n, k;
cin >> n >> k;
vector<node> custom;
for (int i = 0; i < n; i++)
{
int h, m, s, t;
scanf("%d:%d:%d %d", &h, &m, &s, &t);
if (second(h, m, s) > 61200)continue; //大于17:00
node temp;
temp.come = second(h, m, s);
temp.time = t*60;
custom.push_back(temp);
}
sort(custom.begin(), custom.end(), cmp);
vector <int>window(k, 28800); //K个窗口都从8:00开始
double ans = 0;
for (int i = 0; i < custom.size(); i++)
{
int min_index = 0, min_finish = window[0];
for (int j = 1; j < k; j++)
{
if (min_finish > window[j])
{
min_finish = window[j];
min_index = j;
}
}
if (window[min_index] <= custom[i].come)
{
window[min_index] = custom[i].come + custom[i].time;
}
else
{
ans += (window[min_index] - custom[i].come);
window[min_index] += custom[i].time;
}
}
if (custom.size() == 0)cout << "0.0" << endl;
else
{
printf("%.1f\n", ans / 60.0 / custom.size());
}
return 0;
}
1019 General Palindromic Number (20 分)
#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
int main()
{
long long n, radix;
cin >> n >> radix;
vector<int> a;
while (n)
{
a.push_back(n % radix);
n /= radix;
}
int flag = 0;
for (int i = 0, j = a.size() - 1; i < j; i++,j--)
{
if (a[i] != a[j])
{
flag = 1;
break;
}
}
if (flag)cout << "No" << endl;
else cout << "Yes" << endl;
for (int i = a.size()-1; i>=0; i--)
{
if (i == a.size() - 1)cout << a[i];
else cout << " " << a[i];
}
cout << endl;
return 0;
}
#include<iostream>
#include<queue>
using namespace std;
struct node
{
int data;
node* left;
node* right;
};
int n;
int postorder[35] = {0};
int inorder[35] = { 0 };
int visited[35] = { 0 };
void create(node * root, int r)
{
int rindex = 0;
for (int i = 0; i < n; i++)
{
if (inorder[i] == postorder[r])
{
rindex = i;
break;
}
}
visited[rindex] = 1;
int lcn = 0, rcn = 0;
for (int i = rindex - 1; !visited[i] && i >= 0; i--) lcn++; //统计该结点的左子树
for (int i = rindex + 1; !visited[i] && i < n; i++) rcn++; //统计该结点的右子树
if (lcn == 0)root->left = NULL; //左子树为空,不递归
else
{
node* lc = new node;
lc->data = postorder[r-rcn-1];
root->left = lc;
create(lc, r - rcn - 1);
}
if (rcn == 0)root->right = NULL;
else
{
node* rc = new node;
rc->data = postorder[r - 1];
root->right = rc;
create(rc, r - 1);
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> postorder[i];
}
for (int i = 0; i < n; i++)
{
cin >> inorder[i];
}
node root;
root.data = postorder[n - 1];
create(&root, n - 1);
queue<node> q;
q.push(root);
while (!q.empty())
{
node temp = q.front();
q.pop();
cout << temp.data;
if(temp.left!=NULL)q.push(*temp.left);
if(temp.right!=NULL)q.push(*temp.right);
if (!q.empty())cout << " ";
}
cout << endl;
return 0;
}
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
#include<string.h>
using namespace std;
int n=0, maxheight = 0;
vector<vector<int>> v;
int visit[10005] = { 0 };
set<int> s;
vector<int>temp;
void dfs(int node,int height)
{
if (height > maxheight)
{
temp.clear();
temp.push_back(node);
maxheight = height;
}
else if(height==maxheight)
{
temp.push_back(node);
}
visit[node] = 1;
for (int i = 0; i < v[node].size(); i++)
{
if (visit[v[node][i]] == 0)
{
dfs(v[node][i], height + 1);
}
}
}
int main()
{
cin >> n;
v.resize(n + 1);
int a, b,s1=0,cnt=0;
for (int i = 0; i < n - 1; i++)
{
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
for (int i = 1; i <= n; i++)
{
if (visit[i] == 0)
{
dfs(i, 1);
if (i == 1)
{
if (temp.size() != 0)s1 = temp[0];
for (int j = 0; j < temp.size(); j++)
{
s.insert(temp[j]);
}
}
cnt++;
}
}
if (cnt > 1)
{
printf("Error: %d components", cnt);
}
else
{
temp.clear();
maxheight=0;
memset(visit,0, sizeof(visit));
dfs(s1, 1);
for (int i = 0; i < temp.size(); i++)
{
s.insert(temp[i]);
}
for (auto it = s.begin(); it != s.end(); it++)
{
cout << *it << endl;
}
}
return 0;
}
1023 Have Fun with Numbers (20 分)
#include<iostream>
#include<string>
using namespace std;
int flag1[10] = { 0 };
int flag2[10] = { 0 };
int main()
{
string s;
cin >> s;
int len = s.size();
for (int i = 0; i < s.size(); i++)
{
flag1[s[i] - '0']++;
}
int ans[25] = { 0 },j=0,c=0;
for (int i = s.size()-1; i >=0; i--)
{
int temp = (s[i] - '0') * 2+c;
ans[j] = temp % 10;
flag2[ans[j++]]++;
c = temp / 10;
}
if (c)ans[j++] = c; //最高位产生进位
int flagyes = 1;
for (int i = 0; i < 10; i++)
{
if (flag1[i] != flag2[i])
{
flagyes = 0;
break;
}
}
if (flagyes)cout << "Yes" << endl;
else cout << "No" << endl;
for (int i = j-1 ; i >= 0; i--)
{
cout << ans[i];
}
cout << endl;
return 0;
}
1024 Palindromic Number (25 分)
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s;
void add(string t)
{
int c = 0;
for (int i =0; i <s.size(); i++)
{
int temp = s[i] - '0' + t[i] - '0' + c;
s[i] = temp % 10 + '0';
c = temp / 10;
}
if (c)s += '0' + c;
reverse(s.begin(), s.end());
}
int main()
{
int k;
cin >> s >> k;
//printf("%s %d", &s, &k);
int i = 0;
for (; i <= k; i++)
{
string t = s;
reverse(t.begin(), t.end());
if (t == s || i == k)break;
add(t);
}
cout << s << endl << i;
return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdio.h>
using namespace std;
struct student
{
long long no;
int score, finrank, loca, locarank;
};
bool cmp(student a, student b)
{
return a.score != b.score ? a.score > b.score:a.no < b.no;
}
int main()
{
int n;
cin >> n;
vector<student> fin;
for(int i=1;i<=n;i++)
{
int k;
cin >> k;
vector<student> v(k);
for (int j = 0; j < k; j++)
{
cin >> v[j].no >> v[j].score;
v[j].loca = i;
}
sort(v.begin(), v.end(),cmp);
v[0].locarank = 1;
fin.push_back(v[0]);
for (int j = 1; j < k; j++)
{
v[j].locarank = (v[j].score == v[j - 1].score ? v[j - 1].locarank : j + 1);
fin.push_back(v[j]);
}
}
sort(fin.begin(), fin.end(), cmp);
fin[0].finrank = 1;
for (int i = 1; i < fin.size(); i++)
{
fin[i].finrank = (fin[i].score == fin[i - 1].score ? fin[i - 1].finrank : i + 1);
}
cout << fin.size() << endl;
for (int i = 0; i < fin.size(); i++)
{
//no前几位可能为0,右对齐补0
printf("%013lld", fin[i].no);
cout << " " << fin[i].finrank << " " << fin[i].loca << " " << fin[i].locarank << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
char c[14] = { "0123456789ABC" };
int t=0;
for (int i = 0; i < 3; i++)
{
cin >> t;
if(i==0)cout << "#";
cout << c[t / 13] << c[t % 13];
}
cout << endl;
return 0;
}
#include<iostream>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
struct node
{
int no;
char name[10];
int score;
};
int n, type;
bool cmp(node a, node b)
{
if(type==1) return a.no < b.no;
else if (type == 2)
{
if (strcmp(a.name, b.name) == 0)return a.no < b.no;
return strcmp(a.name, b.name) <= 0;
}
else
{
if (a.score == b.score)return a.no < b.no;
return a.score <= b.score;
}
}
int main() //用cin cout 最后样例超时
{
cin >> n>>type;
vector<node> v;
for (int i = 0; i < n; i++)
{
node temp;
scanf("%d %s %d", &temp.no, temp.name, &temp.score);
//cin >> temp.no >> temp.name >> temp.score;
v.push_back(temp);
}
sort(v.begin(), v.end(), cmp);
for (int i = 0; i < n; i++)
{
printf("%06d %s %d\n", v[i].no, v[i].name, v[i].score);
//cout << v[i].no << " " << v[i].name << " " << v[i].score << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int a[200005] = { 0 };
int b[200005] = { 0 };
int ans[400010] = { 0 };
int main()
{
int n1,n2;
cin >> n1;
for (int i = 0; i < n1; i++)cin >> a[i];
cin >> n2;
for (int i = 0; i < n2; i++)cin >> b[i];
int index = 0;
int i = 0, j = 0;
while( i < n1 && j < n2) //归并
{
if (a[i] < b[j])ans[index++] = a[i++];
else ans[index++] = b[j++];
}
while (i<n1)
{
ans[index++] = a[i++];
}
while (j < n2)
{
ans[index++] = b[j++];
}
cout << ans[(n1 + n2-1) / 2] << endl;
return 0;
}
#include <iostream>
#include <string.h>
#include<stdio.h>
using namespace std;
int main() {
char c[81] = {0}, u[30][30];
memset(u, ' ', sizeof(u));
scanf("%s", c);
int n = strlen(c) + 2;
int n1 = n / 3, n2 = n / 3 + n % 3, index = 0;
for (int i = 0; i < n1; i++) u[i][0] = c[index++];
for (int i = 1; i <= n2 - 2; i++) u[n1 - 1][i] = c[index++];
for (int i = n1 - 1; i >= 0; i--) u[i][n2 - 1] = c[index++];
for (int i = 0; i < n1; i++) {
for (int j = 0; j < n2; j++)
printf("%c", u[i][j]);
printf("\n");
}
return 0;
}
#include<iostream>
#include<stdio.h>
using namespace std;
struct NODE {
char key;
int next;
bool flag;
}node[100000];
int main() {
int s1, s2, n, a, b;
scanf("%d%d%d", &s1, &s2, &n);
char data;
for (int i = 0; i < n; i++) {
scanf("%d %c %d", &a, &data, &b);
node[a] = { data, b, false };
}
for (int i = s1; i != -1; i = node[i].next)
node[i].flag = true;
for (int i = s2; i != -1; i = node[i].next) {
if (node[i].flag == true) {
printf("%05d", i);
return 0;
}
}
printf("-1");
return 0;
}
#include<iostream>
#include<string.h>
#include<string>
#include<vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<string> v;
for (int i = 0; i < n; i++)
{
string name,s;
cin >> name >> s;
int flag = 0;
for (int i = 0; i < s.size(); i++)
{
switch (s[i])
{
case '1':s[i] = '@'; flag = 1; break;
case'0':s[i] = '%'; flag = 1; break;
case 'l':s[i] = 'L'; flag = 1; break;
case'O':s[i] = 'o'; flag = 1; break;
}
}
if (flag)
{
string temp = name + " " + s;
v.push_back(temp);
}
}
int cnt = v.size();
if (cnt != 0) {
printf("%d\n", cnt);
for (int i = 0; i < cnt; i++)
cout << v[i] << endl;
}
else if (n == 1) {
printf("There is 1 account and no account is modified");
}
else {
printf("There are %d accounts and no account is modified", n);
}
return 0;
}