A、U131732 Woft6c看两任摸鱼王抢咸鱼

思路:逻辑思维题,首先可以自己进行模拟,找到规律。但是要注意开long long。
代码:

#include<stdio.h>
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        long long n;
        scanf("%lld",&n);
        long long ans=(n-1)/2;
        printf("%lld\n",ans);
    }
    return 0;
}

B、U130186 Peterliang学习杨氏矩阵

思路:考察对二维数组,if语句的使用,我们发现数据范围较小,所以使用暴力直接枚举,直接对每列和每行进行枚举,我们用flag来标记,初始化flag为1。如果最后flag为1,表示不符合,否则为符合。

#include<stdio.h>
int a[20][20];
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    bool flag=1;  //一个标记变量
    for(int i=0;i<n;i++){  //对每行进行枚举
        for(int j=1;j<n;j++){
            if(a[i][j]<=a[i][j-1]){
                flag=0;
            }
        }
    }
    for(int j=0;j<n;j++){  //对每列进行枚举
        for(int i=1;i<n;i++){
            if(a[i][j]<=a[i-1][j]){
                flag=0;
            }
        }
    }
    if(flag==1)  printf("YES\n");
    else  printf("NO\n");
    return 0;
}

C、U131913 Peterliang救女神

思路:这题应该是唯一一道涉及算法题的题目了,由于数据较小,所以可以用dp或者dfs,bfs进行求解,新生还看不懂的可以跳过。由于只能往右或者往下走,所以,可以直接进行一个dp,而且我们发现每个位置上的数字比较小,所以可以把-1的位置的数字变为十分大,最后看一下答案的大小即可判断是否能打败怪兽。注意左上角和右下角都可能会有陷阱,这种情况直接输出Sorry。

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define lowbit(x) ((x)&(-x))
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define endl "\n"
#define MP(x,y) (make_pair(x,y))
#define pii pair<int,int>
#define pll pair<long long,long long>
using namespace std;
int n,a[15][15];
int dp[15][15];
int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    memset(dp,0x3f,sizeof(dp));
    if(a[0][0]!=-1) dp[0][0] = a[0][0];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(i==0 && j==0) continue;
            if(a[i][j]==-1) continue;
            if(i>0) dp[i][j] = min(dp[i][j],dp[i-1][j]+a[i][j]);
            if(j>0) dp[i][j] = min(dp[i][j],dp[i][j-1]+a[i][j]);
        }
    }
    if(dp[n-1][n-1]==inf) puts("Sorry");
    else printf("%d\n",dp[n-1][n-1]);
}

后面加了爆搜的写法

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[12][12];
int n;
int mi=0x3f;
void dfs(int x,int y,int sum){
    if(a[x][y]==-1) return;
    if(x>n||y>n)  return;
    if(x==n&&y==n){
        mi=min(mi,sum);
        return;
    }
    dfs(x+1,y,sum+a[x+1][y]);
    dfs(x,y+1,sum+a[x][y+1]);
}
void solve(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>a[i][j];
        }
    }
    if(a[1][1]==-1||a[n][n]==-1)  cout<<"Sorry"<<endl;
    else{
        dfs(1,1,a[1][1]);
        if(mi>=0x3f)  cout<<"Sorry"<<endl;
        else  cout<<mi<<endl;
    }
}
int main(){
    solve(); 
    return 0;
}

D、U131840 Aaryn和Woft6c的字符串出现次数

思路:这个由于数据范围很小,所以可以直接进行一个处理,用一个数组num来记录26个小写字符的个数,然后找出最大的那个,最后按顺序遍历一下26个字符的个数,如果是等于最大就输出。所以不会排序也没有关系。不过可能同学们对于字符串的输入输出还不了解,所以看着办吧。所以多学多接触!!!

#include<bits/stdc++.h>
using namespace std;
int data[50];
int main()
{
    int n,maxn;
    scanf("%d",&n);
    while(n--)
    {
        memset(data,0,sizeof(data));
        string x;
        cin>>x;
        maxn=0;
        int num=x.length();
        for(int i=0;i<num;i++)
        {
            data[x[i]-'a']++;
            maxn=max(maxn,data[x[i]-'a']);
        }
        for(int i=0;i<26;i++)
        {
            if(data[i]==maxn)  printf("%c",i+'a');
        }
        printf("\n");
    }
    return 0;
}

E、U131705 Peterliang的时间复杂度

思路:这个思路其实很简单,由于是在同一天,我们可以以00:00:00为起始点,然后计算两个时间距离这个时刻的时间,最后去两者之间的差值即可。
代码:

#include<stdio.h>
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int h1,h2,m1,m2,t1,t2;
        scanf("%d%d%d",&h1,&m1,&t1);
        scanf("%d%d%d",&h2,&m2,&t2);
        int sum1=h1*3600+m1*60+t1;
        int sum2=h2*3600+m2*60+t2;
        int ans=sum1-sum2;
        if(sum1>sum2)  printf("%d\n",ans);
        else  printf("%d\n",-ans);
    }
    return 0;
}

F、U131906 相信我!这题很难!!!

签到题

#include<stdio.h>
int main(){
    printf("I love NCU\n");
    printf("I love ACM\n");
    return 0;
}