4. 下面不能用于创建一个字典的语句是? ( ) A.d1 = {} B. d2 = {["zhang san",18]: "Good Student"} C. d3 = {2: "two"} D. d4 = {("zhang san",18): "Good Student"}
时间: 2023-07-08 18:54:58 浏览: 187
B. d2 = {["zhang san",18]: "Good Student"}
字典的键必须是可哈希的对象,而列表是不可哈希的,因此不能作为字典的键。其他选项都是合法的字典创建语句,d1创建一个空字典,d3创建一个键为整数2,值为字符串"two"的字典,d4创建一个键为元组("zhang san",18),值为字符串"Good Student"的字典。
相关问题
#include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <map> #include <set> using namespace std ; #define N 100010 #define int long long int n , m ; struct node { int d,p ; bool operator < ( const node &x ) const { return p>x.p; } } a[ N ] ; bool cmp( node a , node b ) { return a.d==b.d?a.p>b.p:a.d<b.d; } priority_queue< node > q ; signed main() { scanf( "%lld" , &n ) ; for( int i = 1 ; i <= n ; i ++ ) { scanf( "%lld%lld" , &a[i].d , &a[i].p ) ; } sort(a+1,a+n+1,cmp); int ans = 0 ; for( int i = 1 ; i <= n ; i ++ ) { if( a[i].d<=(int)q.size() ) { if( q.top().p<a[i].p ) { ans += a[i].p-q.top().p ; q.pop() ; q.push(a[i]) ; } } else q.push(a[i]) , ans += a[ i ].p ; } printf( "%lld\n" , ans ) ; }
这是一段 C++ 代码,实现了一道贪心算法的题目。代码的作用是求解一道题目。在这道题目中,有 $n$ 个任务,每个任务有一个截止时间 $d_i$ 和一个收益 $p_i$。假设你只有一个机器可以执行这些任务。每个任务不能被中断,只能在截止时间前被执行完,执行完一个任务可以获得相应的收益。任务可以以任意顺序执行,但是每个任务都必须在截止时间之前执行完。问你最多可以获得多少收益。
具体而言,这段代码首先读入任务的数量 $n$ 和每个任务的截止时间 $d_i$ 和收益 $p_i$,然后按照截止时间和收益排序。接着,用一个优先队列 $q$ 存储当前可以执行的任务,每次选择一个还未执行的任务,如果当前时间小于等于队列的大小,说明当前任务可以被执行,如果队列里面已经有任务在执行,就比较当前任务的收益和队列里面的任务收益,如果当前任务的收益比队列里面的任务收益高,就替换掉队列里面的任务,并把收益差加到答案里。如果当前时间大于队列的大小,说明当前任务无法被执行,直接放到队列里面。最后输出答案。
这段代码的时间复杂度为 $O(n \log n)$,其中最耗时的是排序操作。
#include<iostream> #include<cstring> using namespace std; class Swap{ public: int n1,n2; double d1,d2; string a1,a2; swap(int x1,int x2) { n1=x2; n2=x1; } swap(double x1,double x2) { d1=x2; d2=x1; } swap(string x1,string x2) { a1=x2; a2=x1; } }; int main() { Swap a; cin>>a.n1>>a.n2; a.swap(a.n1,a.n2); cout<<a.n1<<","<<a.n2<<endl; cin>>a.d1>>a.d2; a.swap(a.d1,a.d2); cout<<a.d1<<","<<a.d2<<endl; cin>>a.a1>>a.a2; a.swap(a.a1,a.a2); cout<<a.a1<<","<<a.a2<<endl; return 0; } 哪错了
程序中的类名应该是 `Swap` 而不是 `swap`,因为 `swap` 是 C++ 标准库中的一个函数名,如果使用相同的名称作为类名可能会导致编译错误。同时,类中的函数名和类名也应该一致,因此 `swap` 函数应该改为 `Swap`。修改后的代码如下所示:
```c++
#include<iostream>
#include<cstring>
using namespace std;
class Swap{
public:
int n1,n2;
double d1,d2;
string a1,a2;
Swap(int x1,int x2)
{
n1=x2;
n2=x1;
}
Swap(double x1,double x2)
{
d1=x2;
d2=x1;
}
Swap(string x1,string x2)
{
a1=x2;
a2=x1;
}
};
int main()
{
Swap a;
cin>>a.n1>>a.n2;
a.Swap(a.n1,a.n2);
cout<<a.n1<<","<<a.n2<<endl;
cin>>a.d1>>a.d2;
a.Swap(a.d1,a.d2);
cout<<a.d1<<","<<a.d2<<endl;
cin>>a.a1>>a.a2;
a.Swap(a.a1,a.a2);
cout<<a.a1<<","<<a.a2<<endl;
return 0;
}
```
另外,类中的构造函数也应该与类名一致。我在修改代码时将构造函数名称改为了 `Swap`。
阅读全文