头像

zinkt




离线:5天前


最近来访(15)
用户头像
Vincent233
用户头像
L_H_R
用户头像
zzy51
用户头像
fly_fish
用户头像
栗山未来老公
用户头像
就是要AC
用户头像
Zzhowe
用户头像
散久良
用户头像
她似花落亦如霞
用户头像
whale77
用户头像
Lims
用户头像
silo_zq


zinkt
6天前

buaa机试练习

字符查找删除问题

题目描述
给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。
输入描述:
输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

输出描述:
删除输入的短字符串(不区分大小写)并去掉空格,输出。

#include <stdio.h>
#include <string.h>

void deleteAndOut(char* sub, char* str) {
    for (int i = 0; i < strlen(str); i++) {
        if(str[i] == ' ') continue;
        if(sub[0] != str[i]) {
            putchar(str[i]);
        }else if(strncmp(sub, str+i, strlen(sub)) == 0) {
            i += strlen(sub)-1;
        }else {
            putchar(str[i]);
        }
    }
}
char s[10], buf[101];
int main(){
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    gets(s);
    int i = fread(buf, sizeof(char), 101, stdin);
    deleteAndOut(s, buf);
    return 0;
}

矩阵旋转问题

题目描述
任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。 要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。
输入描述:
输入有多组数据。
每组数据第一行输入n(1<=n<=9),从第二行开始输入两个n阶矩阵。

输出描述:
判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
如果旋转角度的结果有多个,则输出最小的那个。

#include <stdio.h>
#include <string.h>

int m1[9][9], m2[9][9];
int main(){
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &m1[i][j]);
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &m2[i][j]);
        }
    }
    int b0 = 1, b90 = 1, b180 = 1, b270 = 1;
    // 0
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if(m1[i][j] != m2[i][j]) {
                b0 = 0;
                break;
            }
        }
    }
    // 90
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if(m1[i][j] != m2[j][n-i-1]) {
                b90 = 0;
                break;
            }
        }
    }
    // 180
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if(m1[i][j] != m2[n-i-1][n-j-1]) {
                b180 = 0;
                break;
            }
        }
    }
    // 270
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if(m1[i][j] != m2[n-j-1][i]) {
                b270 = 0;
                break;
            }
        }
    }
    if(b0)
        puts("0");
    else if(b90)
        puts("90");
    else if(b180)
        puts("180");
    else if(b270)
        puts("270");
    else
        puts("-1");
    return 0;
}

迭代求立方根

题目描述
立方根的逼近迭代方程是 y(n+1) = y(n)2/3 + x/(3y(n)*y(n)),其中y0=x.求给定的x经过n次迭代后立方根的值。
输入描述:
输入有多组数据。
每组一行,输入x n。

输出描述:
迭代n次后的立方根,double精度,保留小数点后面六位。

#include <stdio.h>

int main(){
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    double x;
    int n;
    while(scanf("%lf %d", &x, &n) != EOF) {
        double y = x;
        while(n--) {
            y = y * 2 / 3 + x / (3 * y * y);
        }
        printf("%.6lf\n", y);
        }

    return 0;
}



zinkt
6个月前
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* getTail(ListNode* head){
        while(head -> next) head = head -> next;
        return head;
    }


    ListNode* quickSortList(ListNode* head) {
        if(head == NULL || head -> next == NULL) return head;
        ListNode* lp = new ListNode(-1),* midp = new ListNode(-1), *rp = new ListNode(-1),* ltail = lp,* midtail = midp,* rtail = rp;
        int mid = head -> val;
        for(auto ptr = head; ptr ; ptr = ptr -> next){
            if(ptr -> val < mid){
                ltail -> next = ptr;
                ltail = ptr;
            }else if(ptr -> val > mid){
                rtail -> next = ptr;
                rtail = ptr;
            }else{
                midtail -> next = ptr;
                midtail = ptr;
            }
        }
        ltail -> next = midtail -> next = rtail -> next = NULL;

        lp -> next = quickSortList(lp -> next);
        rp -> next = quickSortList(rp -> next);

        getTail(lp) -> next = midp -> next;
        getTail(midp) -> next = rp -> next;

        return lp -> next;
    }
};


活动打卡代码 AcWing 756. 蛇形矩阵

zinkt
6个月前
#include <iostream>

using namespace std;
const int N = 110;
int mm[N][N];
int n, m;

int main(){
    cin >> n >> m;
    int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1}, dir = 0;
    int x = 0, y = 0;
    for (int i = 1; i <= n*m; i++){
        mm[y][x] = i;
        x += dx[dir], y += dy[dir];
        if(x < 0 || x >= m || y < 0 || y >= n || mm[y][x] != 0){
            x -= dx[dir], y -= dy[dir];
            dir = (dir+1)%4;
            x += dx[dir], y += dy[dir];
        }

    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cout << mm[i][j] << " ";
        }
        cout << endl;
    }
}



zinkt
6个月前

模拟即可

对于每个点,假设将它作为直角所在的点(题目设定),遍历其它点,找到与它组成直角三角形的点,即:
x1 == x2, y1 == y3,求出最大的abs(y1-y2)abs(x1-x3)
再求其面积*2,取最大值即可

代码

#include <iostream>

using namespace std;
const int N = 110;
int xa[N], ya[N], res;


int main(){
    int n;
    cin >> n;
    for (int i = 0; i < n; i++){
        cin >> xa[i] >> ya[i];
    }
    for (int i = 0; i < n; i++){
        int x = xa[i], y = ya[i];
        int maxx = 0, maxy = 0;
        for(int j = 0; j < n; j++){
            if(xa[j] == x) maxy = max(maxy, abs(ya[j] - y));
            if(ya[j] == y) maxx = max(maxx, abs(xa[j] - x));
        }
        res = max(res, maxx * maxy);
    }
    cout << res;

}


活动打卡代码 AcWing 1671. 三角形

zinkt
6个月前
#include <iostream>

using namespace std;
const int N = 110;
int xa[N], ya[N], res;


int main(){
    int n;
    cin >> n;
    for (int i = 0; i < n; i++){
        cin >> xa[i] >> ya[i];
    }
    for (int i = 0; i < n; i++){
        int x = xa[i], y = ya[i];
        int maxx = 0, maxy = 0;
        for(int j = 0; j < n; j++){
            if(xa[j] == x) maxy = max(maxy, abs(ya[j] - y));
            if(ya[j] == y) maxx = max(maxx, abs(xa[j] - x));
        }
        res = max(res, maxx * maxy);
    }
    cout << res;

}


活动打卡代码 AcWing 1671. 三角形

zinkt
6个月前
#include <iostream>

using namespace std;
const int N = 110;
int xa[N], ya[N], res;


int main(){
    int n;
    cin >> n;
    for (int i = 0; i < n; i++){
        cin >> xa[i] >> ya[i];
    }
    for (int i = 0; i < n; i++){
        int x = xa[i], y = ya[i];
        int maxx = 0, maxy = 0;
        for(int j = 0; j < n; j++){
            if(xa[j] == x) maxy = max(maxy, abs(ya[j] - y));
            if(ya[j] == y) maxx = max(maxx, abs(xa[j] - x));
        }
        res = max(res, maxx * maxy);
    }
    cout << res;

}


活动打卡代码 AcWing 1442. 单词处理器

zinkt
6个月前
#include <iostream>
#include <string>
using namespace std;
int n, k;
string tmp;
int main(){
    cin >> n >> k;
    int buf = k;
    while(n--){
        cin >> tmp;
        buf -= tmp.size();
        if(buf < 0){
            cout << "\n" << tmp << " ";
            buf = k - tmp.size();
        }else{
            cout << tmp << " ";
        }
    }


}


活动打卡代码 AcWing 1459. 奶牛体操

zinkt
6个月前
#include <iostream>

using namespace std;
int k, n;
int m[22][22];
int tmp[22];
int main(){
    cin >> k >> n;
    int ktemp = k;
    while(ktemp--){
        for (int i = 1; i <= n; i++){
            cin >> tmp[i];
        }
        for (int i = 1; i < n; i++){
            for (int j = i+1; j <= n; j++){
                m[tmp[i]][tmp[j]]++;
            }
        }
    }
    int cnt = 0;
    for (int i = 1 ; i <= n; i++){
        for (int j = 1; j <= n; j++){
            if(m[i][j] == k) cnt++;
        }
    }
    cout << cnt;
}


活动打卡代码 AcWing 3745. 牛的学术圈 I

zinkt
6个月前
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int n, l;
int a[N];

//有至少 h 篇引用次数不少于 h 的论文的最大整数 h
int main(){
    cin >> n >> l;
    for (int i = 1; i <= n; i++){
        cin >> a[i];
    }
    sort(a+1, a+n+1, greater<int>());
    int h = 0;
    for (int i = 1; i <= n; i++){
        if (a[i] >= i) h = i;
    }
    int cnt = 0;
    for (int i = 1; i <= h; i++){
        if(a[i] == h) cnt++;
    }
    if(a[h+1] < h || l < cnt+1) {
        cout << h;
    }else{
        cout << h+1;
    }


}


活动打卡代码 AcWing 3370. 牛年

zinkt
6个月前
#include <iostream>
#include <string>
#include <map>
using namespace std;

string a,b,c,d;
map<string, int> zodiac = {{"Ox", 0},{"Tiger", 1},{"Rabbit",2},{"Dragon",3},{"Snake",4},{"Horse",5},{"Goat",6},{"Monkey",7},{"Rooster",8},{"Dog",9},{"Pig",10},{"Rat",11}};
map<string, long long> mm;
int n;

int main(){
    mm["Bessie"] = 0;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> a >> b >> b >> b >> c >> d >> d >> d;
        if (b == "previous"){
            int r = ((mm[d]- zodiac[c]) % 12 + 12) % 12;
            if (!r) r = 12;
            mm[a] = mm[d] - r;
        }else{
            int r = ((zodiac[c] - mm[d]) % 12 + 12) % 12;
            if (!r) r = 12;
            mm[a] = mm[d] + r;
        }
    }
    cout << abs(mm["Elsie"]);

}