工作室课题习题练习答案

0015

#include <cstdio>
#include <iostream>
using namespace std;
const int mod = 20100713;
typedef long long ll;
const int N = 1e6+10;
ll f[N];//k!
ll quick(ll a,ll n){
 ll ans = 1;
 while(n){
  if(n&1) ans = (ans*a)%mod;
  a = (a*a)%mod;
  n>>=1;
 }
 return ans;
} 
//预处理k! 
void init(){
 f[0] = f[1] = 1;
 for(int i = 2;i <= N-10;i++){
  f[i] = (f[i-1]*i)%mod;
 }
}
int main(){
 init();
 int t;scanf("%d",&t);
 ll n,k;
 while(t--){
  scanf("%lld%lld",&n,&k);
  ll ans = (f[k]*(quick(k+1,n-k)-quick(k,n-k)+mod)%mod)%mod;
  printf("%lld\n",ans);
 }
 return 0;
}

0023

#include<stdio.h>
int main()
{
	int  b,a[200];
	int i,j,t;
	scanf("%d",&b);
	for(i=0;i<b;i++)
		scanf("%d",&a[i]);
	for(i=0;i<b;i++)
		for(j=0;j<b-i-1;j++)
		{
			if(a[j]<a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	for(i=0;i<10;i++)
		printf("%d ",a[i]);

	return 0;
}

0032

#include<iostream>
#include <algorithm>
#include<string>
using namespace std;
int compara(string a, string b)
{
	string a1 = a.substr(6, 8);
	string a2 = b.substr(6, 8);
	if (a1 == a2)
		return a > b;
	else
		return a1 > a2;
}
int main()
{
	int n;
	cin >> n;
	string a[100000];
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	sort(a, a + n, compara);
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << endl;
	}
	return 0;
}

 0035

//拓扑排序
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;
bool book[26];
set<int> s_out[26]; //s_out[i] 从i出发能到的点(没有重复)
set<int> s_in[26];  //s_in[i]  能到i的所有的点
int main()
{
    char a,b,c;
    while(cin>>a>>b>>c)
    {
        s_out[a - 'A'].insert(c - 'A');
        s_in[c -'A'].insert(a - 'A');
        book[a - 'A'] = true;
        book[c - 'A'] = true;
    }   
    queue<int> q;
    for(int i=0;i<26;i++)
        if(s_in[i].size() == 0 && book[i])  //把所有入度为0的点都入队
            q.push(i);
    char ans[26];
    int k = 0;
    while(! q.empty())
    {
        int j = q.front();
        set<int>::iterator it;
        for(it = s_out[j].begin();it!=s_out[j].end();it++)
        {
            int to = *it;       // *迭代器是元素值
            s_in[to].erase(j);  //删除该点和他连的边
            if(s_in[to].size()==0)
                q.push(to);
        }
        s_out[j].clear();   //删除这个点了
        ans[++k] = (char) j + 'A';
        q.pop();
    }

    int i;
    for(int i=0;i<26;i++)
    {
        if(s_in[i].size() > 0)
        {
            puts("No Answer!");
             return 0;
        }
    }
    for(int i=1;i<=k;i++) printf("%c",ans[i]);
}

0052

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct student
{
	string name;
	int sorce=0,id;
};
int cmp(student a, student b)
{
	if (a.sorce == b.sorce)
		return a.id < b.id;
	return a.sorce > b.sorce;
}
int main()
{
	int n, m;
	cin >> n;
	vector<student>arr(n);
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i].name;
		arr[i].id = i;
	}
	string t;
	int sorce,cnt=0,s=1;
	cin >> m;
	for (int i = 0; i < m*n; i++)
	{
		cin >> sorce >> t;
		cnt++;
		for (int j = 0; j < arr.size(); j++)
		{
			if (arr[j].name == t)
			{
				arr[j].sorce += sorce;
				break;
			}
		}
		if (cnt == n)//输入n次,代表一次考试
		{
			s = 0;
			cnt = 0;
			sort(arr.begin(), arr.end(), cmp);//排序
			for (int j = 0; j < arr.size(); j++)
			{
				if (arr[j].name == "DaDa")
				{
					cout << j+1 << endl;
					break;
				}
			}
		}
	}
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值